Merged in [12330] and [12331] from rcross@amsl.com:

Add the ability for the Secretariat to skip the announcement when scheduling an IRTF interim meeting. Fixes #2015.
 - Legacy-Id: 12344
Note: SVN reference [12330] has been migrated to Git commit d7c1fddb32

Note: SVN reference [12331] has been migrated to Git commit b04d07e5aa
This commit is contained in:
Henrik Levkowetz 2016-11-14 05:02:10 +00:00
commit aa4a46086a
5 changed files with 83 additions and 0 deletions

View file

@ -645,6 +645,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()
@ -1095,6 +1112,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()

View file

@ -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<number>[A-Za-z0-9._+-]+)/?$', views.interim_send_announcement),
url(r'^interim/skip_announce/(?P<number>[A-Za-z0-9._+-]+)/?$', views.interim_skip_announcement),
url(r'^interim/request/?$', views.interim_request),
url(r'^interim/request/(?P<number>[A-Za-z0-9._+-]+)/?$', views.interim_request_details),
url(r'^interim/request/(?P<number>[A-Za-z0-9._+-]+)/edit/?$', views.interim_request_edit),

View file

@ -1683,6 +1683,22 @@ 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)
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):

View file

@ -53,6 +53,9 @@
{% if user|has_role:"Secretariat" and sessions.0.status.slug == 'scheda' %}
<a class="btn btn-default" href="{% url 'ietf.meeting.views.interim_send_announcement' number=meeting.number %}">Announce</a>
{% endif %}
{% if user|has_role:"Secretariat" and sessions.0.status.slug == 'scheda' and sessions.0.group.type.slug == 'rg' %}
<a class="btn btn-default" href="{% url 'ietf.meeting.views.interim_skip_announcement' number=meeting.number %}">Skip Announcement</a>
{% endif %}
{% if can_edit %}
{% if sessions.0.status.slug == 'apprw' or sessions.0.status.slug == 'scheda' or sessions.0.status.slug == 'sched' %}
<a class="btn btn-default" href="{% url 'ietf.meeting.views.interim_request_cancel' number=meeting.number %}">Cancel Meeting</a>

View file

@ -0,0 +1,23 @@
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load staticfiles bootstrap3 widget_tweaks %}
{% block title %}Interim Meetings Skip Announcement{% endblock %}
{% block content %}
{% origin %}
<h1>Interim Meetings Skip Announcement</h1>
<p>You are requesting to complete scheduling of the interim meeting for {{ meeting.session_set.first.group.acronym|upper }} on {{ meeting.date }} without sending an announcemnt.</p>
<form action="" method="post">{% csrf_token %}
<input class="btn btn btn-danger" type="submit" value="Continue">
<a class="btn btn-default" href="{% url 'ietf.meeting.views.interim_announce' %}">Cancel</a>
</form>
{% endblock %}
{% block js %}
{% endblock %}