Skip to content

Commit dbe4e37

Browse files
committed
removed all the milestone reminder machinery
- Legacy-Id: 10091
1 parent f5b6465 commit dbe4e37

8 files changed

Lines changed: 1 addition & 351 deletions

File tree

ietf/bin/send-milestone-reminders

Lines changed: 0 additions & 46 deletions
This file was deleted.

ietf/group/mails.py

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# generation of mails
22

3-
import datetime
43
import re
54

65

@@ -10,8 +9,6 @@
109
from django.core.urlresolvers import reverse as urlreverse
1110

1211
from ietf.utils.mail import send_mail, send_mail_text
13-
from ietf.group.models import Group
14-
from ietf.group.utils import milestone_reviewer_for_group_type
1512
from ietf.mailtrigger.utils import gather_address_lists
1613

1714
def email_admin_re_charter(request, group, subject, text, mailtrigger):
@@ -61,97 +58,3 @@ def wrap_up_email(addrs, text):
6158
if (addrs.to or addrs.cc) and msg:
6259
wrap_up_email(addrs, msg)
6360

64-
65-
def email_milestone_review_reminder(group, grace_period=7):
66-
"""Email reminders about milestones needing review to management."""
67-
(to, cc) = gather_address_lists('milestone_review_reminder',group=group)
68-
69-
if not to:
70-
return False
71-
72-
now = datetime.datetime.now()
73-
too_early = True
74-
75-
milestones = group.groupmilestone_set.filter(state="review")
76-
for m in milestones:
77-
e = m.milestonegroupevent_set.filter(type="changed_milestone").order_by("-time")[:1]
78-
m.days_ready = (now - e[0].time).days if e else None
79-
80-
if m.days_ready == None or m.days_ready >= grace_period:
81-
too_early = False
82-
83-
if too_early:
84-
return False
85-
86-
subject = u"Reminder: Milestone%s needing review in %s %s" % ("s" if len(milestones) > 1 else "", group.acronym, group.type.name)
87-
88-
send_mail(None, to, None,
89-
subject,
90-
"group/reminder_milestones_need_review.txt",
91-
dict(group=group,
92-
milestones=milestones,
93-
reviewer=milestone_reviewer_for_group_type(group.type_id),
94-
url=settings.IDTRACKER_BASE_URL + urlreverse("group_edit_milestones", kwargs=dict(group_type=group.type_id, acronym=group.acronym)),
95-
),
96-
cc=cc,
97-
)
98-
99-
return True
100-
101-
def groups_with_milestones_needing_review():
102-
return Group.objects.filter(groupmilestone__state="review").distinct()
103-
104-
def email_milestones_due(group, early_warning_days):
105-
(to, cc) = gather_address_lists('milestones_due_soon',group=group)
106-
107-
today = datetime.date.today()
108-
early_warning = today + datetime.timedelta(days=early_warning_days)
109-
110-
milestones = group.groupmilestone_set.filter(due__in=[today, early_warning],
111-
resolved="", state="active")
112-
113-
subject = u"Reminder: Milestone%s are soon due in %s %s" % ("s" if len(milestones) > 1 else "", group.acronym, group.type.name)
114-
115-
send_mail(None, to, None,
116-
subject,
117-
"group/reminder_milestones_due.txt",
118-
dict(group=group,
119-
milestones=milestones,
120-
today=today,
121-
early_warning_days=early_warning_days,
122-
url=settings.IDTRACKER_BASE_URL + group.about_url(),
123-
),
124-
cc=cc,
125-
)
126-
127-
def groups_needing_milestones_due_reminder(early_warning_days):
128-
"""Return groups having milestones that are either
129-
early_warning_days from being due or are due today."""
130-
today = datetime.date.today()
131-
return Group.objects.filter(state="active", groupmilestone__due__in=[today, today + datetime.timedelta(days=early_warning_days)], groupmilestone__resolved="", groupmilestone__state="active").distinct()
132-
133-
def email_milestones_overdue(group):
134-
(to, cc) = gather_address_lists('milestones_overdue',group=group)
135-
136-
today = datetime.date.today()
137-
138-
milestones = group.groupmilestone_set.filter(due__lt=today, resolved="", state="active")
139-
for m in milestones:
140-
m.months_overdue = (today - m.due).days // 30
141-
142-
subject = u"Reminder: Milestone%s overdue in %s %s" % ("s" if len(milestones) > 1 else "", group.acronym, group.type.name)
143-
144-
send_mail(None, to, None,
145-
subject,
146-
"group/reminder_milestones_overdue.txt",
147-
dict(group=group,
148-
milestones=milestones,
149-
url=settings.IDTRACKER_BASE_URL + group.about_url(),
150-
),
151-
cc=cc,
152-
)
153-
154-
def groups_needing_milestones_overdue_reminder(grace_period=30):
155-
cut_off = datetime.date.today() - datetime.timedelta(days=grace_period)
156-
return Group.objects.filter(state="active", groupmilestone__due__lt=cut_off, groupmilestone__resolved="", groupmilestone__state="active").distinct()
157-

ietf/group/tests_info.py

Lines changed: 1 addition & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@
1212
from django.core.urlresolvers import reverse as urlreverse
1313

1414
from ietf.doc.models import Document, DocAlias, DocEvent, State
15-
from ietf.group.models import Group, GroupEvent, GroupMilestone, GroupStateTransitions, MilestoneGroupEvent
15+
from ietf.group.models import Group, GroupEvent, GroupMilestone, GroupStateTransitions
1616
from ietf.group.utils import save_group_in_history
1717
from ietf.name.models import DocTagName, GroupStateName
1818
from ietf.person.models import Person, Email
1919
from ietf.utils.test_utils import TestCase
2020
from ietf.utils.mail import outbox, empty_outbox
2121
from ietf.utils.test_data import make_test_data
2222
from ietf.utils.test_utils import login_testing_unauthorized
23-
from ietf.group.mails import ( email_milestone_review_reminder, email_milestones_due,
24-
email_milestones_overdue, groups_needing_milestones_due_reminder,
25-
groups_needing_milestones_overdue_reminder, groups_with_milestones_needing_review )
2623

2724
class GroupPagesTests(TestCase):
2825
def setUp(self):
@@ -786,137 +783,6 @@ def test_reset_charter_milestones(self):
786783

787784
self.assertEqual(group.charter.docevent_set.count(), events_before + 2) # 1 delete, 1 add
788785

789-
def test_send_review_needed_reminders(self):
790-
make_test_data()
791-
792-
group = Group.objects.get(acronym="mars")
793-
person = Person.objects.get(user__username="marschairman")
794-
795-
m1 = GroupMilestone.objects.create(group=group,
796-
desc="Test 1",
797-
due=datetime.date.today(),
798-
resolved="",
799-
state_id="review")
800-
MilestoneGroupEvent.objects.create(
801-
group=group, type="changed_milestone",
802-
by=person, desc='Added milestone "%s"' % m1.desc, milestone=m1,
803-
time=datetime.datetime.now() - datetime.timedelta(seconds=60))
804-
805-
# send
806-
mailbox_before = len(outbox)
807-
for g in groups_with_milestones_needing_review():
808-
email_milestone_review_reminder(g)
809-
810-
self.assertEqual(len(outbox), mailbox_before) # too early to send reminder
811-
812-
813-
# add earlier added milestone
814-
m2 = GroupMilestone.objects.create(group=group,
815-
desc="Test 2",
816-
due=datetime.date.today(),
817-
resolved="",
818-
state_id="review")
819-
MilestoneGroupEvent.objects.create(
820-
group=group, type="changed_milestone",
821-
by=person, desc='Added milestone "%s"' % m2.desc, milestone=m2,
822-
time=datetime.datetime.now() - datetime.timedelta(days=10))
823-
824-
# send
825-
mailbox_before = len(outbox)
826-
for g in groups_with_milestones_needing_review():
827-
email_milestone_review_reminder(g)
828-
829-
self.assertEqual(len(outbox), mailbox_before + 1)
830-
self.assertTrue(group.acronym in outbox[-1]["Subject"])
831-
self.assertTrue(m1.desc in unicode(outbox[-1]))
832-
self.assertTrue(m2.desc in unicode(outbox[-1]))
833-
834-
def test_send_milestones_due_reminders(self):
835-
make_test_data()
836-
837-
group = Group.objects.get(acronym="mars")
838-
839-
early_warning_days = 30
840-
841-
# due dates here aren't aligned on the last day of the month,
842-
# but everything should still work
843-
844-
m1 = GroupMilestone.objects.create(group=group,
845-
desc="Test 1",
846-
due=datetime.date.today(),
847-
resolved="Done",
848-
state_id="active")
849-
m2 = GroupMilestone.objects.create(group=group,
850-
desc="Test 2",
851-
due=datetime.date.today() + datetime.timedelta(days=early_warning_days - 10),
852-
resolved="",
853-
state_id="active")
854-
855-
# send
856-
mailbox_before = len(outbox)
857-
for g in groups_needing_milestones_due_reminder(early_warning_days):
858-
email_milestones_due(g, early_warning_days)
859-
860-
self.assertEqual(len(outbox), mailbox_before) # none found
861-
862-
m1.resolved = ""
863-
m1.save()
864-
865-
m2.due = datetime.date.today() + datetime.timedelta(days=early_warning_days)
866-
m2.save()
867-
868-
# send
869-
mailbox_before = len(outbox)
870-
for g in groups_needing_milestones_due_reminder(early_warning_days):
871-
email_milestones_due(g, early_warning_days)
872-
873-
self.assertEqual(len(outbox), mailbox_before + 1)
874-
self.assertTrue(group.acronym in outbox[-1]["Subject"])
875-
self.assertTrue(m1.desc in unicode(outbox[-1]))
876-
self.assertTrue(m2.desc in unicode(outbox[-1]))
877-
878-
def test_send_milestones_overdue_reminders(self):
879-
make_test_data()
880-
881-
group = Group.objects.get(acronym="mars")
882-
883-
# due dates here aren't aligned on the last day of the month,
884-
# but everything should still work
885-
886-
m1 = GroupMilestone.objects.create(group=group,
887-
desc="Test 1",
888-
due=datetime.date.today() - datetime.timedelta(days=200),
889-
resolved="Done",
890-
state_id="active")
891-
m2 = GroupMilestone.objects.create(group=group,
892-
desc="Test 2",
893-
due=datetime.date.today() - datetime.timedelta(days=10),
894-
resolved="",
895-
state_id="active")
896-
897-
# send
898-
mailbox_before = len(outbox)
899-
for g in groups_needing_milestones_overdue_reminder(grace_period=30):
900-
email_milestones_overdue(g)
901-
902-
self.assertEqual(len(outbox), mailbox_before) # none found
903-
904-
m1.resolved = ""
905-
m1.save()
906-
907-
m2.due = self.last_day_of_month(datetime.date.today() - datetime.timedelta(days=300))
908-
m2.save()
909-
910-
# send
911-
mailbox_before = len(outbox)
912-
for g in groups_needing_milestones_overdue_reminder(grace_period=30):
913-
email_milestones_overdue(g)
914-
915-
self.assertEqual(len(outbox), mailbox_before + 1)
916-
self.assertTrue(group.acronym in outbox[-1]["Subject"])
917-
self.assertTrue(m1.desc in unicode(outbox[-1]))
918-
self.assertTrue(m2.desc in unicode(outbox[-1]))
919-
920786
class CustomizeWorkflowTests(TestCase):
921787
def test_customize_workflow(self):
922788
make_test_data()

ietf/mailtrigger/migrations/0002_auto_20150809_1314.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -628,20 +628,6 @@ def mt_factory(slug,desc,to_slugs,cc_slugs=[]):
628628
'doc_discussing_ads',
629629
])
630630

631-
mt_factory(slug='milestone_review_reminder',
632-
desc="Recipients for reminder message that unapproved milestone changes need review",
633-
to_slugs=['group_responsible_directors',],
634-
cc_slugs=['group_chairs', ],
635-
)
636-
637-
mt_factory(slug='milestones_due_soon',
638-
desc="Recipients for reminder message for milestones about to become overdue",
639-
to_slugs=['group_chairs', ])
640-
641-
mt_factory(slug='milestones_overdue',
642-
desc="Recipients for message about milestones that are overdue",
643-
to_slugs=['group_chairs', ])
644-
645631
mt_factory(slug='group_personnel_change',
646632
desc="Recipients for a message noting changes in a group's personnel",
647633
to_slugs=['iesg_secretary',

ietf/name/fixtures/names.json

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5459,41 +5459,6 @@
54595459
"model": "mailtrigger.mailtrigger",
54605460
"pk": "liaison_statement_posted"
54615461
},
5462-
{
5463-
"fields": {
5464-
"cc": [],
5465-
"to": [
5466-
"group_chairs"
5467-
],
5468-
"desc": "Recipients for reminder message for milestones about to become overdue"
5469-
},
5470-
"model": "mailtrigger.mailtrigger",
5471-
"pk": "milestones_due_soon"
5472-
},
5473-
{
5474-
"fields": {
5475-
"cc": [],
5476-
"to": [
5477-
"group_chairs"
5478-
],
5479-
"desc": "Recipients for message about milestones that are overdue"
5480-
},
5481-
"model": "mailtrigger.mailtrigger",
5482-
"pk": "milestones_overdue"
5483-
},
5484-
{
5485-
"fields": {
5486-
"cc": [
5487-
"group_chairs"
5488-
],
5489-
"to": [
5490-
"group_responsible_directors"
5491-
],
5492-
"desc": "Recipients for reminder message that unapproved milestone changes need review"
5493-
},
5494-
"model": "mailtrigger.mailtrigger",
5495-
"pk": "milestone_review_reminder"
5496-
},
54975462
{
54985463
"fields": {
54995464
"cc": [],

ietf/templates/group/reminder_milestones_due.txt

Lines changed: 0 additions & 7 deletions
This file was deleted.

ietf/templates/group/reminder_milestones_need_review.txt

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)