diff --git a/chrono/manager/views.py b/chrono/manager/views.py index 4ffdc76c..495d65e3 100644 --- a/chrono/manager/views.py +++ b/chrono/manager/views.py @@ -409,6 +409,9 @@ class AgendaMonthView(AgendaDateView, MonthArchiveView): if not timeperiods: return + hide_sunday = not timeperiods.filter(weekday=6).exists() + hide_weekend = hide_sunday and not timeperiods.filter(weekday=5).exists() + first_week_number = self.date.isocalendar()[1] last_month_day = self.get_next_month(self.date.date()) - datetime.timedelta(days=1) last_week_number = last_month_day.isocalendar()[1] @@ -417,9 +420,13 @@ class AgendaMonthView(AgendaDateView, MonthArchiveView): last_week_number = 53 for week_number in range(first_week_number, last_week_number + 1): - yield self.get_week_timetable_infos(week_number - first_week_number, timeperiods) + yield self.get_week_timetable_infos( + week_number - first_week_number, + timeperiods, + week_end_offset=int(hide_sunday) + int(hide_weekend), + ) - def get_week_timetable_infos(self, week_index, timeperiods): + def get_week_timetable_infos(self, week_index, timeperiods, week_end_offset=0): date = self.date + datetime.timedelta(week_index * 7) year, week_number, dow = date.isocalendar() @@ -440,7 +447,7 @@ class AgendaMonthView(AgendaDateView, MonthArchiveView): return { 'days': [ self.get_day_timetable_infos(start_date + datetime.timedelta(i), interval) - for i in range(1, 8) + for i in range(1, 8 - week_end_offset) ], 'periods': periods, } diff --git a/tests/test_manager.py b/tests/test_manager.py index 4a326709..ed681085 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -1775,6 +1775,42 @@ def test_agenda_month_view(app, admin_user, manager_user, api_user): assert not 'No opening hours this month.' in resp.text +def test_agenda_month_view_weekend(app, admin_user, manager_user, api_user): + agenda = Agenda.objects.create(label='Passeports', kind='meetings') + desk = Desk.objects.create(agenda=agenda, label='Desk A') + month, year = 1, 2019 + monday = 0 + timeperiod = TimePeriod.objects.create( + desk=desk, weekday=monday, start_time=datetime.time(10, 0), end_time=datetime.time(18, 0) + ) + + login(app) + resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.id, year, month)) + assert not 'Sunday' in resp.text + assert not 'Saturday' in resp.text + + saturday = 5 + timeperiod_sat = TimePeriod.objects.create( + desk=desk, weekday=saturday, start_time=datetime.time(10, 0), end_time=datetime.time(18, 0) + ) + resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.id, year, month)) + assert not 'Sunday' in resp.text + assert 'Saturday' in resp.text + + sunday = 6 + timeperiod = TimePeriod.objects.create( + desk=desk, weekday=sunday, start_time=datetime.time(10, 0), end_time=datetime.time(18, 0) + ) + resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.id, year, month)) + assert 'Sunday' in resp.text + assert 'Saturday' in resp.text + + timeperiod_sat.delete() + resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.id, year, month)) + assert 'Sunday' in resp.text + assert 'Saturday' in resp.text + + def test_agenda_month_view_dst_change(app, admin_user, manager_user, api_user): agenda = Agenda.objects.create(label='Passeports', kind='meetings') desk = Desk.objects.create(agenda=agenda, label='Desk A')