diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index 527616ed9..25867fed2 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -634,6 +634,23 @@ class InterimTests(TestCase): self.assertEqual(r.status_code, 200) self.assertTrue(meeting.number in r.content) + def test_interim_skip_announcement(self): + make_meeting_test_data() + group = Group.objects.get(acronym='irg') + date = datetime.date.today() + datetime.timedelta(days=30) + meeting = make_interim_meeting(group=group, date=date, status='scheda') + url = urlreverse("ietf.meeting.views.interim_skip_announcement", kwargs={'number': meeting.number}) + login_testing_unauthorized(self, "secretary", url) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + + # check post + len_before = len(outbox) + r = self.client.post(url) + self.assertRedirects(r, urlreverse('ietf.meeting.views.interim_announce')) + self.assertEqual(meeting.session_set.first().status.slug,'sched') + self.assertEqual(len(outbox), len_before) + def test_interim_send_announcement(self): make_meeting_test_data() meeting = Meeting.objects.filter(type='interim', session__status='apprw', session__group__acronym='mars').first() @@ -1071,6 +1088,29 @@ class InterimTests(TestCase): r = self.client.get(url) self.assertEqual(r.status_code, 200) + def test_interim_request_details_skip_announcement(self): + make_meeting_test_data() + date = datetime.date.today() + datetime.timedelta(days=30) + self.client.login(username="secretary", password="secretary+password") + + # ensure skip announcement option exists for Research Group + group = Group.objects.get(acronym='irg') + meeting = make_interim_meeting(group=group, date=date, status='scheda') + url = urlreverse('ietf.meeting.views.interim_request_details',kwargs={'number':meeting.number}) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + q = PyQuery(r.content) + self.assertEqual(len(q("a.btn:contains('Skip Announcement')")),1) + + # ensure skip announcement option does not exist for IETF Working Group + group = Group.objects.get(acronym='mars') + meeting = make_interim_meeting(group=group, date=date, status='scheda') + url = urlreverse('ietf.meeting.views.interim_request_details',kwargs={'number':meeting.number}) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + q = PyQuery(r.content) + self.assertEqual(len(q("a.btn:contains('Skip Announcement')")),0) + def test_interim_request_disapprove(self): make_meeting_test_data() meeting = Meeting.objects.filter(type='interim',session__status='apprw',session__group__acronym='mars').first() diff --git a/ietf/meeting/urls.py b/ietf/meeting/urls.py index ef30e5891..564e0f4e9 100644 --- a/ietf/meeting/urls.py +++ b/ietf/meeting/urls.py @@ -89,6 +89,7 @@ urlpatterns = [ url(r'^ajax/get-utc/?$', views.ajax_get_utc), url(r'^interim/announce/?$', views.interim_announce), url(r'^interim/announce/(?P[A-Za-z0-9._+-]+)/?$', views.interim_send_announcement), + url(r'^interim/skip_announce/(?P[A-Za-z0-9._+-]+)/?$', views.interim_skip_announcement), url(r'^interim/request/?$', views.interim_request), url(r'^interim/request/(?P[A-Za-z0-9._+-]+)/?$', views.interim_request_details), url(r'^interim/request/(?P[A-Za-z0-9._+-]+)/edit/?$', views.interim_request_edit), diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index c4179297a..166191baa 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -1670,6 +1670,23 @@ def interim_send_announcement(request, number): 'form': form}) +@role_required('Secretariat',) +def interim_skip_announcement(request, number): + '''View to change status of interim meeting to Scheduled without + first announcing. Only applicable to IRTF groups. + ''' + meeting = get_object_or_404(Meeting, number=number) + group = meeting.session_set.first().group + + if request.method == 'POST': + meeting.session_set.update(status_id='sched') + messages.success(request, 'Interim meeting scheduled. No announcement sent.') + return redirect(interim_announce) + + return render(request, "meeting/interim_skip_announce.html", { + 'meeting': meeting}) + + @role_required('Area Director', 'Secretariat', 'IRTF Chair', 'WG Chair', 'RG Chair') def interim_pending(request): diff --git a/ietf/templates/meeting/interim_request_details.html b/ietf/templates/meeting/interim_request_details.html index 15c15e295..0add0c538 100644 --- a/ietf/templates/meeting/interim_request_details.html +++ b/ietf/templates/meeting/interim_request_details.html @@ -53,6 +53,9 @@ {% if user|has_role:"Secretariat" and sessions.0.status.slug == 'scheda' %} Announce {% endif %} + {% if user|has_role:"Secretariat" and sessions.0.status.slug == 'scheda' and sessions.0.group.type.slug == 'rg' %} + Skip Announcement + {% endif %} {% if can_edit %} {% if sessions.0.status.slug == 'apprw' or sessions.0.status.slug == 'scheda' or sessions.0.status.slug == 'sched' %} Cancel Meeting