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 %}
-
-
- {% for day, day_data in days.items %}
-
-
- {{ day|date:"l" }}
-
-
- {{ day|date:"N j, Y" }}
-
-
- {% for rgroup in day_data %}
-
-
-
+ {% endif %}