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
This commit is contained in:
Ryan Cross 2016-08-15 21:04:31 +00:00
parent 47c7c49e37
commit a13b751e1a
5 changed files with 27 additions and 9 deletions

View file

@ -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"):

View file

@ -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()

View file

@ -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()

View file

@ -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)

View file

@ -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 }}