Skip to content

Commit

Permalink
Email requesters when an interim moves into the announcement queue. P…
Browse files Browse the repository at this point in the history
…artially addresses #3016 and #3099. Commit ready for merge.

 - Legacy-Id: 18616
  • Loading branch information
rjsparks committed Oct 13, 2020
1 parent 1a7aa21 commit ff3f3bd
Show file tree
Hide file tree
Showing 6 changed files with 15,128 additions and 15,001 deletions.
41 changes: 41 additions & 0 deletions ietf/mailtrigger/migrations/0018_interim_approve_announce.py
@@ -0,0 +1,41 @@
# Copyright The IETF Trust 2020 All Rights Reserved

from django.db import migrations

def forward(apps,schema_editor):
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
Recipient = apps.get_model('mailtrigger', 'Recipient')

interim_approved = MailTrigger.objects.get(slug='interim_approved')
interim_approved.desc = 'Recipients when an interim meeting is approved'
interim_approved.save()
interim_approved.to.set(Recipient.objects.filter(slug__in=('group_chairs','logged_in_person')))

interim_announce_requested = MailTrigger.objects.create(
slug='interim_announce_requested',
desc='Recipients when an interim announcement is requested',
)
interim_announce_requested.to.set(Recipient.objects.filter(slug='iesg_secretary'))


def reverse(apps,schema_editor):
MailTrigger = apps.get_model('mailtrigger', 'MailTrigger')
Recipient = apps.get_model('mailtrigger', 'Recipient')

MailTrigger.objects.filter(slug='interim_announce_requested').delete()

interim_approved = MailTrigger.objects.get(slug='interim_approved')
interim_approved.desc = 'Recipients when an interim meeting is approved and an announcement needs to be sent'
interim_approved.save()
interim_approved.to.set(Recipient.objects.filter(slug='iesg_secretary'))


class Migration(migrations.Migration):

dependencies = [
('mailtrigger', '0017_lc_to_yang_doctors'),
]

operations = [
migrations.RunPython(forward,reverse)
]
20 changes: 19 additions & 1 deletion ietf/meeting/helpers.py
Expand Up @@ -549,13 +549,31 @@ def send_interim_approval_request(meetings):
context,
cc=cc_list)

def send_interim_approval(user, meeting):
"""Send an email to chairs and whoever initiated the action that resulted in approval that an interim is approved"""
first_session = meeting.session_set.first()
(to_email,cc_list) = gather_address_lists('interim_approved',group=first_session.group,person=user.person)
from_email = (settings.SESSION_REQUEST_FROM_EMAIL)
subject = f'{meeting.number} interim approved'
template = 'meeting/interim_approval.txt'
context = {
'meeting': meeting,
}
send_mail(None,
to_email,
from_email,
subject,
template,
context,
cc=cc_list)

def send_interim_announcement_request(meeting):
"""Sends an email to the secretariat that an interim meeting is ready for
announcement, includes the link to send the official announcement"""
first_session = meeting.session_set.first()
group = first_session.group
requester = session_requested_by(first_session)
(to_email, cc_list) = gather_address_lists('interim_approved')
(to_email, cc_list) = gather_address_lists('interim_announce_requested')
from_email = (settings.SESSION_REQUEST_FROM_EMAIL)
subject = '{group} - interim meeting ready for announcement'.format(group=group.acronym)
template = 'meeting/interim_announcement_request.txt'
Expand Down
4 changes: 4 additions & 0 deletions ietf/meeting/tests_views.py
Expand Up @@ -3820,12 +3820,16 @@ def do_request_interim(self, url, group, user, meeting_count):
'session_set-MIN_NUM_FORMS':0,
'session_set-MAX_NUM_FORMS':1000}

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


Expand Down
15 changes: 10 additions & 5 deletions ietf/meeting/views.py
Expand Up @@ -72,6 +72,7 @@
from ietf.meeting.helpers import can_request_interim_meeting, get_announcement_initial
from ietf.meeting.helpers import sessions_post_save, is_interim_meeting_approved
from ietf.meeting.helpers import send_interim_cancellation_notice
from ietf.meeting.helpers import send_interim_approval
from ietf.meeting.helpers import send_interim_approval_request
from ietf.meeting.helpers import send_interim_announcement_request
from ietf.meeting.utils import finalize, sort_accept_tuple, condition_slide_order
Expand Down Expand Up @@ -3032,9 +3033,11 @@ def interim_request(request):
sessions_post_save(request, formset)

if requires_approval:
send_interim_approval_request(meetings=[meeting])
elif not has_role(request.user, 'Secretariat'):
send_interim_announcement_request(meeting=meeting)
send_interim_approval_request(meetings=series)
else:
send_interim_approval(request.user, meeting=meeting)
if not has_role(request.user, 'Secretariat'):
send_interim_announcement_request(meeting=meeting)

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

if requires_approval:
send_interim_approval_request(meetings=series)
elif not has_role(request.user, 'Secretariat'):
send_interim_announcement_request(meeting=meeting)
else:
send_interim_approval(request.user, meeting=meeting)
if not has_role(request.user, 'Secretariat'):
send_interim_announcement_request(meeting=meeting)

messages.success(request, 'Interim meeting request submitted')
return redirect(upcoming)
Expand Down

0 comments on commit ff3f3bd

Please sign in to comment.