Rename derived event models to be more self-explanatory, fixed a couple of bugs
- Legacy-Id: 2872
This commit is contained in:
parent
dd72649d3d
commit
3ecd539f7b
|
@ -638,8 +638,8 @@ class BallotWrapper:
|
|||
positions = []
|
||||
seen = {}
|
||||
|
||||
from doc.models import BallotPosition
|
||||
for pos in BallotPosition.objects.filter(doc=self.ballot, type="changed_ballot_position", time__gte=self.ballot.process_start, time__lte=self.ballot.process_end).select_related('ad').order_by("-time", '-id'):
|
||||
from doc.models import BallotPositionEvent
|
||||
for pos in BallotPositionEvent.objects.filter(doc=self.ballot, type="changed_ballot_position", time__gte=self.ballot.process_start, time__lte=self.ballot.process_end).select_related('ad').order_by("-time", '-id'):
|
||||
if pos.ad not in seen:
|
||||
p = dict(ad_name=pos.ad.get_name(),
|
||||
ad_username=pos.ad.pk, # ought to rename this in doc_ballot_list
|
||||
|
@ -676,7 +676,7 @@ class BallotWrapper:
|
|||
for ad in active_ads:
|
||||
if ad not in seen:
|
||||
d = dict(ad_name=ad.get_name(),
|
||||
ad_username=pos.ad.pk,
|
||||
ad_username=ad.pk,
|
||||
position="No Record",
|
||||
)
|
||||
positions.append(d)
|
||||
|
|
|
@ -9,7 +9,7 @@ from django.conf import settings
|
|||
|
||||
from ietf.utils.mail import send_mail, send_mail_text
|
||||
from ietf.idtracker.models import *
|
||||
from doc.models import Text, BallotPosition, Expiration
|
||||
from doc.models import WriteupEvent, BallotPositionEvent, LastCallEvent
|
||||
from person.models import Email
|
||||
|
||||
def email_state_changed(request, doc, text):
|
||||
|
@ -86,12 +86,12 @@ def full_intended_status(intended_status):
|
|||
return "a %s" % s
|
||||
|
||||
def generate_ballot_writeup(request, doc):
|
||||
e = Text()
|
||||
e = WriteupEvent()
|
||||
e.type = "changed_ballot_writeup_text"
|
||||
e.by = request.user.get_profile().email()
|
||||
e.doc = doc
|
||||
e.desc = u"Ballot writeup was generated by %s" % e.by.get_name()
|
||||
e.content = unicode(render_to_string("idrfc/ballot_writeup.txt"))
|
||||
e.text = unicode(render_to_string("idrfc/ballot_writeup.txt"))
|
||||
e.save()
|
||||
|
||||
return e
|
||||
|
@ -158,12 +158,12 @@ def generate_last_call_announcementREDESIGN(request, doc):
|
|||
)
|
||||
)
|
||||
|
||||
e = Text()
|
||||
e = WriteupEvent()
|
||||
e.type = "changed_last_call_text"
|
||||
e.by = request.user.get_profile().email()
|
||||
e.doc = doc
|
||||
e.desc = u"Last call announcement was generated by %s" % e.by.get_name()
|
||||
e.content = unicode(mail)
|
||||
e.text = unicode(mail)
|
||||
e.save()
|
||||
|
||||
return e
|
||||
|
@ -253,12 +253,12 @@ def generate_approval_mailREDESIGN(request, doc):
|
|||
else:
|
||||
mail = generate_approval_mail_approved(request, doc)
|
||||
|
||||
e = Text()
|
||||
e = WriteupEvent()
|
||||
e.type = "changed_ballot_approval_text"
|
||||
e.by = request.user.get_profile().email()
|
||||
e.doc = doc
|
||||
e.desc = u"Ballot approval text was generated by %s" % e.by.get_name()
|
||||
e.content = unicode(mail)
|
||||
e.text = unicode(mail)
|
||||
e.save()
|
||||
|
||||
return e
|
||||
|
@ -479,7 +479,7 @@ def generate_issue_ballot_mailREDESIGN(request, doc):
|
|||
active_ads = Email.objects.filter(role__name="ad", role__group__state="active")
|
||||
|
||||
e = doc.latest_event(type="started_iesg_process")
|
||||
positions = BallotPosition.objects.filter(doc=doc, type="changed_ballot_position", time__gte=e.time).order_by("-time", '-id').select_related('ad')
|
||||
positions = BallotPositionEvent.objects.filter(doc=doc, type="changed_ballot_position", time__gte=e.time).order_by("-time", '-id').select_related('ad')
|
||||
|
||||
# format positions and setup discusses and comments
|
||||
ad_feedback = []
|
||||
|
@ -519,14 +519,14 @@ def generate_issue_ballot_mailREDESIGN(request, doc):
|
|||
inactive_ad_positions.sort()
|
||||
ad_feedback.sort(key=lambda p: p.ad.get_name())
|
||||
|
||||
e = doc.latest_event(Expiration, type="sent_last_call")
|
||||
e = doc.latest_event(LastCallEvent, type="sent_last_call")
|
||||
last_call_expires = e.expires if e else None
|
||||
|
||||
e = doc.latest_event(Text, type="changed_ballot_approval_text")
|
||||
approval_text = e.content if e else ""
|
||||
e = doc.latest_event(WriteupEvent, type="changed_ballot_approval_text")
|
||||
approval_text = e.text if e else ""
|
||||
|
||||
e = doc.latest_event(Text, type="changed_ballot_writeup_text")
|
||||
ballot_writeup = e.content if e else ""
|
||||
e = doc.latest_event(WriteupEvent, type="changed_ballot_writeup_text")
|
||||
ballot_writeup = e.text if e else ""
|
||||
|
||||
return render_to_string("idrfc/issue_ballot_mailREDESIGN.txt",
|
||||
dict(doc=doc,
|
||||
|
|
|
@ -274,30 +274,30 @@ class ChangeStateTestCase(django.test.TestCase):
|
|||
self.assertContains(r, "Your request to issue the Last Call")
|
||||
|
||||
# last call text
|
||||
e = draft.latest_event(Text, type="changed_last_call_text")
|
||||
e = draft.latest_event(WriteupEvent, type="changed_last_call_text")
|
||||
self.assertTrue(e)
|
||||
self.assertTrue("The IESG has received" in e.content)
|
||||
self.assertTrue(draft.title in e.content)
|
||||
self.assertTrue(draft.get_absolute_url() in e.content)
|
||||
self.assertTrue("The IESG has received" in e.text)
|
||||
self.assertTrue(draft.title in e.text)
|
||||
self.assertTrue(draft.get_absolute_url() in e.text)
|
||||
|
||||
# approval text
|
||||
e = draft.latest_event(Text, type="changed_ballot_approval_text")
|
||||
e = draft.latest_event(WriteupEvent, type="changed_ballot_approval_text")
|
||||
self.assertTrue(e)
|
||||
self.assertTrue("The IESG has approved" in e.content)
|
||||
self.assertTrue(draft.title in e.content)
|
||||
self.assertTrue(draft.get_absolute_url() in e.content)
|
||||
self.assertTrue("The IESG has approved" in e.text)
|
||||
self.assertTrue(draft.title in e.text)
|
||||
self.assertTrue(draft.get_absolute_url() in e.text)
|
||||
|
||||
# ballot writeup
|
||||
e = draft.latest_event(Text, type="changed_ballot_writeup_text")
|
||||
e = draft.latest_event(WriteupEvent, type="changed_ballot_writeup_text")
|
||||
self.assertTrue(e)
|
||||
self.assertTrue("Technical Summary" in e.content)
|
||||
self.assertTrue("Technical Summary" in e.text)
|
||||
|
||||
# mail notice
|
||||
self.assertTrue(len(mail_outbox) > mailbox_before)
|
||||
self.assertTrue("Last Call:" in mail_outbox[-1]['Subject'])
|
||||
|
||||
# comment
|
||||
self.assertTrue("Last call was requested" in draft.event_set.all()[0].desc)
|
||||
self.assertTrue("Last call was requested" in draft.latest_event().desc)
|
||||
|
||||
|
||||
class EditInfoTestCase(django.test.TestCase):
|
||||
|
@ -345,7 +345,7 @@ class EditInfoTestCase(django.test.TestCase):
|
|||
self.assertTrue(draft.tags.filter(slug="via-rfc"))
|
||||
self.assertEquals(draft.ad, new_ad)
|
||||
self.assertEquals(draft.note, "New note")
|
||||
self.assertTrue(not draft.latest_event(Telechat, type="telechat_date"))
|
||||
self.assertTrue(not draft.latest_event(TelechatEvent, type="telechat_date"))
|
||||
self.assertEquals(draft.event_set.count(), events_before + 4)
|
||||
self.assertEquals(len(mail_outbox), mailbox_before + 1)
|
||||
self.assertTrue(draft.name in mail_outbox[-1]['Subject'])
|
||||
|
@ -367,14 +367,14 @@ class EditInfoTestCase(django.test.TestCase):
|
|||
from ietf.iesg.models import TelechatDates
|
||||
|
||||
# add to telechat
|
||||
self.assertTrue(not draft.latest_event(Telechat, "scheduled_for_telechat"))
|
||||
self.assertTrue(not draft.latest_event(TelechatEvent, "scheduled_for_telechat"))
|
||||
data["telechat_date"] = TelechatDates.objects.all()[0].date1.isoformat()
|
||||
r = self.client.post(url, data)
|
||||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue(draft.latest_event(Telechat, "scheduled_for_telechat"))
|
||||
self.assertEquals(draft.latest_event(Telechat, "scheduled_for_telechat").telechat_date, TelechatDates.objects.all()[0].date1)
|
||||
self.assertTrue(draft.latest_event(TelechatEvent, "scheduled_for_telechat"))
|
||||
self.assertEquals(draft.latest_event(TelechatEvent, "scheduled_for_telechat").telechat_date, TelechatDates.objects.all()[0].date1)
|
||||
|
||||
# change telechat
|
||||
data["telechat_date"] = TelechatDates.objects.all()[0].date2.isoformat()
|
||||
|
@ -382,7 +382,7 @@ class EditInfoTestCase(django.test.TestCase):
|
|||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertEquals(draft.latest_event(Telechat, "scheduled_for_telechat").telechat_date, TelechatDates.objects.all()[0].date2)
|
||||
self.assertEquals(draft.latest_event(TelechatEvent, "scheduled_for_telechat").telechat_date, TelechatDates.objects.all()[0].date2)
|
||||
|
||||
# remove from agenda
|
||||
data["telechat_date"] = ""
|
||||
|
@ -390,7 +390,7 @@ class EditInfoTestCase(django.test.TestCase):
|
|||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue(not draft.latest_event(Telechat, "scheduled_for_telechat").telechat_date)
|
||||
self.assertTrue(not draft.latest_event(TelechatEvent, "scheduled_for_telechat").telechat_date)
|
||||
|
||||
def test_start_iesg_process_on_draft(self):
|
||||
draft = make_test_data()
|
||||
|
@ -411,6 +411,7 @@ class EditInfoTestCase(django.test.TestCase):
|
|||
self.assertTrue('@' in q('form input[name=notify]')[0].get('value'))
|
||||
|
||||
# add
|
||||
events_before = draft.event_set.count()
|
||||
mailbox_before = len(mail_outbox)
|
||||
|
||||
ad = Email.objects.get(address="aread@ietf.org")
|
||||
|
@ -430,9 +431,10 @@ class EditInfoTestCase(django.test.TestCase):
|
|||
self.assertTrue(draft.tags.filter(slug="via-rfc"))
|
||||
self.assertEquals(draft.ad, ad)
|
||||
self.assertEquals(draft.note, "This is a note")
|
||||
self.assertTrue(not draft.latest_event(Telechat, type="scheduled_for_telechat"))
|
||||
self.assertEquals(draft.event_set.count(), 4)
|
||||
self.assertEquals(draft.event_set.order_by('time', '-id')[0].type, "started_iesg_process")
|
||||
self.assertTrue(not draft.latest_event(TelechatEvent, type="scheduled_for_telechat"))
|
||||
self.assertEquals(draft.event_set.count(), events_before + 4)
|
||||
events = list(draft.event_set.order_by('time', 'id'))
|
||||
self.assertEquals(events[-4].type, "started_iesg_process")
|
||||
self.assertEquals(len(mail_outbox), mailbox_before)
|
||||
|
||||
|
||||
|
@ -555,7 +557,7 @@ class EditPositionTestCase(django.test.TestCase):
|
|||
comment="This is a test."))
|
||||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
pos = draft.latest_event(BallotPosition, ad=ad)
|
||||
pos = draft.latest_event(BallotPositionEvent, ad=ad)
|
||||
self.assertEquals(pos.pos.slug, "discuss")
|
||||
self.assertTrue("This is a discussion test." in pos.discuss)
|
||||
self.assertTrue(pos.discuss_time != None)
|
||||
|
@ -569,7 +571,7 @@ class EditPositionTestCase(django.test.TestCase):
|
|||
r = self.client.post(url, dict(position="noobj"))
|
||||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
pos = draft.latest_event(BallotPosition, ad=ad)
|
||||
pos = draft.latest_event(BallotPositionEvent, ad=ad)
|
||||
self.assertEquals(pos.pos.slug, "noobj")
|
||||
self.assertEquals(draft.event_set.count(), events_before + 1)
|
||||
self.assertTrue("Position for" in pos.desc)
|
||||
|
@ -579,7 +581,7 @@ class EditPositionTestCase(django.test.TestCase):
|
|||
r = self.client.post(url, dict(position="norecord"))
|
||||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
pos = draft.latest_event(BallotPosition, ad=ad)
|
||||
pos = draft.latest_event(BallotPositionEvent, ad=ad)
|
||||
self.assertEquals(pos.pos.slug, "norecord")
|
||||
self.assertEquals(draft.event_set.count(), events_before + 1)
|
||||
self.assertTrue("Position for" in pos.desc)
|
||||
|
@ -589,7 +591,7 @@ class EditPositionTestCase(django.test.TestCase):
|
|||
r = self.client.post(url, dict(position="norecord", comment="New comment."))
|
||||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
pos = draft.latest_event(BallotPosition, ad=ad)
|
||||
pos = draft.latest_event(BallotPositionEvent, ad=ad)
|
||||
self.assertEquals(pos.pos.slug, "norecord")
|
||||
self.assertEquals(draft.event_set.count(), events_before + 2)
|
||||
self.assertTrue("Ballot comment text updated" in pos.desc)
|
||||
|
@ -612,7 +614,7 @@ class EditPositionTestCase(django.test.TestCase):
|
|||
r = self.client.post(url, dict(position="discuss"))
|
||||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
pos = draft.latest_event(BallotPosition, ad=ad)
|
||||
pos = draft.latest_event(BallotPositionEvent, ad=ad)
|
||||
self.assertEquals(pos.pos.slug, "discuss")
|
||||
self.assertTrue("New position" in pos.desc)
|
||||
self.assertTrue("by Sec" in pos.desc)
|
||||
|
@ -624,7 +626,7 @@ class EditPositionTestCase(django.test.TestCase):
|
|||
|
||||
ad = Email.objects.get(address="aread@ietf.org")
|
||||
|
||||
BallotPosition.objects.create(doc=draft, type="changed_ballot_position",
|
||||
BallotPositionEvent.objects.create(doc=draft, type="changed_ballot_position",
|
||||
by=ad, ad=ad, pos=BallotPositionName.objects.get(slug="yes"),
|
||||
comment="Test!",
|
||||
comment_time=datetime.datetime.now())
|
||||
|
@ -730,7 +732,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
save_last_call_text="1"))
|
||||
self.assertEquals(r.status_code, 200)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("This is a simple test" in draft.latest_event(Text, type="changed_last_call_text").content)
|
||||
self.assertTrue("This is a simple test" in draft.latest_event(WriteupEvent, type="changed_last_call_text").text)
|
||||
|
||||
# test regenerate
|
||||
r = self.client.post(url, dict(
|
||||
|
@ -739,7 +741,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
self.assertEquals(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("Subject: Last Call" in draft.latest_event(Text, type="changed_last_call_text").content)
|
||||
self.assertTrue("Subject: Last Call" in draft.latest_event(WriteupEvent, type="changed_last_call_text").text)
|
||||
|
||||
|
||||
def test_request_last_call(self):
|
||||
|
@ -755,7 +757,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
|
||||
# send
|
||||
r = self.client.post(url, dict(
|
||||
last_call_text=draft.latest_event(Text, type="changed_last_call_text").content,
|
||||
last_call_text=draft.latest_event(WriteupEvent, type="changed_last_call_text").text,
|
||||
send_last_call_request="1"))
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertEquals(draft.iesg_state_id, "lc-req")
|
||||
|
@ -781,7 +783,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
save_ballot_writeup="1"))
|
||||
self.assertEquals(r.status_code, 200)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("This is a simple test" in draft.latest_event(Text, type="changed_ballot_writeup_text").content)
|
||||
self.assertTrue("This is a simple test" in draft.latest_event(WriteupEvent, type="changed_ballot_writeup_text").text)
|
||||
|
||||
def test_issue_ballot(self):
|
||||
draft = make_test_data()
|
||||
|
@ -790,7 +792,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
|
||||
def create_pos(num, vote, comment="", discuss=""):
|
||||
ad = Email.objects.get(address="ad%s@ietf.org" % num)
|
||||
e = BallotPosition()
|
||||
e = BallotPositionEvent()
|
||||
e.doc = draft
|
||||
e.by = ad
|
||||
e.ad = ad
|
||||
|
@ -815,11 +817,11 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
create_pos(9, "yes")
|
||||
|
||||
# we need approval text to be able to submit
|
||||
e = Text()
|
||||
e = WriteupEvent()
|
||||
e.doc = draft
|
||||
e.by = Email.objects.get(address="aread@ietf.org")
|
||||
e.type = "changed_ballot_approval_text"
|
||||
e.content = "The document has been approved."
|
||||
e.text = "The document has been approved."
|
||||
e.save()
|
||||
|
||||
mailbox_before = len(mail_outbox)
|
||||
|
@ -859,13 +861,13 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
save_approval_text="1"))
|
||||
self.assertEquals(r.status_code, 200)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("This is a simple test" in draft.latest_event(Text, type="changed_ballot_approval_text").content)
|
||||
self.assertTrue("This is a simple test" in draft.latest_event(WriteupEvent, type="changed_ballot_approval_text").text)
|
||||
|
||||
# test regenerate
|
||||
r = self.client.post(url, dict(regenerate_approval_text="1"))
|
||||
self.assertEquals(r.status_code, 200)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("Subject: Protocol Action" in draft.latest_event(Text, type="changed_ballot_approval_text").content)
|
||||
self.assertTrue("Subject: Protocol Action" in draft.latest_event(WriteupEvent, type="changed_ballot_approval_text").text)
|
||||
|
||||
# test regenerate when it's a disapprove
|
||||
draft.iesg_state_id = "nopubadw"
|
||||
|
@ -874,7 +876,7 @@ class BallotWriteupsTestCase(django.test.TestCase):
|
|||
r = self.client.post(url, dict(regenerate_approval_text="1"))
|
||||
self.assertEquals(r.status_code, 200)
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertTrue("NOT be published" in draft.latest_event(Text, type="changed_ballot_approval_text").content)
|
||||
self.assertTrue("NOT be published" in draft.latest_event(WriteupEvent, type="changed_ballot_approval_text").text)
|
||||
|
||||
class ApproveBallotTestCase(django.test.TestCase):
|
||||
fixtures = ['names']
|
||||
|
@ -955,7 +957,7 @@ class MakeLastCallTestCase(django.test.TestCase):
|
|||
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertEquals(draft.iesg_state.slug, "lc")
|
||||
self.assertEquals(draft.latest_event(Expiration, "sent_last_call").expires.strftime("%Y-%m-%d"), expire_date)
|
||||
self.assertEquals(draft.latest_event(LastCallEvent, "sent_last_call").expires.strftime("%Y-%m-%d"), expire_date)
|
||||
self.assertEquals(len(mail_outbox), mailbox_before + 4)
|
||||
|
||||
self.assertTrue("Last Call" in mail_outbox[-4]['Subject'])
|
||||
|
|
|
@ -3,7 +3,7 @@ from django.conf import settings
|
|||
from ietf.idtracker.models import InternetDraft, DocumentComment, BallotInfo, IESGLogin
|
||||
from ietf.idrfc.mails import *
|
||||
|
||||
from doc.models import Telechat, Event
|
||||
from doc.models import Event, TelechatEvent
|
||||
|
||||
def add_document_comment(request, doc, text, include_by=True, ballot=None):
|
||||
if request:
|
||||
|
@ -114,7 +114,7 @@ def update_telechat(request, idinternal, new_telechat_date, new_returning_item=N
|
|||
def update_telechatREDESIGN(request, doc, by, new_telechat_date, new_returning_item=None):
|
||||
on_agenda = bool(new_telechat_date)
|
||||
|
||||
prev = doc.latest_event(Telechat, type="scheduled_for_telechat")
|
||||
prev = doc.latest_event(TelechatEvent, type="scheduled_for_telechat")
|
||||
prev_returning = bool(prev and prev.returning_item)
|
||||
prev_telechat = prev.telechat_date if prev else None
|
||||
prev_agenda = bool(prev_telechat)
|
||||
|
@ -135,7 +135,7 @@ def update_telechatREDESIGN(request, doc, by, new_telechat_date, new_returning_i
|
|||
and new_telechat_date != prev_telechat):
|
||||
returning = True
|
||||
|
||||
e = Telechat()
|
||||
e = TelechatEvent()
|
||||
e.type = "scheduled_for_telechat"
|
||||
e.by = by
|
||||
e.doc = doc
|
||||
|
|
|
@ -22,7 +22,7 @@ from ietf.idrfc.mails import *
|
|||
from ietf.idrfc.utils import *
|
||||
from ietf.idrfc.lastcall import request_last_call
|
||||
|
||||
from doc.models import Document, Event, BallotPosition, save_document_in_history
|
||||
from doc.models import Document, Event, BallotPositionEvent, LastCallEvent, save_document_in_history
|
||||
from name.models import BallotPositionName, IesgDocStateName
|
||||
|
||||
BALLOT_CHOICES = (("yes", "Yes"),
|
||||
|
@ -219,7 +219,7 @@ def edit_positionREDESIGN(request, name):
|
|||
raise Http404()
|
||||
ad = get_object_or_404(Email, pk=ad_id)
|
||||
|
||||
old_pos = doc.latest_event(BallotPosition, type="changed_ballot_position", ad=ad, time__gte=started_process.time)
|
||||
old_pos = doc.latest_event(BallotPositionEvent, type="changed_ballot_position", ad=ad, time__gte=started_process.time)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = EditPositionForm(request.POST)
|
||||
|
@ -231,7 +231,7 @@ def edit_positionREDESIGN(request, name):
|
|||
if clean['return_to_url']:
|
||||
return_to_url = clean['return_to_url']
|
||||
|
||||
pos = BallotPosition(doc=doc, by=login)
|
||||
pos = BallotPositionEvent(doc=doc, by=login)
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.ad = ad
|
||||
pos.pos = clean["position"]
|
||||
|
@ -417,7 +417,7 @@ def send_ballot_commentREDESIGN(request, name):
|
|||
raise Http404()
|
||||
ad = get_object_or_404(Email, pk=ad_id)
|
||||
|
||||
pos = doc.latest_event(BallotPosition, type="changed_ballot_position", ad=ad, time__gte=started_process.time)
|
||||
pos = doc.latest_event(BallotPositionEvent, type="changed_ballot_position", ad=ad, time__gte=started_process.time)
|
||||
if not pos:
|
||||
raise Http404()
|
||||
|
||||
|
@ -704,23 +704,23 @@ def lastcalltextREDESIGN(request, name):
|
|||
|
||||
login = request.user.get_profile().email()
|
||||
|
||||
existing = doc.latest_event(Text, type="changed_last_call_text")
|
||||
existing = doc.latest_event(WriteupEvent, type="changed_last_call_text")
|
||||
if not existing:
|
||||
existing = generate_last_call_announcement(request, doc)
|
||||
|
||||
form = LastCallTextForm(initial=dict(last_call_text=existing.content))
|
||||
form = LastCallTextForm(initial=dict(last_call_text=existing.text))
|
||||
|
||||
if request.method == 'POST':
|
||||
if "save_last_call_text" in request.POST or "send_last_call_request" in request.POST:
|
||||
form = LastCallTextForm(request.POST)
|
||||
if form.is_valid():
|
||||
t = form.cleaned_data['last_call_text']
|
||||
if t != existing.content:
|
||||
e = Text(doc=doc, by=login)
|
||||
if t != existing.text:
|
||||
e = WriteupEvent(doc=doc, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_last_call_text"
|
||||
e.desc = "Last call announcement was changed by %s" % login.get_name()
|
||||
e.content = t
|
||||
e.text = t
|
||||
e.save()
|
||||
|
||||
doc.time = e.time
|
||||
|
@ -752,7 +752,7 @@ def lastcalltextREDESIGN(request, name):
|
|||
doc.save()
|
||||
|
||||
# make sure form has the updated text
|
||||
form = LastCallTextForm(initial=dict(last_call_text=e.content))
|
||||
form = LastCallTextForm(initial=dict(last_call_text=e.text))
|
||||
|
||||
|
||||
can_request_last_call = doc.iesg_state.order < 27
|
||||
|
@ -863,38 +863,39 @@ class BallotWriteupFormREDESIGN(forms.Form):
|
|||
def ballot_writeupnotesREDESIGN(request, name):
|
||||
"""Editing of ballot write-up and notes"""
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
if not doc.iesg_state:
|
||||
started_process = doc.latest_event(type="started_iesg_process")
|
||||
if not started_process:
|
||||
raise Http404()
|
||||
|
||||
login = request.user.get_profile().email()
|
||||
|
||||
approval = doc.latest_event(Text, type="changed_ballot_approval_text")
|
||||
approval = doc.latest_event(WriteupEvent, type="changed_ballot_approval_text")
|
||||
|
||||
existing = doc.latest_event(Text, type="changed_ballot_writeup_text")
|
||||
existing = doc.latest_event(WriteupEvent, type="changed_ballot_writeup_text")
|
||||
if not existing:
|
||||
existing = generate_ballot_writeup(request, doc)
|
||||
|
||||
form = BallotWriteupForm(initial=dict(ballot_writeup=existing.content))
|
||||
form = BallotWriteupForm(initial=dict(ballot_writeup=existing.text))
|
||||
|
||||
if request.method == 'POST' and "save_ballot_writeup" in request.POST or "issue_ballot" in request.POST:
|
||||
form = BallotWriteupForm(request.POST)
|
||||
if form.is_valid():
|
||||
t = form.cleaned_data["ballot_writeup"]
|
||||
if t != existing.content:
|
||||
e = Text(doc=doc, by=login)
|
||||
if t != existing.text:
|
||||
e = WriteupEvent(doc=doc, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_ballot_writeup_text"
|
||||
e.desc = "Ballot writeup was changed by %s" % login.get_name()
|
||||
e.content = t
|
||||
e.text = t
|
||||
e.save()
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
||||
if "issue_ballot" in request.POST and approval:
|
||||
if in_group(request.user, "Area_Director") and not doc.latest_event(BallotPosition, ad=login):
|
||||
if in_group(request.user, "Area_Director") and not doc.latest_event(BallotPositionEvent, ad=login, time__gte=started_process.time):
|
||||
# sending the ballot counts as a yes
|
||||
pos = BallotPosition(doc=doc, by=login)
|
||||
pos = BallotPositionEvent(doc=doc, by=login)
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.ad = login
|
||||
pos.pos_id = "yes"
|
||||
|
@ -1003,23 +1004,23 @@ def ballot_approvaltextREDESIGN(request, name):
|
|||
|
||||
login = request.user.get_profile().email()
|
||||
|
||||
existing = doc.latest_event(Text, type="changed_ballot_approval_text")
|
||||
existing = doc.latest_event(WriteupEvent, type="changed_ballot_approval_text")
|
||||
if not existing:
|
||||
existing = generate_approval_mail(request, doc)
|
||||
|
||||
form = ApprovalTextForm(initial=dict(approval_text=existing.content))
|
||||
form = ApprovalTextForm(initial=dict(approval_text=existing.text))
|
||||
|
||||
if request.method == 'POST':
|
||||
if "save_approval_text" in request.POST:
|
||||
form = ApprovalTextForm(request.POST)
|
||||
if form.is_valid():
|
||||
t = form.cleaned_data['approval_text']
|
||||
if t != existing.content:
|
||||
e = Text(doc=doc, by=login)
|
||||
if t != existing.text:
|
||||
e = WriteupEvent(doc=doc, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_ballot_approval_text"
|
||||
e.desc = "Ballot approval text was changed by %s" % login.get_name()
|
||||
e.content = t
|
||||
e.text = t
|
||||
e.save()
|
||||
|
||||
doc.time = e.time
|
||||
|
@ -1032,7 +1033,7 @@ def ballot_approvaltextREDESIGN(request, name):
|
|||
doc.save()
|
||||
|
||||
# make sure form has the updated text
|
||||
form = ApprovalTextForm(initial=dict(approval_text=existing.content))
|
||||
form = ApprovalTextForm(initial=dict(approval_text=existing.text))
|
||||
|
||||
can_announce = doc.iesg_state.order > 19
|
||||
need_intended_status = ""
|
||||
|
@ -1132,15 +1133,15 @@ def approve_ballotREDESIGN(request, name):
|
|||
|
||||
login = request.user.get_profile().email()
|
||||
|
||||
e = doc.latest_event(Text, type="changed_ballot_approval_text")
|
||||
e = doc.latest_event(WriteupEvent, type="changed_ballot_approval_text")
|
||||
if not e:
|
||||
e = generate_approval_mail(request, doc)
|
||||
approval_text = e.content
|
||||
approval_text = e.text
|
||||
|
||||
e = doc.latest_event(Text, type="changed_ballot_writeup_text")
|
||||
e = doc.latest_event(WriteupEvent, type="changed_ballot_writeup_text")
|
||||
if not e:
|
||||
e = generate_ballot_writeup(request, doc)
|
||||
ballot_writeup = e.content
|
||||
ballot_writeup = e.text
|
||||
|
||||
if "NOT be published" in approval_text:
|
||||
action = "do_not_publish"
|
||||
|
@ -1282,10 +1283,10 @@ def make_last_callREDESIGN(request, name):
|
|||
|
||||
login = request.user.get_profile().email()
|
||||
|
||||
e = doc.latest_event(Text, type="changed_last_call_text")
|
||||
e = doc.latest_event(WriteupEvent, type="changed_last_call_text")
|
||||
if not e:
|
||||
e = generate_last_call_announcement(request, doc)
|
||||
announcement = e.content
|
||||
announcement = e.text
|
||||
|
||||
# why cut -4 off name? a better question is probably why these
|
||||
# tables aren't linked together properly
|
||||
|
@ -1322,7 +1323,7 @@ def make_last_callREDESIGN(request, name):
|
|||
email_state_changed(request, doc, change_description)
|
||||
email_owner(request, doc, doc.ad, login, change_description)
|
||||
|
||||
e = Expiration(doc=doc, by=login)
|
||||
e = LastCallEvent(doc=doc, by=login)
|
||||
e.type = "sent_last_call"
|
||||
e.desc = "Last call sent by %s" % login.get_name()
|
||||
if form.cleaned_data['last_call_sent_date'] != e.time.date():
|
||||
|
|
|
@ -155,10 +155,10 @@ def _get_history(doc, versions):
|
|||
for e in event_holder.event_set.all().select_related('by').order_by('-time', 'id'):
|
||||
info = {}
|
||||
if e.type == "new_revision":
|
||||
filename = u"%s-%s" % (e.doc.name, e.newrevision.rev)
|
||||
filename = u"%s-%s" % (e.doc.name, e.newrevisionevent.rev)
|
||||
e.desc = 'New version available: <a href="http://tools.ietf.org/id/%s.txt">%s</a>' % (filename, filename)
|
||||
if int(e.newrevision.rev) != 0:
|
||||
e.desc += ' (<a href="http://tools.ietf.org/rfcdiff?url2=%s">diff from -%02d</a>)' % (filename, int(e.newrevision.rev) - 1)
|
||||
if int(e.newrevisionevent.rev) != 0:
|
||||
e.desc += ' (<a href="http://tools.ietf.org/rfcdiff?url2=%s">diff from -%02d</a>)' % (filename, int(e.newrevisionevent.rev) - 1)
|
||||
info["dontmolest"] = True
|
||||
|
||||
multiset_ballot_text = "This was part of a ballot set with: "
|
||||
|
@ -181,7 +181,7 @@ def _get_history(doc, versions):
|
|||
for o in results:
|
||||
e = o["comment"]
|
||||
if e.type == "new_revision":
|
||||
e.version = e.newrevision.rev
|
||||
e.version = e.newrevisionevent.rev
|
||||
else:
|
||||
e.version = prev_rev
|
||||
prev_rev = e.version
|
||||
|
|
|
@ -22,7 +22,7 @@ from ietf.idrfc.mails import *
|
|||
from ietf.idrfc.utils import *
|
||||
from ietf.idrfc.lastcall import request_last_call
|
||||
|
||||
from doc.models import Document, Event, Status, Telechat, save_document_in_history, DocHistory
|
||||
from doc.models import Document, Event, StatusDateEvent, TelechatEvent, save_document_in_history, DocHistory
|
||||
from name.models import IesgDocStateName, IntendedStdLevelName, DocInfoTagName, get_next_iesg_states, DocStateName
|
||||
|
||||
class ChangeStateForm(forms.Form):
|
||||
|
@ -463,7 +463,7 @@ def edit_infoREDESIGN(request, name):
|
|||
doc.iesg_state = IesgDocStateName.objects.get(slug="pub-req")
|
||||
doc.notify = get_initial_notify(doc)
|
||||
|
||||
e = doc.latest_event(Telechat, type="scheduled_for_telechat")
|
||||
e = doc.latest_event(TelechatEvent, type="scheduled_for_telechat")
|
||||
initial_telechat_date = e.telechat_date if e else None
|
||||
initial_returning_item = bool(e and e.returning_item)
|
||||
|
||||
|
@ -541,10 +541,10 @@ def edit_infoREDESIGN(request, name):
|
|||
update_telechat(request, doc, login,
|
||||
r['telechat_date'], r['returning_item'])
|
||||
|
||||
e = doc.latest_event(Status, type="changed_status_date")
|
||||
e = doc.latest_event(StatusDateEvent, type="changed_status_date")
|
||||
status_date = e.date if e else None
|
||||
if r["status_date"] != status_date:
|
||||
e = Status(doc=doc, by=login)
|
||||
e = StatusDateEvent(doc=doc, by=login)
|
||||
e.type ="changed_status_date"
|
||||
d = desc("Status date", r["status_date"], status_date)
|
||||
changes.append(d)
|
||||
|
@ -567,7 +567,7 @@ def edit_infoREDESIGN(request, name):
|
|||
doc.save()
|
||||
return HttpResponseRedirect(doc.get_absolute_url())
|
||||
else:
|
||||
e = doc.latest_event(Status)
|
||||
e = doc.latest_event(StatusDateEvent)
|
||||
status = e.date if e else None
|
||||
init = dict(intended_std_level=doc.intended_std_level,
|
||||
status_date=status,
|
||||
|
|
|
@ -39,14 +39,14 @@ class EventAdmin(admin.ModelAdmin):
|
|||
admin.site.register(Event, EventAdmin)
|
||||
|
||||
admin.site.register(Message, EventAdmin)
|
||||
admin.site.register(Text, EventAdmin)
|
||||
admin.site.register(NewRevision, EventAdmin)
|
||||
admin.site.register(Status, EventAdmin)
|
||||
admin.site.register(Expiration, EventAdmin)
|
||||
admin.site.register(Telechat, EventAdmin)
|
||||
admin.site.register(NewRevisionEvent, EventAdmin)
|
||||
admin.site.register(WriteupEvent, EventAdmin)
|
||||
admin.site.register(StatusDateEvent, EventAdmin)
|
||||
admin.site.register(LastCallEvent, EventAdmin)
|
||||
admin.site.register(TelechatEvent, EventAdmin)
|
||||
|
||||
class BallotPositionAdmin(EventAdmin):
|
||||
class BallotPositionEventAdmin(EventAdmin):
|
||||
raw_id_fields = ["doc", "by", "ad"]
|
||||
|
||||
admin.site.register(BallotPosition, BallotPositionAdmin)
|
||||
admin.site.register(BallotPositionEvent, BallotPositionEventAdmin)
|
||||
|
||||
|
|
|
@ -45,8 +45,8 @@ class DocumentInfo(models.Model):
|
|||
def latest_event(self, *args, **filter_args):
|
||||
"""Get latest event of optional Python type and with filter
|
||||
arguments, e.g. d.latest_event(type="xyz") returns an Event
|
||||
while d.latest_event(Status, type="xyz") returns a Status
|
||||
event."""
|
||||
while d.latest_event(WriteupEvent, type="xyz") returns a
|
||||
WriteupEvent event."""
|
||||
model = args[0] if args else Event
|
||||
e = model.objects.filter(doc=self).filter(**filter_args).order_by('-time', '-id')[:1]
|
||||
return e[0] if e else None
|
||||
|
@ -231,7 +231,7 @@ EVENT_TYPES = [
|
|||
]
|
||||
|
||||
class Event(models.Model):
|
||||
"""An occurrence in connection with a document."""
|
||||
"""An occurrence for a document, used for tracking who, when and what."""
|
||||
time = models.DateTimeField(default=datetime.datetime.now, help_text="When the event happened")
|
||||
type = models.CharField(max_length=50, choices=EVENT_TYPES)
|
||||
by = models.ForeignKey(Email, blank=True, null=True) # FIXME: make NOT NULL?
|
||||
|
@ -248,14 +248,11 @@ class Message(Event):
|
|||
subj = models.CharField(max_length=255)
|
||||
body = models.TextField()
|
||||
|
||||
class Text(Event):
|
||||
content = models.TextField(blank=True)
|
||||
|
||||
class NewRevision(Event):
|
||||
class NewRevisionEvent(Event):
|
||||
rev = models.CharField(max_length=16)
|
||||
|
||||
# IESG events
|
||||
class BallotPosition(Event):
|
||||
class BallotPositionEvent(Event):
|
||||
ad = models.ForeignKey(Email)
|
||||
pos = models.ForeignKey(BallotPositionName, verbose_name="position", default="norecord")
|
||||
discuss = models.TextField(help_text="Discuss text if position is discuss", blank=True)
|
||||
|
@ -263,15 +260,16 @@ class BallotPosition(Event):
|
|||
comment = models.TextField(help_text="Optional comment", blank=True)
|
||||
comment_time = models.DateTimeField(help_text="Time optional comment was written", blank=True, null=True)
|
||||
|
||||
class Status(Event):
|
||||
class WriteupEvent(Event):
|
||||
text = models.TextField(blank=True)
|
||||
|
||||
class StatusDateEvent(Event):
|
||||
date = models.DateField(blank=True, null=True)
|
||||
|
||||
class Expiration(Event):
|
||||
class LastCallEvent(Event):
|
||||
expires = models.DateTimeField(blank=True, null=True)
|
||||
|
||||
class Telechat(Event):
|
||||
class TelechatEvent(Event):
|
||||
telechat_date = models.DateField(blank=True, null=True)
|
||||
returning_item = models.BooleanField(default=False)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from models import *
|
||||
from redesign.doc.models import *
|
||||
from redesign.person.models import Email
|
||||
from redesign.proxy_utils import TranslatingManager
|
||||
|
||||
|
@ -71,7 +71,7 @@ class InternetDraft(Document):
|
|||
#start_date = models.DateField()
|
||||
@property
|
||||
def start_date(self):
|
||||
e = NewRevision.objects.filter(doc=self).order_by("time")[:1]
|
||||
e = NewRevisionEvent.objects.filter(doc=self).order_by("time")[:1]
|
||||
return e[0].time.date() if e else None
|
||||
#expiration_date = models.DateField()
|
||||
@property
|
||||
|
@ -106,7 +106,7 @@ class InternetDraft(Document):
|
|||
#lc_expiration_date = models.DateField(null=True, blank=True)
|
||||
@property
|
||||
def lc_expiration_date(self):
|
||||
e = self.latest_event(Expiration, type="sent_last_call")
|
||||
e = self.latest_event(LastCallEvent, type="sent_last_call")
|
||||
return e.expires if e else None
|
||||
|
||||
#b_sent_date = models.DateField(null=True, blank=True)
|
||||
|
@ -312,7 +312,7 @@ class InternetDraft(Document):
|
|||
#status_date = models.DateField(blank=True,null=True)
|
||||
@property
|
||||
def status_date(self):
|
||||
e = self.latest_event(Status, type="changed_status_date")
|
||||
e = self.latest_event(StatusDateEvent, type="changed_status_date")
|
||||
return e.date if e else None
|
||||
|
||||
#email_display = models.CharField(blank=True, max_length=50) # unused
|
||||
|
@ -391,14 +391,14 @@ class InternetDraft(Document):
|
|||
#returning_item = models.IntegerField(null=True, blank=True)
|
||||
@property
|
||||
def returning_item(self):
|
||||
e = self.latest_event(type="scheduled_for_telechat")
|
||||
return e.telechat.returning_item if e else None
|
||||
e = self.latest_event(TelechatEvent, type="scheduled_for_telechat")
|
||||
return e.returning_item if e else None
|
||||
|
||||
#telechat_date = models.DateField(null=True, blank=True)
|
||||
@property
|
||||
def telechat_date(self):
|
||||
e = self.latest_event(type="scheduled_for_telechat")
|
||||
return e.telechat.telechat_date if e else None
|
||||
e = self.latest_event(TelechatEvent, type="scheduled_for_telechat")
|
||||
return e.telechat_date if e else None
|
||||
|
||||
#via_rfc_editor = models.IntegerField(null=True, blank=True)
|
||||
@property
|
||||
|
@ -515,20 +515,20 @@ class InternetDraft(Document):
|
|||
#approval_text = models.TextField(blank=True)
|
||||
@property
|
||||
def approval_text(self):
|
||||
e = self.latest_event(Text, type="changed_ballot_approval_text")
|
||||
return e.content if e else ""
|
||||
e = self.latest_event(WriteupEvent, type="changed_ballot_approval_text")
|
||||
return e.text if e else ""
|
||||
|
||||
#last_call_text = models.TextField(blank=True)
|
||||
@property
|
||||
def last_call_text(self):
|
||||
e = self.latest_event(Text, type="changed_last_call_text")
|
||||
return e.content if e else ""
|
||||
e = self.latest_event(WriteupEvent, type="changed_last_call_text")
|
||||
return e.text if e else ""
|
||||
|
||||
#ballot_writeup = models.TextField(blank=True)
|
||||
@property
|
||||
def ballot_writeup(self):
|
||||
e = self.latest_event(Text, type="changed_ballot_writeup_text")
|
||||
return e.content if e else ""
|
||||
e = self.latest_event(WriteupEvent, type="changed_ballot_writeup_text")
|
||||
return e.text if e else ""
|
||||
|
||||
#ballot_issued = models.IntegerField(null=True, blank=True)
|
||||
@property
|
||||
|
@ -548,7 +548,7 @@ class InternetDraft(Document):
|
|||
res.append(dict(ad=IESGLoginProxy(ad), pos=Position(pos) if pos else None))
|
||||
|
||||
found = set()
|
||||
for pos in BallotPosition.objects.filter(doc=self, type="changed_ballot_position", ad__in=active_ads).select_related('ad').order_by("-time", "-id"):
|
||||
for pos in BallotPositionEvent.objects.filter(doc=self, type="changed_ballot_position", ad__in=active_ads).select_related('ad').order_by("-time", "-id"):
|
||||
if pos.ad not in found:
|
||||
found.add(pos.ad)
|
||||
add(pos.ad, pos)
|
||||
|
@ -753,7 +753,7 @@ class DocumentComment(Event):
|
|||
proxy = True
|
||||
|
||||
|
||||
class Position(BallotPosition):
|
||||
class Position(BallotPositionEvent):
|
||||
def __init__(self, base):
|
||||
for f in base._meta.fields:
|
||||
if not f.name in ('discuss',): # don't overwrite properties
|
||||
|
|
|
@ -272,7 +272,7 @@ def import_from_idinternal(d, idinternal):
|
|||
# telechat agenda schedulings
|
||||
match = re_telechat_agenda.search(c.comment_text) or re_telechat_changed.search(c.comment_text)
|
||||
if match:
|
||||
e = Telechat()
|
||||
e = TelechatEvent()
|
||||
e.type = "scheduled_for_telechat"
|
||||
e.telechat_date = date_in_match(match) if "Placed on" in c.comment_text else None
|
||||
# can't extract this from history so we just take the latest value
|
||||
|
@ -289,10 +289,10 @@ def import_from_idinternal(d, idinternal):
|
|||
handled = True
|
||||
|
||||
ad = iesg_login_to_email(c.created_by)
|
||||
last_pos = d.latest_event(BallotPosition, type="changed_ballot_position", ad=ad)
|
||||
last_pos = d.latest_event(BallotPositionEvent, type="changed_ballot_position", ad=ad)
|
||||
if not last_pos and not iesg_login_is_secretary(c.created_by):
|
||||
# when you issue a ballot, you also vote yes; add that vote
|
||||
e = BallotPosition()
|
||||
e = BallotPositionEvent()
|
||||
e.type = "changed_ballot_position"
|
||||
e.ad = ad
|
||||
e.desc = "[Ballot Position Update] New position, Yes, has been recorded by %s" % e.ad.get_name()
|
||||
|
@ -354,10 +354,10 @@ def import_from_idinternal(d, idinternal):
|
|||
print "BALLOT BY SECRETARIAT", login
|
||||
|
||||
|
||||
e = BallotPosition()
|
||||
e = BallotPositionEvent()
|
||||
e.type = "changed_ballot_position"
|
||||
e.ad = iesg_login_to_email(login)
|
||||
last_pos = d.latest_event(BallotPosition, type="changed_ballot_position", ad=e.ad)
|
||||
last_pos = d.latest_event(BallotPositionEvent, type="changed_ballot_position", ad=e.ad)
|
||||
e.pos = position
|
||||
e.discuss = last_pos.discuss if last_pos else ""
|
||||
e.discuss_time = last_pos.discuss_time if last_pos else None
|
||||
|
@ -372,10 +372,10 @@ def import_from_idinternal(d, idinternal):
|
|||
|
||||
# ballot discusses/comments
|
||||
if c.ballot in (DocumentComment.BALLOT_DISCUSS, DocumentComment.BALLOT_COMMENT):
|
||||
e = BallotPosition()
|
||||
e = BallotPositionEvent()
|
||||
e.type = "changed_ballot_position"
|
||||
e.ad = iesg_login_to_email(c.created_by)
|
||||
last_pos = d.latest_event(BallotPosition, type="changed_ballot_position", ad=e.ad)
|
||||
last_pos = d.latest_event(BallotPositionEvent, type="changed_ballot_position", ad=e.ad)
|
||||
e.pos = last_pos.pos if last_pos else ballot_position_mapping[None]
|
||||
c.comment_text = re_comment_discuss_by_tag.sub("", c.comment_text)
|
||||
if c.ballot == DocumentComment.BALLOT_DISCUSS:
|
||||
|
@ -443,7 +443,7 @@ def import_from_idinternal(d, idinternal):
|
|||
|
||||
# new version
|
||||
if c.comment_text == "New version available":
|
||||
e = NewRevision(type="new_revision", rev=c.version)
|
||||
e = NewRevisionEvent(type="new_revision", rev=c.version)
|
||||
save_event(d, e, c)
|
||||
handled = True
|
||||
|
||||
|
@ -492,7 +492,7 @@ def import_from_idinternal(d, idinternal):
|
|||
# status date changed
|
||||
match = re_status_date_changed.search(line)
|
||||
if match:
|
||||
e = Status(type="changed_status_date", date=date_in_match(match))
|
||||
e = StatusDateEvent(type="changed_status_date", date=date_in_match(match))
|
||||
e.desc = line
|
||||
save_event(d, e, c)
|
||||
handled = True
|
||||
|
@ -581,25 +581,25 @@ def import_from_idinternal(d, idinternal):
|
|||
made_up_date = d.time
|
||||
made_up_date += datetime.timedelta(seconds=1)
|
||||
|
||||
e = d.latest_event(Status, type="changed_status_date")
|
||||
e = d.latest_event(StatusDateEvent, type="changed_status_date")
|
||||
status_date = e.date if e else None
|
||||
if idinternal.status_date != status_date:
|
||||
e = Status(type="changed_status_date", date=idinternal.status_date)
|
||||
e = StatusDateEvent(type="changed_status_date", date=idinternal.status_date)
|
||||
e.time = made_up_date
|
||||
e.by = system_email
|
||||
e.doc = d
|
||||
e.desc = "Status date has been changed to <b>%s</b> from <b>%s</b>" % (idinternal.status_date, status_date)
|
||||
e.save()
|
||||
|
||||
e = d.latest_event(Telechat, type="scheduled_for_telechat")
|
||||
e = d.latest_event(TelechatEvent, type="scheduled_for_telechat")
|
||||
telechat_date = e.telechat_date if e else None
|
||||
if not idinternal.agenda:
|
||||
idinternal.telechat_date = None # normalize
|
||||
|
||||
if telechat_date != idinternal.telechat_date:
|
||||
e = Telechat(type="scheduled_for_telechat",
|
||||
telechat_date=idinternal.telechat_date,
|
||||
returning_item=bool(idinternal.returning_item))
|
||||
e = TelechatEvent(type="scheduled_for_telechat",
|
||||
telechat_date=idinternal.telechat_date,
|
||||
returning_item=bool(idinternal.returning_item))
|
||||
# a common case is that it has been removed from the
|
||||
# agenda automatically by a script without a notice in the
|
||||
# comments, in that case the time is simply the day after
|
||||
|
@ -625,7 +625,7 @@ def import_from_idinternal(d, idinternal):
|
|||
position_date = made_up_date
|
||||
|
||||
# make sure we got all the positions
|
||||
existing = BallotPosition.objects.filter(doc=d, type="changed_ballot_position").order_by("-time", '-id')
|
||||
existing = BallotPositionEvent.objects.filter(doc=d, type="changed_ballot_position").order_by("-time", '-id')
|
||||
|
||||
for p in Position.objects.filter(ballot=ballot):
|
||||
# there are some bogus ones
|
||||
|
@ -653,13 +653,13 @@ def import_from_idinternal(d, idinternal):
|
|||
break
|
||||
|
||||
if not found:
|
||||
e = BallotPosition()
|
||||
e = BallotPositionEvent()
|
||||
e.type = "changed_ballot_position"
|
||||
e.doc = d
|
||||
e.time = position_date
|
||||
e.by = system_email
|
||||
e.ad = ad
|
||||
last_pos = d.latest_event(BallotPosition, type="changed_ballot_position", ad=e.ad)
|
||||
last_pos = d.latest_event(BallotPositionEvent, type="changed_ballot_position", ad=e.ad)
|
||||
e.pos = pos
|
||||
e.discuss = last_pos.discuss if last_pos else ""
|
||||
e.discuss_time = last_pos.discuss_time if last_pos else None
|
||||
|
@ -692,7 +692,7 @@ def import_from_idinternal(d, idinternal):
|
|||
e.save()
|
||||
|
||||
# make sure the comments and discusses are updated
|
||||
positions = list(BallotPosition.objects.filter(doc=d).order_by("-time", '-id'))
|
||||
positions = list(BallotPositionEvent.objects.filter(doc=d).order_by("-time", '-id'))
|
||||
for c in IESGComment.objects.filter(ballot=ballot):
|
||||
ad = iesg_login_to_email(c.ad)
|
||||
for p in positions:
|
||||
|
@ -722,24 +722,24 @@ def import_from_idinternal(d, idinternal):
|
|||
text_date = made_up_date
|
||||
|
||||
if idinternal.ballot.approval_text:
|
||||
e, _ = Text.objects.get_or_create(type="changed_ballot_approval_text", doc=d)
|
||||
e.content = idinternal.ballot.approval_text
|
||||
e, _ = WriteupEvent.objects.get_or_create(type="changed_ballot_approval_text", doc=d)
|
||||
e.text = idinternal.ballot.approval_text
|
||||
e.time = text_date
|
||||
e.by = system_email
|
||||
e.desc = "Ballot approval text was added"
|
||||
e.save()
|
||||
|
||||
if idinternal.ballot.last_call_text:
|
||||
e, _ = Text.objects.get_or_create(type="changed_last_call_text", doc=d)
|
||||
e.content = idinternal.ballot.last_call_text
|
||||
e, _ = WriteupEvent.objects.get_or_create(type="changed_last_call_text", doc=d)
|
||||
e.text = idinternal.ballot.last_call_text
|
||||
e.time = text_date
|
||||
e.by = system_email
|
||||
e.desc = "Last call text was added"
|
||||
e.save()
|
||||
|
||||
if idinternal.ballot.ballot_writeup:
|
||||
e, _ = Text.objects.get_or_create(type="changed_ballot_writeup_text", doc=d)
|
||||
e.content = idinternal.ballot.ballot_writeup
|
||||
e, _ = WriteupEvent.objects.get_or_create(type="changed_ballot_writeup_text", doc=d)
|
||||
e.text = idinternal.ballot.ballot_writeup
|
||||
e.time = text_date
|
||||
e.by = system_email
|
||||
e.desc = "Ballot writeup text was added"
|
||||
|
@ -836,13 +836,13 @@ for index, o in enumerate(all_drafts.iterator()):
|
|||
import_from_idinternal(d, o.idinternal)
|
||||
|
||||
# import missing revision changes from DraftVersions
|
||||
known_revisions = set(e.newrevision.rev for e in d.event_set.filter(type="new_revision").select_related('newrevision'))
|
||||
known_revisions = set(e.rev for e in NewRevisionEvent.objects.filter(doc=d, type="new_revision"))
|
||||
draft_versions = list(DraftVersions.objects.filter(filename=d.name).order_by("revision"))
|
||||
# DraftVersions is not entirely accurate, make sure we got the current one
|
||||
draft_versions.insert(0, DraftVersions(filename=d.name, revision=o.revision_display(), revision_date=o.revision_date))
|
||||
for v in draft_versions:
|
||||
if v.revision not in known_revisions:
|
||||
e = NewRevision(type="new_revision")
|
||||
e = NewRevisionEvent(type="new_revision")
|
||||
e.rev = v.revision
|
||||
# we don't have time information in this source, so
|
||||
# hack the seconds to include the revision to ensure
|
||||
|
@ -871,7 +871,7 @@ for index, o in enumerate(all_drafts.iterator()):
|
|||
e.save()
|
||||
|
||||
if o.lc_expiration_date:
|
||||
e = Expiration(type="sent_last_call", expires=o.lc_expiration_date)
|
||||
e = LastCallEvent(type="sent_last_call", expires=o.lc_expiration_date)
|
||||
# let's try to find the actual change
|
||||
events = d.event_set.filter(type="changed_document", desc__contains=" to <b>In Last Call</b>").order_by('-time')[:1]
|
||||
# event time is more accurate with actual time instead of just
|
||||
|
|
Loading…
Reference in a new issue