From d63a039bf23e0a1fd933f607aa4ad472fca4a9e9 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Tue, 24 Dec 2019 12:16:16 +0100 Subject: [PATCH] manager: prevent emtpy first row in monthly view (#38700) It could occur when weekend was hidden. --- chrono/manager/views.py | 6 +++++- tests/test_manager.py | 12 ++++++++++++ tox.ini | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/chrono/manager/views.py b/chrono/manager/views.py index 495d65e3..3a695914 100644 --- a/chrono/manager/views.py +++ b/chrono/manager/views.py @@ -411,6 +411,10 @@ class AgendaMonthView(AgendaDateView, MonthArchiveView): hide_sunday = not timeperiods.filter(weekday=6).exists() hide_weekend = hide_sunday and not timeperiods.filter(weekday=5).exists() + # avoid displaying empty first week + first_week_offset = int( + (hide_sunday and self.date.weekday() == 6) or (hide_weekend and self.date.weekday() == 5) + ) first_week_number = self.date.isocalendar()[1] last_month_day = self.get_next_month(self.date.date()) - datetime.timedelta(days=1) @@ -419,7 +423,7 @@ class AgendaMonthView(AgendaDateView, MonthArchiveView): if last_week_number < first_week_number: # new year last_week_number = 53 - for week_number in range(first_week_number, last_week_number + 1): + for week_number in range(first_week_number + first_week_offset, last_week_number + 1): yield self.get_week_timetable_infos( week_number - first_week_number, timeperiods, diff --git a/tests/test_manager.py b/tests/test_manager.py index ed681085..7d1120c1 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -1788,6 +1788,17 @@ def test_agenda_month_view_weekend(app, admin_user, manager_user, api_user): resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.id, year, month)) assert not 'Sunday' in resp.text assert not 'Saturday' in resp.text + # No Monday on first row since month starts a Tuesday + assert len(resp.pyquery.find('tbody tr:first th.weekday:empty')) == 1 + + # When weekend is hidden, do not display an empty first week + month, year = 12, 2019 # month starts a Sunday + resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.id, year, month)) + assert len(resp.pyquery.find('tbody tr:first th.weekday:empty')) == 0 + + month, year = 6, 2019 # month starts a Saturday + resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.id, year, month)) + assert len(resp.pyquery.find('tbody tr:first th.weekday:empty')) == 0 saturday = 5 timeperiod_sat = TimePeriod.objects.create( @@ -1796,6 +1807,7 @@ def test_agenda_month_view_weekend(app, admin_user, manager_user, api_user): resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.id, year, month)) assert not 'Sunday' in resp.text assert 'Saturday' in resp.text + assert len(resp.pyquery.find('tbody tr:first th.weekday:empty')) == 5 sunday = 6 timeperiod = TimePeriod.objects.create( diff --git a/tox.ini b/tox.ini index d0f3f7e3..a5fbfb3a 100644 --- a/tox.ini +++ b/tox.ini @@ -21,6 +21,7 @@ deps = pylint-django<0.8.1 django-webtest pytz + pyquery django111: django-mellon>=1.2.35,!=1.6 django22: django-mellon>=1.6.1 pytest-freezegun