Revamp comment handling on state changes slightly, reenable changing
substate in the IESG state interface (modeled with tags) - Legacy-Id: 3725
This commit is contained in:
parent
d79365d25f
commit
af8c1b4bf8
|
@ -224,9 +224,13 @@ def expire_idREDESIGN(doc):
|
|||
if doc.latest_event(type='started_iesg_process'):
|
||||
dead_state = State.objects.get(type="draft-iesg", slug="dead")
|
||||
prev = doc.get_state("draft-iesg")
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev != dead_state:
|
||||
doc.set_state(dead_state)
|
||||
log_state_changed(None, doc, system, prev)
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
log_state_changed(None, doc, system, prev, prev_tag)
|
||||
|
||||
e = DocEvent(doc=doc, by=system)
|
||||
e.type = "expired_document"
|
||||
|
|
|
@ -82,7 +82,13 @@ def expire_last_callREDESIGN(doc):
|
|||
|
||||
prev = doc.get_state("draft-iesg")
|
||||
doc.set_state(state)
|
||||
e = log_state_changed(None, doc, Person.objects.get(name="(System)"), prev)
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = log_state_changed(None, doc, Person.objects.get(name="(System)"), prev, prev_tag)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
|
|
@ -92,14 +92,21 @@ class ChangeStateTestCase(django.test.TestCase):
|
|||
# change state
|
||||
events_before = draft.docevent_set.count()
|
||||
mailbox_before = len(outbox)
|
||||
draft.tags.add("ad-f-up")
|
||||
|
||||
r = self.client.post(url, dict(state=State.objects.get(type="draft-iesg", slug="review-e").pk))
|
||||
r = self.client.post(url,
|
||||
dict(state=State.objects.get(type="draft-iesg", slug="review-e").pk,
|
||||
substate="point",
|
||||
comment="Test comment"))
|
||||
self.assertEquals(r.status_code, 302)
|
||||
|
||||
draft = Document.objects.get(name=draft.name)
|
||||
self.assertEquals(draft.get_state_slug("draft-iesg"), "review-e")
|
||||
self.assertEquals(draft.docevent_set.count(), events_before + 1)
|
||||
self.assertTrue("State changed" in draft.docevent_set.all()[0].desc)
|
||||
self.assertTrue(not draft.tags.filter(slug="ad-f-up"))
|
||||
self.assertTrue(draft.tags.filter(slug="point"))
|
||||
self.assertEquals(draft.docevent_set.count(), events_before + 2)
|
||||
self.assertTrue("Test comment" in draft.docevent_set.all()[0].desc)
|
||||
self.assertTrue("State changed" in draft.docevent_set.all()[1].desc)
|
||||
self.assertEquals(len(outbox), mailbox_before + 2)
|
||||
self.assertTrue("State Update Notice" in outbox[-2]['Subject'])
|
||||
self.assertTrue(draft.name in outbox[-1]['Subject'])
|
||||
|
|
|
@ -62,19 +62,23 @@ def log_state_changed(request, doc, by, email_watch_list=True, note=''):
|
|||
|
||||
return change
|
||||
|
||||
def log_state_changedREDESIGN(request, doc, by, prev_iesg_state, note=''):
|
||||
def log_state_changedREDESIGN(request, doc, by, prev_iesg_state, prev_iesg_tag):
|
||||
from doc.models import DocEvent
|
||||
|
||||
state = doc.get_state("draft-iesg")
|
||||
|
||||
state_name = state.name
|
||||
tags = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
if tags:
|
||||
state_name += "::" + tags[0].name
|
||||
|
||||
prev_state_name = prev_iesg_state.name if prev_iesg_state else "I-D Exists"
|
||||
if prev_iesg_tag:
|
||||
prev_state_name += "::" + prev_iesg_tag.name
|
||||
|
||||
e = DocEvent(doc=doc, by=by)
|
||||
e.type = "changed_document"
|
||||
e.desc = u"State changed to <b>%s</b> from %s" % (
|
||||
state.name,
|
||||
prev_iesg_state.name if prev_iesg_state else "I-D Exists")
|
||||
|
||||
if note:
|
||||
e.desc += "<br>%s" % note
|
||||
e.desc = u"State changed to <b>%s</b> from %s" % (state_name, prev_state_name)
|
||||
|
||||
if state.slug == "lc":
|
||||
writeup = doc.latest_event(WriteupDocEvent, type="changed_last_call_text")
|
||||
|
|
|
@ -554,7 +554,13 @@ def defer_ballotREDESIGN(request, name):
|
|||
|
||||
prev = doc.get_state("draft-iesg")
|
||||
doc.set_state(State.objects.get(type="draft-iesg", slug='defer'))
|
||||
e = log_state_changed(request, doc, login, prev)
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = log_state_changed(request, doc, login, prev, prev_tag)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
@ -619,7 +625,13 @@ def undefer_ballotREDESIGN(request, name):
|
|||
|
||||
prev = doc.get_state("draft-iesg")
|
||||
doc.set_state(State.objects.get(type="draft-iesg", slug='iesg-eva'))
|
||||
e = log_state_changed(request, doc, login, prev)
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = log_state_changed(request, doc, login, prev, prev_tag)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
@ -777,7 +789,13 @@ def lastcalltextREDESIGN(request, name):
|
|||
|
||||
prev = doc.get_state("draft-iesg")
|
||||
doc.set_state(State.objects.get(type="draft-iesg", slug='lc-req'))
|
||||
e = log_state_changed(request, doc, login, prev)
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = log_state_changed(request, doc, login, prev, prev_tag)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
@ -1199,6 +1217,11 @@ def approve_ballotREDESIGN(request, name):
|
|||
prev = doc.get_state("draft-iesg")
|
||||
doc.set_state(new_state)
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = DocEvent(doc=doc, by=login)
|
||||
if action == "do_not_publish":
|
||||
e.type = "iesg_disapproved"
|
||||
|
@ -1211,7 +1234,7 @@ def approve_ballotREDESIGN(request, name):
|
|||
|
||||
change_description = e.desc + " and state has been changed to %s" % doc.get_state("draft-iesg").name
|
||||
|
||||
e = log_state_changed(request, doc, login, prev)
|
||||
e = log_state_changed(request, doc, login, prev, prev_tag)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
@ -1317,7 +1340,13 @@ def make_last_callREDESIGN(request, name):
|
|||
|
||||
prev = doc.get_state("draft-iesg")
|
||||
doc.set_state(State.objects.get(type="draft-iesg", slug='lc'))
|
||||
e = log_state_changed(request, doc, login, prev)
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = log_state_changed(request, doc, login, prev, prev_tag)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
|
|
@ -105,8 +105,7 @@ def change_state(request, name):
|
|||
|
||||
class ChangeStateFormREDESIGN(forms.Form):
|
||||
state = forms.ModelChoiceField(State.objects.filter(type="draft-iesg"), empty_label=None, required=True)
|
||||
# FIXME: no tags yet
|
||||
#substate = forms.ModelChoiceField(IDSubState.objects.all(), required=False)
|
||||
substate = forms.ModelChoiceField(DocTagName.objects.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty')), required=False)
|
||||
comment = forms.CharField(widget=forms.Textarea, required=False)
|
||||
|
||||
@group_required('Area_Director','Secretariat')
|
||||
|
@ -123,14 +122,36 @@ def change_stateREDESIGN(request, name):
|
|||
form = ChangeStateForm(request.POST)
|
||||
if form.is_valid():
|
||||
state = form.cleaned_data['state']
|
||||
comment = form.cleaned_data['comment']
|
||||
tag = form.cleaned_data['substate']
|
||||
comment = form.cleaned_data['comment'].strip()
|
||||
prev = doc.get_state("draft-iesg")
|
||||
if state != prev:
|
||||
|
||||
# tag handling is a bit awkward since the UI still works
|
||||
# as if IESG tags are a substate
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
|
||||
if state != prev or tag != prev_tag:
|
||||
save_document_in_history(doc)
|
||||
|
||||
doc.set_state(state)
|
||||
|
||||
e = log_state_changed(request, doc, login, prev, comment)
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
if tag:
|
||||
doc.tags.add(tag)
|
||||
|
||||
e = log_state_changed(request, doc, login, prev, prev_tag)
|
||||
|
||||
if comment:
|
||||
c = DocEvent(type="added_comment")
|
||||
c.doc = doc
|
||||
c.by = login
|
||||
c.desc = comment
|
||||
c.save()
|
||||
|
||||
e.desc += "<br>" + comment
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
|
Loading…
Reference in a new issue