Close charter ballots when the charter is approved or abandoned.
- Legacy-Id: 4262
This commit is contained in:
parent
41fb923d01
commit
6d0d014b0d
|
@ -107,6 +107,25 @@ def get_chartering_type(doc):
|
|||
|
||||
return chartering
|
||||
|
||||
def ballot_open(doc, ballot_type_slug):
|
||||
e = doc.latest_event(BallotDocEvent, ballot_type__slug=ballot_type_slug)
|
||||
return e and not e.type == "closed_ballot"
|
||||
|
||||
def create_ballot_if_not_open(doc, by, ballot_type_slug):
|
||||
if not ballot_open(doc, ballot_type_slug):
|
||||
e = BallotDocEvent(type="created_ballot", by=by, doc=doc)
|
||||
e.ballot_type = BallotType.objects.get(doc_type=doc.type, slug=ballot_type_slug)
|
||||
e.desc = u'Created "%s" ballot' % e.ballot_type.name
|
||||
e.save()
|
||||
|
||||
def close_open_ballots(doc, by):
|
||||
for t in BallotType.objects.filter(doc_type=doc.type_id):
|
||||
if ballot_open(doc, t.slug):
|
||||
e = BallotDocEvent(type="closed_ballot", doc=doc, by=by)
|
||||
e.ballot_type = t
|
||||
e.desc = 'Closed "%s" ballot' % t.name
|
||||
e.save()
|
||||
|
||||
def augment_with_telechat_date(docs):
|
||||
"""Add a telechat_date attribute to each document with the
|
||||
scheduled telechat or None if it's not scheduled."""
|
||||
|
|
|
@ -13,13 +13,13 @@ from ietf.utils.test_utils import login_testing_unauthorized
|
|||
from pyquery import PyQuery
|
||||
|
||||
from ietf.doc.models import *
|
||||
from ietf.doc.utils import *
|
||||
from ietf.group.models import *
|
||||
from ietf.group.utils import *
|
||||
from ietf.name.models import *
|
||||
from ietf.person.models import *
|
||||
from ietf.iesg.models import TelechatDate
|
||||
|
||||
from utils import *
|
||||
from ietf.wgcharter.utils import *
|
||||
|
||||
class EditCharterTestCase(django.test.TestCase):
|
||||
fixtures = ['names']
|
||||
|
@ -195,6 +195,7 @@ class CharterApproveBallotTestCase(django.test.TestCase):
|
|||
|
||||
charter = Document.objects.get(name=charter.name)
|
||||
self.assertEquals(charter.get_state_slug(), "approved")
|
||||
self.assertTrue(not ballot_open(charter, "approve"))
|
||||
|
||||
self.assertEquals(charter.rev, "01")
|
||||
self.assertTrue(os.path.exists(os.path.join(self.charter_dir, "charter-ietf-%s-%s.txt" % (group.acronym, charter.rev))))
|
||||
|
|
|
@ -16,6 +16,7 @@ from ietf.utils.mail import send_mail_text, send_mail_preformatted
|
|||
from ietf.ietfauth.decorators import has_role, role_required
|
||||
from ietf.iesg.models import TelechatDate
|
||||
from ietf.doc.models import *
|
||||
from ietf.doc.utils import create_ballot_if_not_open, close_open_ballots
|
||||
from ietf.name.models import *
|
||||
from ietf.person.models import *
|
||||
from ietf.group.models import *
|
||||
|
@ -25,7 +26,7 @@ from ietf.wgcharter.utils import *
|
|||
|
||||
|
||||
class ChangeStateForm(forms.Form):
|
||||
charter_state = forms.ModelChoiceField(State.objects.filter(type="charter", slug__in=["infrev", "intrev", "extrev", "iesgrev", "approved"]), label="Charter state", empty_label=None, required=False)
|
||||
charter_state = forms.ModelChoiceField(State.objects.filter(type="charter", slug__in=["infrev", "intrev", "extrev", "iesgrev"]), label="Charter state", empty_label=None, required=False)
|
||||
initial_time = forms.IntegerField(initial=0, label="Review time", help_text="(in weeks)", required=False)
|
||||
message = forms.CharField(widget=forms.Textarea, help_text="Optional message to the Secretariat", required=False)
|
||||
comment = forms.CharField(widget=forms.Textarea, help_text="Optional comment for the charter history", required=False)
|
||||
|
@ -90,6 +91,9 @@ def change_state(request, name, option=None):
|
|||
if option != "abandon":
|
||||
log_state_changed(request, charter, login, prev)
|
||||
else:
|
||||
# kill hanging ballots
|
||||
close_open_ballots(charter, login)
|
||||
|
||||
# Special log for abandoned efforts
|
||||
e = DocEvent(type="changed_document", doc=charter, by=login)
|
||||
e.desc = "IESG has abandoned the chartering effort"
|
||||
|
@ -107,15 +111,9 @@ def change_state(request, name, option=None):
|
|||
email_secretariat(request, wg, "state-%s" % charter_state.slug, message)
|
||||
|
||||
if charter_state.slug == "intrev":
|
||||
e = BallotDocEvent(type="created_ballot", by=login, doc=charter)
|
||||
e.ballot_type = BallotType.objects.get(doc_type=charter.type, slug="r-extrev")
|
||||
e.desc = u"Created ballot for approving charter for external review"
|
||||
e.save()
|
||||
create_ballot_if_not_open(charter, login, "r-extrev")
|
||||
elif charter_state.slug == "iesgrev":
|
||||
e = BallotDocEvent(type="created_ballot", by=login, doc=charter)
|
||||
e.ballot_type = BallotType.objects.get(doc_type=charter.type, slug="approve")
|
||||
e.desc = u"Created ballot for approving charter"
|
||||
e.save()
|
||||
create_ballot_if_not_open(charter, login, "approve")
|
||||
|
||||
if charter_state.slug == "infrev" and clean["initial_time"] and clean["initial_time"] != 0:
|
||||
e = InitialReviewDocEvent(type="initial_review", by=login, doc=charter)
|
||||
|
@ -495,6 +493,8 @@ def approve_ballot(request, name):
|
|||
wg.state = new_state
|
||||
charter.set_state(new_charter_state)
|
||||
|
||||
close_open_ballots(charter, login)
|
||||
|
||||
e = DocEvent(doc=charter, by=login)
|
||||
e.type = "iesg_approved"
|
||||
e.desc = "IESG has approved the charter"
|
||||
|
|
Loading…
Reference in a new issue