"""Règles communes liées aux dates de réunion.""" from datetime import date as dt_date from calendar import monthrange JOURS_SEMAINE = { "lundi": 0, "mardi": 1, "mercredi": 2, "jeudi": 3, "vendredi": 4, "samedi": 5, "dimanche": 6, } def jour_reunion_attendu(groupe) -> int | None: if not getattr(groupe, "jour_reunion", None): return None return JOURS_SEMAINE.get(groupe.jour_reunion.lower()) def date_correspond_au_jour_reunion(groupe, date_reunion: dt_date) -> bool: jour = jour_reunion_attendu(groupe) return True if jour is None else date_reunion.weekday() == jour def date_assemblee_affaires_du_mois(annee: int, mois: int, jour_cible: int, ordre: str) -> dt_date: dates = [] for jour in range(1, monthrange(annee, mois)[1] + 1): date = dt_date(annee, mois, jour) if date.weekday() == jour_cible: dates.append(date) if not dates: return dt_date(annee, mois, 1) if ordre == "derniere": return dates[-1] index = {"premiere": 0, "deuxieme": 1, "troisieme": 2, "quatrieme": 3}.get(ordre, 0) return dates[index] if index < len(dates) else dates[-1]