manager: hide weekend in monthly view when appropriate (#38687)
This commit is contained in:
parent
8d329609ea
commit
ba94214d55
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue