Skip to content

Commit 2b5345c

Browse files
committed
Add some polish, send email notifications on milestone changes
- Legacy-Id: 4544
1 parent 471d5de commit 2b5345c

4 files changed

Lines changed: 43 additions & 6 deletions

File tree

ietf/wgcharter/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ def approve(request, name):
586586
o.save()
587587
MilestoneGroupEvent.objects.create(
588588
group=group, type="changed_milestone", by=login,
589-
desc="Changed milestone \"%s\", changed state from review to active" % o.desc,
589+
desc="Changed milestone \"%s\", set state to active from review" % o.desc,
590590
milestone=o)
591591

592592
del milestones_to_delete[i]

ietf/wginfo/mails.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# generation of mails
2+
3+
import textwrap, datetime
4+
5+
from django.template.loader import render_to_string
6+
from django.utils.html import strip_tags
7+
from django.utils.text import wrap
8+
from django.conf import settings
9+
from django.core.urlresolvers import reverse as urlreverse
10+
11+
from ietf.utils.mail import send_mail, send_mail_text
12+
13+
def email_milestones_changed(request, group, text):
14+
to = []
15+
if group.ad:
16+
to.append(group.ad.role_email("ad").formatted_email())
17+
18+
for r in group.role_set.filter(name="chair"):
19+
to.append(r.formatted_email())
20+
21+
text = wrap(strip_tags(text), 70)
22+
text += "\n\n"
23+
text += "URL: %s" % (settings.IDTRACKER_BASE_URL + urlreverse("wg_charter", kwargs=dict(acronym=group.acronym)))
24+
25+
send_mail_text(request, to, None,
26+
"Milestones changed for %s %s" % (group.acronym, group.type.name),
27+
text)

ietf/wginfo/milestones.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from ietf.doc.utils import get_chartering_type
1818
from ietf.group.models import *
1919
from ietf.group.utils import save_group_in_history, save_milestone_in_history
20+
from ietf.wginfo.mails import email_milestones_changed
2021

2122
def json_doc_names(docs):
2223
return simplejson.dumps([{"id": doc.pk, "name": doc.name } for doc in docs])
@@ -160,23 +161,23 @@ def save_milestone_form(f):
160161

161162
if c["accept"] == "accept":
162163
m.state_id = "active"
163-
changes.append("changed state from review to active, accepting new milestone")
164+
changes.append("set state to active from review, accepting new milestone")
164165
elif c["accept"] == "reject":
165166
m.state_id = "deleted"
166-
changes.append("changed state from review to deleted, rejecting new milestone")
167+
changes.append("set state to deleted from review, rejecting new milestone")
167168

168169

169170
if c["desc"] != m.desc and not needs_review:
170171
if not history:
171172
history = save_milestone_in_history(m)
172173
m.desc = c["desc"]
173-
changes.append('changed description to "%s"' % m.desc)
174+
changes.append('set description to "%s"' % m.desc)
174175

175176
if c["due"] != m.due:
176177
if not history:
177178
history = save_milestone_in_history(m)
179+
changes.append('set due date to %s from %s' % (c["due"].strftime("%Y-%m-%d"), m.due.strftime("%Y-%m-%d")))
178180
m.due = c["due"]
179-
changes.append('changed due date to %s' % m.due.strftime("%Y-%m-%d"))
180181

181182
resolved = c["resolved"]
182183
if resolved != m.resolved:
@@ -185,7 +186,7 @@ def save_milestone_form(f):
185186
elif not resolved and m.resolved:
186187
changes.append("reverted to not being resolved")
187188
elif resolved and m.resolved:
188-
changes.append('changed resolution to "%s"' % resolved)
189+
changes.append('set resolution to "%s"' % resolved)
189190

190191
if not history:
191192
history = save_milestone_in_history(m)
@@ -258,6 +259,7 @@ def save_milestone_form(f):
258259
f.milestone = GroupMilestone()
259260
set_attributes_from_form(f, f.milestone)
260261
elif action == "save" and not form_errors:
262+
changes = []
261263
for f in forms:
262264
change = save_milestone_form(f)
263265

@@ -271,6 +273,11 @@ def save_milestone_form(f):
271273
MilestoneGroupEvent.objects.create(group=group, type="changed_milestone",
272274
by=login, desc=change, milestone=f.milestone)
273275

276+
changes.append(change)
277+
278+
if milestone_set == "current":
279+
email_milestones_changed(request, group, u"\n\n".join(c + "." for c in changes))
280+
274281
if milestone_set == "charter":
275282
return redirect('doc_view', name=group.charter.canonical_name())
276283
else:

ietf/wginfo/tests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ def test_edit_milestone(self):
462462
self.assertEquals(m.due, m1.due)
463463

464464
# add
465+
mailbox_before = len(outbox)
465466
r = self.client.post(url, { 'prefix': "m1",
466467
'm1-id': m1.id,
467468
'm1-desc': "Test 2 - changed",
@@ -481,6 +482,8 @@ def test_edit_milestone(self):
481482
self.assertEquals(m.resolved, "Done")
482483
self.assertEquals(set(m.docs.values_list("name", flat=True)), set(docs))
483484
self.assertTrue("Changed milestone" in m.milestonegroupevent_set.all()[0].desc)
485+
self.assertEquals(len(outbox), mailbox_before + 1)
486+
self.assertTrue("Milestones changed" in outbox[-1]["Subject"])
484487

485488
def test_reset_charter_milestones(self):
486489
m1, m2, group = self.create_test_milestones()

0 commit comments

Comments
 (0)