Skip to content

Commit ec27968

Browse files
committed
Give secretariat the ability to cancel non-working group sessions. Fixes ietf-tools#2537. Commit ready for merge.
- Legacy-Id: 15328
1 parent c7a9c2f commit ec27968

6 files changed

Lines changed: 68 additions & 2 deletions

File tree

ietf/secr/meetings/tests.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,19 @@ def test_meetings_non_session_delete(self):
335335
self.assertRedirects(response, target)
336336
self.assertFalse(meeting.agenda.assignments.filter(timeslot=slot))
337337

338+
def test_meetings_non_session_cancel(self):
339+
meeting = make_meeting_test_data()
340+
slot = meeting.agenda.assignments.filter(timeslot__type='reg').first().timeslot
341+
url = reverse('ietf.secr.meetings.views.non_session_cancel', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.agenda.name,'slot_id':slot.id})
342+
redirect_url = reverse('ietf.secr.meetings.views.non_session', kwargs={'meeting_id':meeting.number,'schedule_name':meeting.agenda.name})
343+
self.client.login(username="secretary", password="secretary+password")
344+
response = self.client.get(url)
345+
self.assertEqual(response.status_code, 200)
346+
response = self.client.post(url, {'post':'yes'})
347+
self.assertRedirects(response, redirect_url)
348+
session = slot.sessionassignments.filter(schedule=meeting.agenda).first().session
349+
self.assertEqual(session.status_id, 'canceled')
350+
338351
def test_meetings_select_group(self):
339352
make_meeting_test_data()
340353
url = reverse('ietf.secr.meetings.views.select_group',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})

ietf/secr/meetings/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
url(r'^(?P<meeting_id>\d{1,6})/notifications/$', views.notifications),
1515
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/$', views.select),
1616
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/$', views.non_session),
17+
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/cancel/(?P<slot_id>\d{1,6})/$', views.non_session_cancel),
1718
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/edit/(?P<slot_id>\d{1,6})/$', views.non_session_edit),
1819
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/delete/(?P<slot_id>\d{1,6})/$', views.non_session_delete),
1920
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/rooms/$', views.rooms),

ietf/secr/meetings/views.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,25 @@ def non_session(request, meeting_id, schedule_name):
491491
'schedule': schedule},
492492
)
493493

494+
@role_required('Secretariat')
495+
def non_session_cancel(request, meeting_id, schedule_name, slot_id):
496+
'''
497+
This function cancels the non-session TimeSlot. Check for uploaded
498+
material first. SchedTimeSessAssignment objects get canceled as well.
499+
'''
500+
slot = get_object_or_404(TimeSlot, id=slot_id)
501+
meeting = get_object_or_404(Meeting, number=meeting_id)
502+
schedule = get_object_or_404(Schedule, meeting=meeting, name=schedule_name)
503+
504+
if request.method == 'POST' and request.POST['post'] == 'yes':
505+
assignments = slot.sessionassignments.filter(schedule=schedule)
506+
Session.objects.filter(pk__in=[x.session.pk for x in assignments]).update(status_id='canceled')
507+
508+
messages.success(request, 'The session was canceled successfully')
509+
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
510+
511+
return render(request, 'confirm_cancel.html', {'object': slot})
512+
494513
@role_required('Secretariat')
495514
def non_session_delete(request, meeting_id, schedule_name, slot_id):
496515
'''

ietf/secr/static/secr/css/custom.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,11 @@ tr.break td {
490490
border-top: 2px solid black;
491491
}
492492

493+
tr.canceled {
494+
background-color: #e12817;
495+
color: white;
496+
}
497+
493498
#id_schedule_selector {
494499
display: inline;
495500
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{% extends "base_site.html" %}
2+
{% load staticfiles %}
3+
4+
{% block title %}Confirm Cancel{% endblock %}
5+
6+
7+
{% block content %}
8+
9+
<div class="module draft-container">
10+
<h2>Confirm Cancel</h2>
11+
<h3>Are you sure?</h3>
12+
<p>You are about to cancel: {{ object }}</p>
13+
{% if extra %}<p>{{ extra }}</p>{% endif %}
14+
15+
<form action="" method="post">{% csrf_token %}
16+
<div>
17+
<p>
18+
<input type="hidden" name="post" value="yes">
19+
<input type="submit" value="Yes, I'm sure">
20+
<a href="#" onclick="history.go(-1);return false;" class="button cancel-link">Take me back</a>
21+
</p>
22+
</div>
23+
</form>
24+
</div> <!-- module -->
25+
26+
{% endblock %}

ietf/secr/templates/meetings/non_session.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<h2>TimeSlots</h2>
77

88
{% if slots %}
9-
<table class="full-width">
9+
<table id="nonsessions" class="full-width">
1010
<thead>
1111
<tr>
1212
<th>Day</th>
@@ -19,11 +19,12 @@ <h2>TimeSlots</h2>
1919
<th>Type</th>
2020
<th></th>
2121
<th></th>
22+
<th></th>
2223
</tr>
2324
</thead>
2425
<tbody>
2526
{% for item in slots %}
26-
<tr class="{% cycle row1 row2 %}{% ifchanged item.type %} break{% endifchanged %}">
27+
<tr class="{% cycle row1 row2 %}{% ifchanged item.type %} break{% endifchanged %}{% if item.session.status.slug == "canceled" %} canceled{% endif %}">
2728
<td>{{ item.time|date:"D" }}</td>
2829
<td>{{ item.time|date:"H:i" }}-{{ item.end_time|date:"H:i" }}</td>
2930
<td>{{ item.name }}</td>
@@ -33,6 +34,7 @@ <h2>TimeSlots</h2>
3334
<td>{{ item.show_location }}</td>
3435
<td>{{ item.type }}</td>
3536
<td><a href="{% url "ietf.secr.meetings.views.non_session_edit" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">Edit</a></td>
37+
<td><a href="{% url "ietf.secr.meetings.views.non_session_cancel" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">Cancel</a></td>
3638
<td><a href="{% url "ietf.secr.meetings.views.non_session_delete" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">Delete</a></td>
3739
</tr>
3840
{% endfor %}

0 commit comments

Comments
 (0)