From 2aa97434fbbc6418c48e6e8cc96003474fc3953f Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Tue, 23 Aug 2011 14:10:53 +0000 Subject: [PATCH] Port SDO reminder emails to new schema, with test - Legacy-Id: 3357 --- ietf/liaisons/mails.py | 23 ++++++++++++ .../commands/remind_update_sdo_list.py | 35 ++++++++++++++++++- ietf/liaisons/proxy.py | 4 +-- ietf/liaisons/tests.py | 32 +++++++++++++++-- 4 files changed, 89 insertions(+), 5 deletions(-) diff --git a/ietf/liaisons/mails.py b/ietf/liaisons/mails.py index 094dd8070..d13d9c59f 100644 --- a/ietf/liaisons/mails.py +++ b/ietf/liaisons/mails.py @@ -3,6 +3,8 @@ from django.template.loader import render_to_string from django.core.urlresolvers import reverse as urlreverse from ietf.utils.mail import send_mail_text +from ietf.liaisons.utils import role_persons_with_fixed_email +from redesign.group.models import Role def send_liaison_by_email(request, liaison, fake=False): if liaison.is_pending(): # this conditional should definitely be at the caller, not here @@ -60,3 +62,24 @@ def notify_pending_by_email(request, liaison, fake): return mail send_mail_text(request, to_email, from_email, subject, body) +def send_sdo_reminder(sdo): + roles = Role.objects.filter(name="liaiman", group=sdo) + if not roles: + return None + + manager_role = roles[0] + + subject = 'Request for update of list of authorized individuals' + to_email = manager_role.email.address + name = manager_role.email.get_name() + + authorized_list = role_persons_with_fixed_email(sdo, "auth") + body = render_to_string('liaisons/sdo_reminder.txt', dict( + manager_name=name, + sdo_name=sdo.name, + individuals=authorized_list, + )) + + send_mail_text(None, to_email, settings.LIAISON_UNIVERSAL_FROM, subject, body) + + return body diff --git a/ietf/liaisons/management/commands/remind_update_sdo_list.py b/ietf/liaisons/management/commands/remind_update_sdo_list.py index f0f429464..3df4837a9 100644 --- a/ietf/liaisons/management/commands/remind_update_sdo_list.py +++ b/ietf/liaisons/management/commands/remind_update_sdo_list.py @@ -38,9 +38,14 @@ class Command(BaseCommand): return msg def handle(self, *args, **options): - query = SDOs.objects.all().order_by('pk') sdo_pk = options.get('sdo_pk', None) return_output = options.get('return_output', False) + + if settings.USE_DB_REDESIGN_PROXY_CLASSES: + msg_list = send_reminders_to_sdos(sdo_pk=sdo_pk) + return msg_list if return_output else None + + query = SDOs.objects.all().order_by('pk') if sdo_pk: query = query.filter(pk=sdo_pk) @@ -55,3 +60,31 @@ class Command(BaseCommand): msg_list.append(msg) if return_output: return msg_list + + +def send_reminders_to_sdos(sdo_pk=None): + from redesign.group.models import Group + from ietf.liaisons.mails import send_sdo_reminder + + sdos = Group.objects.filter(type="sdo").order_by('pk') + if sdo_pk: + sdos = sdos.filter(pk=sdo_pk) + + if not sdos: + print "No SDOs found!" + + msgs = [] + for sdo in sdos: + body = send_sdo_reminder(sdo) + + if not body: + msg = u'%05s#: %s has no liaison manager' % (sdo.pk, sdo.name) + else: + msg = u'%05s#: %s mail sent!' % (sdo.pk, sdo.name) + + print msg + msgs.append(msg) + + return msgs + + diff --git a/ietf/liaisons/proxy.py b/ietf/liaisons/proxy.py index 1d366f04c..750b249ea 100644 --- a/ietf/liaisons/proxy.py +++ b/ietf/liaisons/proxy.py @@ -24,11 +24,11 @@ class LiaisonDetailProxy(LiaisonStatement): #submitted_date = models.DateField(null=True, blank=True) @property def submitted_date(self): - return self.submitted.date() + return self.submitted.date() if self.submitted else None #last_modified_date = models.DateField(null=True, blank=True) @property def last_modified_date(self): - return self.modified.date() + return self.modified.date() if self.modified else None #from_id = models.IntegerField(null=True, blank=True) @property def from_id(self): diff --git a/ietf/liaisons/tests.py b/ietf/liaisons/tests.py index 22141d97b..1a7a739b8 100644 --- a/ietf/liaisons/tests.py +++ b/ietf/liaisons/tests.py @@ -35,12 +35,13 @@ def make_liaison_models(): type_id="sdo", ) + # liaison manager u = User.objects.create(username="zrk") p = Person.objects.create( name="Zrk Brekkk", ascii="Zrk Brekkk", user=u) - email = Email.objects.create( + manager = email = Email.objects.create( address="zrk@ulm.mars", person=p) Role.objects.create( @@ -48,6 +49,20 @@ def make_liaison_models(): group=sdo, email=email) + # authorized individual + u = User.objects.create(username="rkz") + p = Person.objects.create( + name="Rkz Kkkreb", + ascii="Rkz Kkkreb", + user=u) + email = Email.objects.create( + address="rkz@ulm.mars", + person=p) + Role.objects.create( + name_id="auth", + group=sdo, + email=email) + mars_group = Group.objects.get(acronym="mars") l = LiaisonStatement.objects.create( @@ -58,7 +73,7 @@ def make_liaison_models(): related_to=None, from_group=sdo, from_name=sdo.name, - from_contact=email, + from_contact=manager, to_group=mars_group, to_name=mars_group.name, to_contact="%s@ietf.org" % mars_group.acronym, @@ -368,6 +383,19 @@ class LiaisonManagementTestCase(django.test.TestCase): l = LiaisonStatement.objects.all().order_by("-id")[0] self.assertEquals(l.to_group, None) self.assertEquals(l.to_name, "Mars Institute") + + def test_send_sdo_reminder(self): + make_test_data() + liaison = make_liaison_models() + + from ietf.liaisons.mails import send_sdo_reminder + + mailbox_before = len(mail_outbox) + send_sdo_reminder(Group.objects.filter(type="sdo")[0]) + self.assertEquals(len(mail_outbox), mailbox_before + 1) + self.assertTrue("authorized individuals" in mail_outbox[-1]["Subject"]) + print mail_outbox[-1] + if not settings.USE_DB_REDESIGN_PROXY_CLASSES: # the above tests only work with the new schema