Add some polish, send email notifications on milestone changes
- Legacy-Id: 4544
This commit is contained in:
parent
471d5de21e
commit
2b5345cf67
|
@ -586,7 +586,7 @@ def approve(request, name):
|
|||
o.save()
|
||||
MilestoneGroupEvent.objects.create(
|
||||
group=group, type="changed_milestone", by=login,
|
||||
desc="Changed milestone \"%s\", changed state from review to active" % o.desc,
|
||||
desc="Changed milestone \"%s\", set state to active from review" % o.desc,
|
||||
milestone=o)
|
||||
|
||||
del milestones_to_delete[i]
|
||||
|
|
27
ietf/wginfo/mails.py
Normal file
27
ietf/wginfo/mails.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
# generation of mails
|
||||
|
||||
import textwrap, datetime
|
||||
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.html import strip_tags
|
||||
from django.utils.text import wrap
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse as urlreverse
|
||||
|
||||
from ietf.utils.mail import send_mail, send_mail_text
|
||||
|
||||
def email_milestones_changed(request, group, text):
|
||||
to = []
|
||||
if group.ad:
|
||||
to.append(group.ad.role_email("ad").formatted_email())
|
||||
|
||||
for r in group.role_set.filter(name="chair"):
|
||||
to.append(r.formatted_email())
|
||||
|
||||
text = wrap(strip_tags(text), 70)
|
||||
text += "\n\n"
|
||||
text += "URL: %s" % (settings.IDTRACKER_BASE_URL + urlreverse("wg_charter", kwargs=dict(acronym=group.acronym)))
|
||||
|
||||
send_mail_text(request, to, None,
|
||||
"Milestones changed for %s %s" % (group.acronym, group.type.name),
|
||||
text)
|
|
@ -17,6 +17,7 @@ from ietf.doc.models import Document, DocEvent
|
|||
from ietf.doc.utils import get_chartering_type
|
||||
from ietf.group.models import *
|
||||
from ietf.group.utils import save_group_in_history, save_milestone_in_history
|
||||
from ietf.wginfo.mails import email_milestones_changed
|
||||
|
||||
def json_doc_names(docs):
|
||||
return simplejson.dumps([{"id": doc.pk, "name": doc.name } for doc in docs])
|
||||
|
@ -160,23 +161,23 @@ def edit_milestones(request, acronym, milestone_set="current"):
|
|||
|
||||
if c["accept"] == "accept":
|
||||
m.state_id = "active"
|
||||
changes.append("changed state from review to active, accepting new milestone")
|
||||
changes.append("set state to active from review, accepting new milestone")
|
||||
elif c["accept"] == "reject":
|
||||
m.state_id = "deleted"
|
||||
changes.append("changed state from review to deleted, rejecting new milestone")
|
||||
changes.append("set state to deleted from review, rejecting new milestone")
|
||||
|
||||
|
||||
if c["desc"] != m.desc and not needs_review:
|
||||
if not history:
|
||||
history = save_milestone_in_history(m)
|
||||
m.desc = c["desc"]
|
||||
changes.append('changed description to "%s"' % m.desc)
|
||||
changes.append('set description to "%s"' % m.desc)
|
||||
|
||||
if c["due"] != m.due:
|
||||
if not history:
|
||||
history = save_milestone_in_history(m)
|
||||
changes.append('set due date to %s from %s' % (c["due"].strftime("%Y-%m-%d"), m.due.strftime("%Y-%m-%d")))
|
||||
m.due = c["due"]
|
||||
changes.append('changed due date to %s' % m.due.strftime("%Y-%m-%d"))
|
||||
|
||||
resolved = c["resolved"]
|
||||
if resolved != m.resolved:
|
||||
|
@ -185,7 +186,7 @@ def edit_milestones(request, acronym, milestone_set="current"):
|
|||
elif not resolved and m.resolved:
|
||||
changes.append("reverted to not being resolved")
|
||||
elif resolved and m.resolved:
|
||||
changes.append('changed resolution to "%s"' % resolved)
|
||||
changes.append('set resolution to "%s"' % resolved)
|
||||
|
||||
if not history:
|
||||
history = save_milestone_in_history(m)
|
||||
|
@ -258,6 +259,7 @@ def edit_milestones(request, acronym, milestone_set="current"):
|
|||
f.milestone = GroupMilestone()
|
||||
set_attributes_from_form(f, f.milestone)
|
||||
elif action == "save" and not form_errors:
|
||||
changes = []
|
||||
for f in forms:
|
||||
change = save_milestone_form(f)
|
||||
|
||||
|
@ -271,6 +273,11 @@ def edit_milestones(request, acronym, milestone_set="current"):
|
|||
MilestoneGroupEvent.objects.create(group=group, type="changed_milestone",
|
||||
by=login, desc=change, milestone=f.milestone)
|
||||
|
||||
changes.append(change)
|
||||
|
||||
if milestone_set == "current":
|
||||
email_milestones_changed(request, group, u"\n\n".join(c + "." for c in changes))
|
||||
|
||||
if milestone_set == "charter":
|
||||
return redirect('doc_view', name=group.charter.canonical_name())
|
||||
else:
|
||||
|
|
|
@ -462,6 +462,7 @@ class MilestoneTestCase(django.test.TestCase):
|
|||
self.assertEquals(m.due, m1.due)
|
||||
|
||||
# add
|
||||
mailbox_before = len(outbox)
|
||||
r = self.client.post(url, { 'prefix': "m1",
|
||||
'm1-id': m1.id,
|
||||
'm1-desc': "Test 2 - changed",
|
||||
|
@ -481,6 +482,8 @@ class MilestoneTestCase(django.test.TestCase):
|
|||
self.assertEquals(m.resolved, "Done")
|
||||
self.assertEquals(set(m.docs.values_list("name", flat=True)), set(docs))
|
||||
self.assertTrue("Changed milestone" in m.milestonegroupevent_set.all()[0].desc)
|
||||
self.assertEquals(len(outbox), mailbox_before + 1)
|
||||
self.assertTrue("Milestones changed" in outbox[-1]["Subject"])
|
||||
|
||||
def test_reset_charter_milestones(self):
|
||||
m1, m2, group = self.create_test_milestones()
|
||||
|
|
Loading…
Reference in a new issue