diff --git a/ietf/doc/models.py b/ietf/doc/models.py index 6fb94187c..c3c10a844 100644 --- a/ietf/doc/models.py +++ b/ietf/doc/models.py @@ -342,7 +342,7 @@ class DocumentInfo(models.Model): # If that assumption is violated, they will only expose the most recently created ballot def ballot_open(self, ballot_type_slug): e = self.latest_event(BallotDocEvent, ballot_type__slug=ballot_type_slug) - return e and not e.type == "closed_ballot" + return e if e and not e.type == "closed_ballot" else None def latest_ballot(self): """Returns the most recently created ballot""" diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py index 2073e732a..3675fd50c 100644 --- a/ietf/doc/utils.py +++ b/ietf/doc/utils.py @@ -176,8 +176,10 @@ def needed_ballot_positions(doc, active_positions): return " ".join(answer) -def create_ballot(doc, by, ballot_slug, time=None): - close_open_ballots(doc, by) +def create_ballot(request, doc, by, ballot_slug, time=None): + closed = close_open_ballots(doc, by) + for e in closed: + messages.warning(request, "Closed earlier open ballot created %s on '%s' for %s" % (e.time.strftime('%Y-%m-%d %H:%M'), e.ballot_type, e.doc.name, )) if time: e = BallotDocEvent(type="created_ballot", by=by, doc=doc, rev=doc.rev, time=time) else: @@ -203,15 +205,21 @@ def create_ballot_if_not_open(request, doc, by, ballot_slug, time=None): return None def close_ballot(doc, by, ballot_slug): - if doc.ballot_open(ballot_slug): + b = doc.ballot_open(ballot_slug) + if b: e = BallotDocEvent(type="closed_ballot", doc=doc, rev=doc.rev, by=by) e.ballot_type = BallotType.objects.get(doc_type=doc.type,slug=ballot_slug) e.desc = 'Closed "%s" ballot' % e.ballot_type.name e.save() + return b def close_open_ballots(doc, by): + closed = [] for t in BallotType.objects.filter(doc_type=doc.type_id): - close_ballot(doc, by, t.slug ) + e = close_ballot(doc, by, t.slug ) + if e: + closed.append(e) + return closed def get_chartering_type(doc): chartering = "" diff --git a/ietf/doc/views_charter.py b/ietf/doc/views_charter.py index 6c6861897..39e8eac99 100644 --- a/ietf/doc/views_charter.py +++ b/ietf/doc/views_charter.py @@ -152,16 +152,16 @@ def change_state(request, name, option=None): if charter_state.slug == "intrev" and group.type_id == "wg": if request.POST.get("ballot_wo_extern"): - create_ballot(charter, by, "r-wo-ext") + create_ballot(request, charter, by, "r-wo-ext") else: - create_ballot(charter, by, "r-extrev") + create_ballot(request, charter, by, "r-extrev") (e1, e2) = default_review_text(group, charter, by) e1.save() e2.save() e = default_action_text(group, charter, by) e.save() elif charter_state.slug in ["extrev","iesgrev"]: - create_ballot(charter, by, "approve") + create_ballot(request, charter, by, "approve") elif charter_state.slug == "approved": change_group_state_after_charter_approval(group, by) fix_charter_revision_after_approval(charter, by)