Close charter ballots when the charter is approved or abandoned.

- Legacy-Id: 4262
This commit is contained in:
Ole Laursen 2012-04-05 16:20:25 +00:00
parent 41fb923d01
commit 6d0d014b0d
3 changed files with 31 additions and 11 deletions

View file

@ -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."""

View file

@ -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))))

View file

@ -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"