manager: hide weekend in monthly view when appropriate (#38687)

This commit is contained in:
Valentin Deniaud 2019-12-24 10:24:08 +01:00
parent 8d329609ea
commit ba94214d55
2 changed files with 46 additions and 3 deletions

View File

@ -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,
}

View File

@ -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')