diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py index da8622714..e73adcae5 100644 --- a/ietf/meeting/helpers.py +++ b/ietf/meeting/helpers.py @@ -562,6 +562,23 @@ def send_interim_approval_request(meetings): context, cc=cc_list) +def send_interim_announcement_request(meeting): + """Sends an email to the secretariat that approval has been granted for an + interim meeting which includes the link to send the official announcement""" + group = meeting.session_set.first().group + requester = meeting.session_set.first().requested_by + (to_email, cc_list) = gather_address_lists('session_requested',group=group,person=requester) + from_email = ('"IETF Meeting Session Request Tool"','session_request_developers@ietf.org') + subject = '{group} - Interim Meeting Approved'.format(group=group.acronym) + template = 'meeting/interim_announcement_request.txt' + announce_url = settings.IDTRACKER_BASE_URL + reverse('ietf.meeting.views.interim_request_details', kwargs={'number': meeting.number}) + context = locals() + send_mail(None, + to_email, + from_email, + subject, + template, + context,) def send_interim_cancellation_notice(meeting): """Sends an email that a scheduled interim meeting has been cancelled.""" diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index 88ceaaeeb..16ef6c383 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -565,7 +565,20 @@ class InterimTests(TestCase): self.assertEqual(len(outbox), len_before + 1) self.assertTrue('WG Virtual Meeting' in outbox[-1]['Subject']) - def test_interim_approve(self): + def test_interim_approve_by_ad(self): + make_meeting_test_data() + meeting = Meeting.objects.filter(type='interim', session__status='apprw', session__group__acronym='mars').first() + url = urlreverse('ietf.meeting.views.interim_request_details', kwargs={'number': meeting.number}) + length_before = len(outbox) + login_testing_unauthorized(self, "ad", url) + r = self.client.post(url, {'approve': 'approve'}) + self.assertRedirects(r, urlreverse('ietf.meeting.views.interim_pending')) + for session in meeting.session_set.all(): + self.assertEqual(session.status.slug, 'scheda') + self.assertEqual(len(outbox), length_before + 1) + self.assertTrue('Approved' in outbox[-1]['Subject']) + + def test_interim_approve_by_secretariat(self): make_meeting_test_data() meeting = Meeting.objects.filter(type='interim', session__status='apprw', session__group__acronym='mars').first() url = urlreverse('ietf.meeting.views.interim_request_details', kwargs={'number': meeting.number}) diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 0fa58eb30..3682ba6c8 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -47,6 +47,7 @@ from ietf.meeting.helpers import can_request_interim_meeting, get_announcement_i from ietf.meeting.helpers import sessions_post_save, is_meeting_approved from ietf.meeting.helpers import send_interim_cancellation_notice from ietf.meeting.helpers import send_interim_approval_request +from ietf.meeting.helpers import send_interim_announcement_request from ietf.utils.mail import send_mail_message from ietf.utils.pipe import pipe from ietf.utils.pdf import pdf_pages @@ -1280,6 +1281,7 @@ def interim_request_details(request, number): if has_role(request.user, 'Secretariat'): return redirect(interim_send_announcement, number=number) else: + send_interim_announcement_request(meeting) return redirect(interim_pending) if request.POST.get('disapprove') and can_approve_interim_request(meeting, request.user): meeting.session_set.update(status_id='disappr') diff --git a/ietf/templates/meeting/interim_announcement_request.txt b/ietf/templates/meeting/interim_announcement_request.txt new file mode 100644 index 000000000..fd87ff1ea --- /dev/null +++ b/ietf/templates/meeting/interim_announcement_request.txt @@ -0,0 +1,8 @@ +{% load ams_filters %}{% load ietf_filters %} +An interim meeting for {{ group.acronym }} has just been approved. + +Use this link to officially announce the meeting: +{{ announce_url }} + + +{% include "meeting/interim_info.txt" %}