templatetags: manage 24h/24 slots (#48929)

This commit is contained in:
Nicolas Roche 2020-12-05 23:14:42 +01:00
parent 3721cc8faa
commit d9f2edd994
3 changed files with 28 additions and 7 deletions

View File

@ -107,7 +107,8 @@ def get_slot(day_number, time_table, 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:
if (end_hour < start_hour or end_hour == start_hour and end_minute < start_minute
or end_hour == start_hour == 0 and end_minute == start_minute == 0): # 24h/24
end_day_number += 1
end = openinghours_to_datetime(end_day_number, end_hour, end_minute, base_datetime)
@ -269,7 +270,6 @@ def get_slots_from_mairie_format(data, base_datetime):
for weekday in days_list:
day_number = EN_ABBREV_WEEKDAYS_LIST.index(weekday)
timeslot = get_slot(day_number, time_table, base_datetime)
# add to slots the opening hours in chronological order beginning from today
slots.append(timeslot)
@ -409,15 +409,21 @@ def as_opening_hours_badge(data):
day_label = u'demain'
else:
day_label = FR_WEEKDAYS[slots[0].start.weekday()]
time = format_time(slots[0].start.hour, slots[0].start.minute)
label = u'%s %s à %s' % (verb, day_label, time)
if slots[0].start.strftime("%H:%M") == slots[0].end.strftime("%H:%M") == '00:00':
label = u'%s %s 24h/24' % (verb, day_label)
else:
time = format_time(slots[0].start.hour, slots[0].start.minute)
label = u'%s %s à %s' % (verb, day_label, time)
elif base_datetime < slots[0].end:
if (slots[0].end - base_datetime).seconds < 3600:
klass = 'soon-to-be-closed'
else:
klass = 'open'
time = format_time(slots[0].end.hour, slots[0].end.minute)
label = u"Ouvert jusqu'à %s" % time
if slots[0].start.strftime("%H:%M") == slots[0].end.strftime("%H:%M") == '00:00':
label = u"Ouvert 24h/24"
else:
time = format_time(slots[0].end.hour, slots[0].end.minute)
label = u"Ouvert jusqu'à %s" % time
return mark_safe(u'<div class="badge %s"><span>%s</span></div>' % (klass, label))

View File

@ -170,6 +170,7 @@ def test_mairie_holiday():
@pytest.mark.freeze_time("2018-03-05 00:30:00")
@pytest.mark.parametrize('day, hours, badge, text', [
('mercredi_pm', '14h30-17h45', 'closed', 'Réouvre mercredi à 14h30'),
('mercredi_pm', '00h00-24h00', 'closed', 'Réouvre mercredi 24h/24'),
('mardi_pm', '14h30-17h45', 'closed', 'Réouvre demain à 14h30'),
('mardi_pm', '14h30-00h15', 'closed', 'Réouvre demain à 14h30'),
('lundi_pm', '14h30-17h45', 'closed', 'Réouvre à 14h30'),
@ -177,6 +178,7 @@ def test_mairie_holiday():
('lundi_am', '00h00-00h45', 'soon-to-be-closed', "Ouvert jusqu'à 0h45"),
('dimanche_pm', '20h30-00h45', 'soon-to-be-closed', "Ouvert jusqu'à 0h45"),
('lundi_am', '00h15-24h00', 'open', "Ouvert jusqu'à minuit"),
('lundi_am', '00h00-24h00', 'open', "Ouvert 24h/24"),
])
def test_mdr_format(day, hours, badge, text):
geojson = """
@ -193,6 +195,7 @@ def test_mdr_format(day, hours, badge, text):
@pytest.mark.freeze_time("2018-03-05 00:30:00")
@pytest.mark.parametrize('openinghour, badge, text', [
('We 14:30-17:45', 'closed', 'Réouvre mercredi à 14h30'),
('We 00:00-24:00', 'closed', 'Réouvre mercredi 24h/24'),
('Tu 14:30-17:45', 'closed', 'Réouvre demain à 14h30'),
('Tu 14:30-00:15', 'closed', 'Réouvre demain à 14h30'),
('Mo 14:30-17:45', 'closed', 'Réouvre à 14h30'),
@ -200,6 +203,7 @@ def test_mdr_format(day, hours, badge, text):
('Mo 00:00-00:45', 'soon-to-be-closed', "Ouvert jusqu'à 0h45"),
('Su 20:30-00:45', 'soon-to-be-closed', "Ouvert jusqu'à 0h45"),
('Mo 00:15-24:00', 'open', "Ouvert jusqu'à minuit"),
('Mo 00:00-24:00', 'open', "Ouvert 24h/24"),
])
def test_mairie_format_openinghours(openinghour, badge, text):
geojson = """
@ -216,6 +220,7 @@ def test_mairie_format_openinghours(openinghour, badge, text):
@pytest.mark.freeze_time("2018-03-05 00:30:00")
@pytest.mark.parametrize('day, opens, closes, badge, text', [
('Wednesday', '14:30', '17:45', 'closed', 'Réouvre mercredi à 14h30'),
('Wednesday', '00:00', '24:00', 'closed', 'Réouvre mercredi 24h/24'),
('Tuesday', '14:30', '17:45', 'closed', 'Réouvre demain à 14h30'),
('Tuesday', '14:30', '00:15', 'closed', 'Réouvre demain à 14h30'),
('Monday', '14:30', '17:45', 'closed', 'Réouvre à 14h30'),
@ -223,6 +228,7 @@ def test_mairie_format_openinghours(openinghour, badge, text):
('Monday', '00:00', '00:45', 'soon-to-be-closed', "Ouvert jusqu'à 0h45"),
('Sunday', '20:30', '00:45', 'soon-to-be-closed', "Ouvert jusqu'à 0h45"),
('Monday', '00:15', '24:00', 'open', "Ouvert jusqu'à minuit"),
('Monday', '00:00', '24:00', 'open', "Ouvert 24h/24"),
])
def test_mairie_format_openinghoursspecification(day, opens, closes, badge, text):
geojson = """

View File

@ -81,7 +81,8 @@ def test_mairie_format_openinghours():
"We 10:30-18:30",
"Th 22:30-00:30",
"Fr 07:30-07:00",
"Sa 21:00-24:00"
"Sa 21:00-24:00",
"Su 00:00-24:00"
]}}
"""
hours = get_mairie_opening_hours(json.loads(geojson))
@ -92,6 +93,7 @@ def test_mairie_format_openinghours():
('jeudi', {'am': None, 'pm': '22h30-00h30'}),
('vendredi', {'am': '07h30-07h00', 'pm': ''}),
('samedi', {'am': None, 'pm': '21h00-24h00'}),
('dimanche', {'am': '00h00-24h00', 'pm': ''}),
]
@ -137,6 +139,12 @@ def test_mairie_format_openinghoursspecification():
"dayOfWeek": "http:\/\/schema.org\/Saturday",
"validFrom": "2018-01-01T00:00:00+01:00",
"validThrough": "2018-06-30T23:59:59+02:00"
}, {
"opens": "00:00",
"closes": "24:00",
"dayOfWeek": "http:\/\/schema.org\/Sunday",
"validFrom": "2018-01-01T00:00:00+01:00",
"validThrough": "2018-06-30T23:59:59+02:00"
}]}}
"""
hours = get_mairie_opening_hours(json.loads(geojson))
@ -147,4 +155,5 @@ def test_mairie_format_openinghoursspecification():
('jeudi', {'am': None, 'pm': '22h30-00h30'}),
('vendredi', {'am': '07h30-07h00', 'pm': ''}),
('samedi', {'am': None, 'pm': '21h00-24h00'}),
('dimanche', {'am': '00h00-24h00', 'pm': ''}),
]