From 64e904804d247c6ddcbcbb5dcd7175377825d02f Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Fri, 14 Jan 2022 15:48:03 +0000 Subject: [PATCH] Link to the timeslot editor when meeting has no timeslots. Fixes #3511. Commit ready for merge. - Legacy-Id: 19841 --- ietf/meeting/tests_views.py | 17 ++ ietf/meeting/views.py | 4 +- .../meeting/edit_meeting_schedule.html | 172 +++++++++--------- 3 files changed, 110 insertions(+), 83 deletions(-) diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index 8df9d7a68..7d0e120bd 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -1677,6 +1677,23 @@ class EditMeetingScheduleTests(TestCase): self.assertEqual(r.status_code, 200) self.assertTrue(self._decode_json_response(r)['success']) + def test_editor_with_no_timeslots(self): + """Schedule editor should not crash when there are no timeslots""" + meeting = MeetingFactory( + type_id='ietf', + date=datetime.date.today() + datetime.timedelta(days=7), + populate_schedule=False, + ) + meeting.schedule = ScheduleFactory(meeting=meeting) + meeting.save() + SessionFactory(meeting=meeting, add_to_schedule=False) + self.assertEqual(meeting.timeslot_set.count(), 0, 'Test problem - meeting should not have any timeslots') + url = urlreverse('ietf.meeting.views.edit_meeting_schedule', kwargs={'num': meeting.number}) + self.assertTrue(self.client.login(username='secretary', password='secretary+password')) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + self.assertContains(r, 'No timeslots exist') + self.assertContains(r, urlreverse('ietf.meeting.views.edit_timeslots', kwargs={'num': meeting.number})) class EditTimeslotsTests(TestCase): diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 1ab18f124..8e521e918 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -506,8 +506,8 @@ def edit_meeting_schedule(request, num=None, owner=None, name=None): min_duration = min(t.duration for t in timeslots_qs) max_duration = max(t.duration for t in timeslots_qs) else: - min_duration = 1 - max_duration = 2 + min_duration = datetime.timedelta(minutes=30) + max_duration = datetime.timedelta(minutes=120) def timedelta_to_css_ems(timedelta): # we scale the session and slots a bit according to their diff --git a/ietf/templates/meeting/edit_meeting_schedule.html b/ietf/templates/meeting/edit_meeting_schedule.html index 5d3c60271..7603244d1 100644 --- a/ietf/templates/meeting/edit_meeting_schedule.html +++ b/ietf/templates/meeting/edit_meeting_schedule.html @@ -75,96 +75,106 @@ {% endif %}

-
- - {# using the same markup in both room labels and the actual days ensures they are aligned #} -
- {% for day_data in days.values %} -
-
-  
-   -
- - {% for rgroup in day_data %} -
-
- {% for room_data in rgroup %}{% with room_data.room as room %} -
-
- {{ room.name }}
- {% if room.capacity %}{{ room.capacity }} {% endif %} -
-
- {% endwith %}{% endfor %} + {% if timeslot_groups|length == 0 %} +

+ No timeslots exist for this meeting yet. +

+

+ + Edit timeslots. + +

+ {% else %} +
+ {# using the same markup in both room labels and the actual days ensures they are aligned #} +
+ {% for day_data in days.values %} +
+
+  
+  
- {% endfor %} -
- {% endfor %} -
-
- {% for day, day_data in days.items %} -
-
- {{ day|date:"l" }} - -
- {{ day|date:"N j, Y" }} -
- - {% for rgroup in day_data %} -
-
- {# All rooms in a group have same timeslots; grab the first for the labels #} - {% for t in rgroup.0.timeslots %} -
- - {{ t.time|date:"G:i" }} - {{ t.end_time|date:"G:i" }} - - + {% for rgroup in day_data %} +
+
+ {% for room_data in rgroup %}{% with room_data.room as room %} +
+
+ {{ room.name }}
+ {% if room.capacity %}{{ room.capacity }} {% endif %} +
- {% endfor %} + {% endwith %}{% endfor %}
- {% for room_data in rgroup %}{% with room_data.room as room %} -
- {% for t in room_data.timeslots %} -
-
-
 {# blank div keeps time centered vertically #}
-
{{ t.time|date:"G:i" }} - {{ t.end_time|date:"G:i" }}
-
Past
-
+ {% endfor %} +
+ {% endfor %} +
-
- {% for assignment, session in t.session_assignments %} - {% include "meeting/edit_meeting_schedule_session.html" %} - {% endfor %} -
+
+ {% for day, day_data in days.items %} +
+
+ {{ day|date:"l" }} + +
+ {{ day|date:"N j, Y" }} +
+ + {% for rgroup in day_data %} +
+
+ {# All rooms in a group have same timeslots; grab the first for the labels #} + {% for t in rgroup.0.timeslots %} +
+ + {{ t.time|date:"G:i" }} - {{ t.end_time|date:"G:i" }} + +
{% endfor %}
- {% endwith %}{% endfor %} -
- {% endfor %} -
- {% endfor %} + {% for room_data in rgroup %}{% with room_data.room as room %} +
+ {% for t in room_data.timeslots %} +
+
+
 {# blank div keeps time centered vertically #}
+
{{ t.time|date:"G:i" }} - {{ t.end_time|date:"G:i" }}
+
Past
+
+ +
+ {% for assignment, session in t.session_assignments %} + {% include "meeting/edit_meeting_schedule_session.html" %} + {% endfor %} +
+
+ {% endfor %} +
+ {% endwith %}{% endfor %} +
+ {% endfor %} +
+ {% endfor %} +
-
+ {% endif %}