templatetags: simplify start/end date computation on opening_hours (#48919)

This commit is contained in:
Nicolas Roche 2020-12-05 20:29:45 +01:00
parent e9f57108f8
commit 33e59ba5ee
1 changed files with 16 additions and 14 deletions

View File

@ -274,23 +274,25 @@ def get_slots_from_mairie_format(data, base_datetime):
for days_list, time_table in parse_opening_hours_data(data):
for weekday in days_list:
day_number = EN_ABBREV_WEEKDAYS_LIST.index(weekday)
start = openinghours_to_datetime(
day_number, int(time_table['start_hour']), int(time_table['start_minute']), base_datetime)
end = openinghours_to_datetime(
day_number, int(time_table['end_hour']), int(time_table['end_minute']), base_datetime)
start_hour = int(time_table['start_hour'])
start_minute = int(time_table['start_minute'])
end_hour = int(time_table['end_hour'])
end_minute = int(time_table['end_minute'])
start = openinghours_to_datetime(day_number, start_hour, start_minute, base_datetime)
# hours may belongs on next day
end_day_number = day_number
if end_hour < start_hour or end_hour == start_hour and end_minute < start_minute:
end_day_number += 1
end = openinghours_to_datetime(end_day_number, end_hour, end_minute, base_datetime)
if end < start:
tomorrow = day_number + 1
end = openinghours_to_datetime(
tomorrow, int(time_table['end_hour']), int(time_table['end_minute']), base_datetime)
if end < start:
# end time may be find this week whereas start time is picked on next week,
# this occure if we are now past 24:00, on next day.
# openinghours_to_datetime (return the next date and time after now())
# can't return a coherent start time.
# in this case we thrink the slot to the next day part.
start = openinghours_to_datetime(tomorrow, 0, 0, base_datetime)
# end time may be find this week whereas start time is picked on next week,
# this occure if we are now past 24:00, on next day.
# Compute start time from yesterday
yesterday = base_datetime - datetime.timedelta(days=1)
start = openinghours_to_datetime(day_number, start_hour, start_minute, yesterday)
timeslot = TimeSlot(start, end)
# add to slots the opening hours in chronological order beginning from today