Merged in [8271] and [8292] from rjsparks@nostrum.com:

Send email when a the telechat date (or returning item bit) changes for a document.
Fixes #1452
 - Legacy-Id: 8383
Note: SVN reference [8271] has been migrated to Git commit 80fc0c7caa4feac2966722324e42a53cabe67a6b

Note: SVN reference [8292] has been migrated to Git commit 7c56f8bad35b6ed06f6c6eff7436c178209d4143
This commit is contained in:
Henrik Levkowetz 2014-10-12 17:07:45 +00:00
parent 25423f6779
commit 320051213e
5 changed files with 38 additions and 4 deletions

View file

@ -483,3 +483,4 @@ def email_stream_tags_changed(request, doc, added_tags, removed_tags, by, commen
removed=removed_tags,
by=by,
comment=comment))

View file

@ -480,8 +480,9 @@ class DeferUndeferTestCase(TestCase):
if doc.type_id in defer_states:
self.assertEqual(doc.get_state(defer_states[doc.type_id][0]).slug,defer_states[doc.type_id][1])
self.assertTrue(doc.active_defer_event())
self.assertEqual(len(outbox), mailbox_before + 2)
self.assertTrue("State Update" in outbox[-2]['Subject'])
self.assertEqual(len(outbox), mailbox_before + 3)
self.assertTrue("State Update" in outbox[-3]['Subject'])
self.assertTrue("Telechat update" in outbox[-2]['Subject'])
self.assertTrue("Deferred" in outbox[-1]['Subject'])
self.assertTrue(doc.file_tag() in outbox[-1]['Subject'])
@ -534,7 +535,8 @@ class DeferUndeferTestCase(TestCase):
if doc.type_id in undefer_states:
self.assertEqual(doc.get_state(undefer_states[doc.type_id][0]).slug,undefer_states[doc.type_id][1])
self.assertFalse(doc.active_defer_event())
self.assertEqual(len(outbox), mailbox_before + 2)
self.assertEqual(len(outbox), mailbox_before + 3)
self.assertTrue("Telechat update" in outbox[-3]['Subject'])
self.assertTrue("State Update" in outbox[-2]['Subject'])
self.assertTrue("Undeferred" in outbox[-1]['Subject'])
self.assertTrue(doc.file_tag() in outbox[-1]['Subject'])

View file

@ -232,7 +232,7 @@ class EditInfoTests(TestCase):
data = dict(intended_std_level=str(draft.intended_std_level_id),
stream=draft.stream_id,
ad=str(draft.ad_id),
notify="test@example.com",
notify=draft.notify,
note="",
)
@ -241,6 +241,7 @@ class EditInfoTests(TestCase):
self.assertEqual(r.status_code, 200)
# add to telechat
mailbox_before=len(outbox)
self.assertTrue(not draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat"))
data["telechat_date"] = TelechatDate.objects.active()[0].date.isoformat()
r = self.client.post(url, data)
@ -249,8 +250,11 @@ class EditInfoTests(TestCase):
draft = Document.objects.get(name=draft.name)
self.assertTrue(draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat"))
self.assertEqual(draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat").telechat_date, TelechatDate.objects.active()[0].date)
self.assertEqual(len(outbox),mailbox_before+1)
self.assertTrue("Telechat update" in outbox[-1]['Subject'])
# change telechat
mailbox_before=len(outbox)
data["telechat_date"] = TelechatDate.objects.active()[1].date.isoformat()
r = self.client.post(url, data)
self.assertEqual(r.status_code, 302)
@ -259,6 +263,8 @@ class EditInfoTests(TestCase):
telechat_event = draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
self.assertEqual(telechat_event.telechat_date, TelechatDate.objects.active()[1].date)
self.assertFalse(telechat_event.returning_item)
self.assertEqual(len(outbox),mailbox_before+1)
self.assertTrue("Telechat update" in outbox[-1]['Subject'])
# change to a telechat that should cause returning item to be auto-detected
# First, make it appear that the previous telechat has already passed
@ -277,12 +283,15 @@ class EditInfoTests(TestCase):
self.assertTrue(telechat_event.returning_item)
# remove from agenda
mailbox_before=len(outbox)
data["telechat_date"] = ""
r = self.client.post(url, data)
self.assertEqual(r.status_code, 302)
draft = Document.objects.get(name=draft.name)
self.assertTrue(not draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat").telechat_date)
self.assertEqual(len(outbox),mailbox_before+1)
self.assertTrue("Telechat update" in outbox[-1]['Subject'])
def test_start_iesg_process_on_draft(self):
make_test_data()

View file

@ -7,6 +7,7 @@ import datetime
from django.conf import settings
from django.db.models.query import EmptyQuerySet
from django.forms import ValidationError
from django.utils.html import strip_tags
from ietf.utils import markup_txt
from ietf.doc.models import Document, DocHistory
@ -16,6 +17,23 @@ from ietf.name.models import DocReminderTypeName, DocRelationshipName
from ietf.group.models import Role
from ietf.ietfauth.utils import has_role
from ietf.utils import draft
from ietf.utils.mail import send_mail
#FIXME - it would be better if this lived in ietf/doc/mails.py, but there's
# an import order issue to work out.
def email_update_telechat(request, doc, text):
to = set(['iesg@ietf.org','iesg-secretary@ietf.org'])
to.update(set([x.strip() for x in doc.notify.replace(';', ',').split(',')]))
if not to:
return
text = strip_tags(text)
send_mail(request, list(to), None,
"Telechat update notice: %s" % doc.file_tag(),
"doc/mail/update_telechat.txt",
dict(text=text,
url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url()))
def get_state_types(doc):
res = []
@ -368,6 +386,7 @@ def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None
e.desc = "Removed telechat returning item indication"
e.save()
email_update_telechat(request, doc, e.desc)
def rebuild_reference_relations(doc,filename=None):
if doc.type.slug != 'draft':

View file

@ -0,0 +1,3 @@
{% autoescape off %}{{ text }}
ID Tracker URL: {{ url }}
{% endautoescape %}