From a13b751e1a5350de7a92348ef5eff52cf341dc9a Mon Sep 17 00:00:00 2001 From: Ryan Cross Date: Mon, 15 Aug 2016 21:04:31 +0000 Subject: [PATCH] Fixes #1994. Requests for virtual interim meeting should go directly Scheduled - Waiting for announcement state and an email notification sent to the secretariat. Commit ready for merge. - Legacy-Id: 11792 --- ietf/meeting/forms.py | 6 ++++++ ietf/meeting/helpers.py | 6 +++--- ietf/meeting/tests_views.py | 13 +++++++++---- ietf/meeting/views.py | 9 ++++++++- .../meeting/interim_announcement_request.txt | 2 +- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/ietf/meeting/forms.py b/ietf/meeting/forms.py index b4884b7b8..413665ea6 100644 --- a/ietf/meeting/forms.py +++ b/ietf/meeting/forms.py @@ -180,6 +180,12 @@ class InterimMeetingModelForm(forms.ModelForm): return self.cleaned_data + def is_virtual(self): + if not self.is_bound or self.data.get('in_person'): + return False + else: + return True + def set_group_options(self): '''Set group options based on user accessing the form''' if has_role(self.user, "Secretariat"): diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py index 23c604772..944c8dd4a 100644 --- a/ietf/meeting/helpers.py +++ b/ietf/meeting/helpers.py @@ -563,13 +563,13 @@ def send_interim_approval_request(meetings): 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""" + """Sends an email to the secretariat that an interim meeting is ready for + announcement, 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('interim_approved') from_email = ('"IETF Meeting Session Request Tool"','session_request_developers@ietf.org') - subject = '{group} - Interim Meeting Approved'.format(group=group.acronym) + subject = '{group} - interim meeting ready for announcement'.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() diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index 48926fe6d..b72199687 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -587,7 +587,7 @@ class InterimTests(TestCase): 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']) + self.assertTrue('ready for announcement' in outbox[-1]['Subject']) def test_interim_approve_by_secretariat(self): make_meeting_test_data() @@ -670,7 +670,7 @@ class InterimTests(TestCase): len(q("#id_group option")) - 1) # -1 for options placeholder - def test_interim_request_single(self): + def test_interim_request_single_virtual(self): make_meeting_test_data() group = Group.objects.get(acronym='mars') date = datetime.date.today() + datetime.timedelta(days=30) @@ -680,7 +680,8 @@ class InterimTests(TestCase): remote_instructions = 'Use webex' agenda = 'Intro. Slides. Discuss.' agenda_note = 'On second level' - self.client.login(username="secretary", password="secretary+password") + length_before = len(outbox) + self.client.login(username="marschairman", password="marschairman+password") data = {'group':group.pk, 'meeting_type':'single', 'city':'', @@ -698,7 +699,6 @@ class InterimTests(TestCase): 'session_set-MAX_NUM_FORMS':1000} 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') @@ -710,6 +710,7 @@ class InterimTests(TestCase): session = meeting.session_set.first() self.assertEqual(session.remote_instructions,remote_instructions) self.assertEqual(session.agenda_note,agenda_note) + self.assertEqual(session.status.slug,'scheda') timeslot = session.official_timeslotassignment().timeslot self.assertEqual(timeslot.time,dt) self.assertEqual(timeslot.duration,duration) @@ -718,6 +719,10 @@ class InterimTests(TestCase): doc = session.materials.first() path = os.path.join(doc.get_file_path(),doc.filename_with_rev()) self.assertTrue(os.path.exists(path)) + # check notice to secretariat + self.assertEqual(len(outbox), length_before + 1) + self.assertTrue('interim meeting ready for announcement' in outbox[-1]['Subject']) + self.assertTrue('iesg-secretary@ietf.org' in outbox[-1]['To']) def test_interim_request_single_in_person(self): make_meeting_test_data() diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 77833427c..cf8374934 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -1173,7 +1173,10 @@ def interim_request(request): formset = SessionFormset(instance=Meeting(), data=request.POST) if form.is_valid() and formset.is_valid(): group = form.cleaned_data.get('group') - is_approved = form.cleaned_data.get('approved', False) + if form.is_virtual(): + is_approved = True + else: + is_approved = form.cleaned_data.get('approved', False) meeting_type = form.cleaned_data.get('meeting_type') # pre create meeting @@ -1193,6 +1196,8 @@ def interim_request(request): if not is_approved: send_interim_approval_request(meetings=[meeting]) + elif 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 @@ -1222,6 +1227,8 @@ def interim_request(request): if not is_approved: send_interim_approval_request(meetings=series) + elif not has_role(request.user, 'Secretariat'): + send_interim_announcement_request(meeting=meeting) messages.success(request, 'Interim meeting request submitted') return redirect(upcoming) diff --git a/ietf/templates/meeting/interim_announcement_request.txt b/ietf/templates/meeting/interim_announcement_request.txt index fd87ff1ea..cbdb331ae 100644 --- a/ietf/templates/meeting/interim_announcement_request.txt +++ b/ietf/templates/meeting/interim_announcement_request.txt @@ -1,5 +1,5 @@ {% load ams_filters %}{% load ietf_filters %} -An interim meeting for {{ group.acronym }} has just been approved. +An interim meeting for {{ group.acronym }} has been approved or does not require approval and is ready for announcement. Use this link to officially announce the meeting: {{ announce_url }}