[31988f42] Feat: Added lunch break (12:00-12:30) and 2026 Bavarian holidays to slot finding logic

This commit is contained in:
2026-03-09 10:45:57 +00:00
parent ca4967fc0a
commit 92c491a548

View File

@@ -102,8 +102,25 @@ def find_slots(start, view, interval):
"""
Parses availability string: '0'=Free, '2'=Busy.
Returns 2 free slots (start times) within business hours (09:00 - 16:30),
excluding weekends (Sat/Sun), with approx. 3 hours distance between them.
excluding weekends (Sat/Sun), lunch breaks, and holidays.
"""
# Hardcoded Bavarian Holidays for 2026 (Common in Munich)
HOLIDAYS_2026 = {
(1, 1), # Neujahr
(1, 6), # Heilige Drei Könige
(4, 3), # Karfreitag
(4, 6), # Ostermontag
(5, 1), # Maifeiertag
(5, 14), # Christi Himmelfahrt
(5, 25), # Pfingstmontag
(6, 4), # Fronleichnam
(8, 15), # Mariä Himmelfahrt
(10, 3), # Tag der Deutschen Einheit
(11, 1), # Allerheiligen
(12, 25), # 1. Weihnachtstag
(12, 26) # 2. Weihnachtstag
}
slots = []
first_slot = None
@@ -116,7 +133,15 @@ def find_slots(start, view, interval):
# 1. Mon-Fri only
# 2. Business hours (09:00 - 16:30)
# 3. Future only
if slot_time.weekday() < 5 and (9 <= slot_time.hour < 17) and slot_time > datetime.now(TZ_BERLIN):
# 4. No Holidays (Bavaria)
# 5. Lunch break (12:00 - 12:30)
is_holiday = (slot_time.month, slot_time.day) in HOLIDAYS_2026
is_weekend = slot_time.weekday() >= 5
is_lunch = 12 == slot_time.hour and slot_time.minute < 30
is_business_hours = 9 <= slot_time.hour < 17
if not is_weekend and not is_holiday and not is_lunch and is_business_hours and slot_time > datetime.now(TZ_BERLIN):
# Max start time 16:30
if slot_time.hour == 16 and slot_time.minute > 30:
continue