Skip to content

Commit ff3f3bd

Browse files
committed
Email requesters when an interim moves into the announcement queue. Partially addresses ietf-tools#3016 and ietf-tools#3099. Commit ready for merge.
- Legacy-Id: 18616
1 parent 1a7aa21 commit ff3f3bd

6 files changed

Lines changed: 15128 additions & 15001 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Copyright The IETF Trust 2020 All Rights Reserved
2+
3+
from django.db import migrations
4+
5+
def forward(apps,schema_editor):
6+
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
7+
Recipient = apps.get_model('mailtrigger', 'Recipient')
8+
9+
interim_approved = MailTrigger.objects.get(slug='interim_approved')
10+
interim_approved.desc = 'Recipients when an interim meeting is approved'
11+
interim_approved.save()
12+
interim_approved.to.set(Recipient.objects.filter(slug__in=('group_chairs','logged_in_person')))
13+
14+
interim_announce_requested = MailTrigger.objects.create(
15+
slug='interim_announce_requested',
16+
desc='Recipients when an interim announcement is requested',
17+
)
18+
interim_announce_requested.to.set(Recipient.objects.filter(slug='iesg_secretary'))
19+
20+
21+
def reverse(apps,schema_editor):
22+
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
23+
Recipient = apps.get_model('mailtrigger', 'Recipient')
24+
25+
MailTrigger.objects.filter(slug='interim_announce_requested').delete()
26+
27+
interim_approved = MailTrigger.objects.get(slug='interim_approved')
28+
interim_approved.desc = 'Recipients when an interim meeting is approved and an announcement needs to be sent'
29+
interim_approved.save()
30+
interim_approved.to.set(Recipient.objects.filter(slug='iesg_secretary'))
31+
32+
33+
class Migration(migrations.Migration):
34+
35+
dependencies = [
36+
('mailtrigger', '0017_lc_to_yang_doctors'),
37+
]
38+
39+
operations = [
40+
migrations.RunPython(forward,reverse)
41+
]

ietf/meeting/helpers.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,13 +549,31 @@ def send_interim_approval_request(meetings):
549549
context,
550550
cc=cc_list)
551551

552+
def send_interim_approval(user, meeting):
553+
"""Send an email to chairs and whoever initiated the action that resulted in approval that an interim is approved"""
554+
first_session = meeting.session_set.first()
555+
(to_email,cc_list) = gather_address_lists('interim_approved',group=first_session.group,person=user.person)
556+
from_email = (settings.SESSION_REQUEST_FROM_EMAIL)
557+
subject = f'{meeting.number} interim approved'
558+
template = 'meeting/interim_approval.txt'
559+
context = {
560+
'meeting': meeting,
561+
}
562+
send_mail(None,
563+
to_email,
564+
from_email,
565+
subject,
566+
template,
567+
context,
568+
cc=cc_list)
569+
552570
def send_interim_announcement_request(meeting):
553571
"""Sends an email to the secretariat that an interim meeting is ready for
554572
announcement, includes the link to send the official announcement"""
555573
first_session = meeting.session_set.first()
556574
group = first_session.group
557575
requester = session_requested_by(first_session)
558-
(to_email, cc_list) = gather_address_lists('interim_approved')
576+
(to_email, cc_list) = gather_address_lists('interim_announce_requested')
559577
from_email = (settings.SESSION_REQUEST_FROM_EMAIL)
560578
subject = '{group} - interim meeting ready for announcement'.format(group=group.acronym)
561579
template = 'meeting/interim_announcement_request.txt'

ietf/meeting/tests_views.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3820,12 +3820,16 @@ def do_request_interim(self, url, group, user, meeting_count):
38203820
'session_set-MIN_NUM_FORMS':0,
38213821
'session_set-MAX_NUM_FORMS':1000}
38223822

3823+
empty_outbox()
38233824
r = self.client.post(urlreverse("ietf.meeting.views.interim_request"),data)
38243825
self.assertRedirects(r,urlreverse('ietf.meeting.views.upcoming'))
38253826
meeting = Meeting.objects.order_by('id').last()
38263827
self.assertEqual(meeting.type_id,'interim')
38273828
self.assertEqual(meeting.date,date)
38283829
self.assertEqual(meeting.number,'interim-%s-%s-%s' % (date.year, group.acronym, next_num))
3830+
self.assertTrue(len(outbox)>0)
3831+
self.assertIn('interim approved',outbox[0]["Subject"])
3832+
self.assertIn(user.person.email().address,outbox[0]["To"])
38293833
self.client.logout()
38303834

38313835

ietf/meeting/views.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
from ietf.meeting.helpers import can_request_interim_meeting, get_announcement_initial
7373
from ietf.meeting.helpers import sessions_post_save, is_interim_meeting_approved
7474
from ietf.meeting.helpers import send_interim_cancellation_notice
75+
from ietf.meeting.helpers import send_interim_approval
7576
from ietf.meeting.helpers import send_interim_approval_request
7677
from ietf.meeting.helpers import send_interim_announcement_request
7778
from ietf.meeting.utils import finalize, sort_accept_tuple, condition_slide_order
@@ -3032,9 +3033,11 @@ def interim_request(request):
30323033
sessions_post_save(request, formset)
30333034

30343035
if requires_approval:
3035-
send_interim_approval_request(meetings=[meeting])
3036-
elif not has_role(request.user, 'Secretariat'):
3037-
send_interim_announcement_request(meeting=meeting)
3036+
send_interim_approval_request(meetings=series)
3037+
else:
3038+
send_interim_approval(request.user, meeting=meeting)
3039+
if not has_role(request.user, 'Secretariat'):
3040+
send_interim_announcement_request(meeting=meeting)
30383041

30393042
# series require special handling, each session gets it's own
30403043
# meeting object we won't see this on edit because series are
@@ -3064,8 +3067,10 @@ def interim_request(request):
30643067

30653068
if requires_approval:
30663069
send_interim_approval_request(meetings=series)
3067-
elif not has_role(request.user, 'Secretariat'):
3068-
send_interim_announcement_request(meeting=meeting)
3070+
else:
3071+
send_interim_approval(request.user, meeting=meeting)
3072+
if not has_role(request.user, 'Secretariat'):
3073+
send_interim_announcement_request(meeting=meeting)
30693074

30703075
messages.success(request, 'Interim meeting request submitted')
30713076
return redirect(upcoming)

0 commit comments

Comments
 (0)