Respecte la pause déjeuner dans les préconisations et ajoute les heures visées

La cible matin ne dépasse plus jamais matin_fin, garantissant la pause de
midi ; le nominal qui déborde bascule sur l'après-midi du même jour.
Ajoute deux réglages optionnels par utilisateur (arrivée visée le matin,
départ visé le soir) qui orientent la répartition du rattrapage en deux
passes : d'abord dans le cadre visé, puis au-delà si nécessaire.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Antoine
2026-07-18 11:57:46 +02:00
parent 45790b2b95
commit d3c991f8d6
4 changed files with 161 additions and 38 deletions

View File

@ -599,6 +599,7 @@ def settings_plages_save(
matin_debut: str = Form(""), matin_fin: str = Form(""),
aprem_debut: str = Form(""), aprem_fin: str = Form(""),
pause_dejeuner_fin: str = Form(""),
arrivee_visee: str = Form(""), depart_vise: str = Form(""),
):
user_id = _get_user(request)
if not user_id:
@ -608,13 +609,20 @@ def settings_plages_save(
"matin_debut": matin_debut, "matin_fin": matin_fin,
"aprem_debut": aprem_debut, "aprem_fin": aprem_fin,
"pause_dejeuner_fin": pause_dejeuner_fin,
# Heures visées, optionnelles (vide = comportement par défaut)
"arrivee_visee": arrivee_visee, "depart_vise": depart_vise,
}
if not all(_HHMM_RE.match(v) for v in fields.values()):
optionnels = {"arrivee_visee", "depart_vise"}
if not all(_HHMM_RE.match(v) for k, v in fields.items() if v or k not in optionnels):
logger.warning("réglages plages rejetés (format invalide): user_id=%r valeurs=%r", user_id, fields)
return RedirectResponse("/settings?plages_error=1", status_code=303)
if not (fields["matin_debut"] < fields["matin_fin"] < fields["aprem_debut"] < fields["aprem_fin"]):
logger.warning("réglages plages rejetés (ordre invalide): user_id=%r valeurs=%r", user_id, fields)
return RedirectResponse("/settings?plages_error=1", status_code=303)
if (fields["arrivee_visee"] and fields["arrivee_visee"] >= fields["matin_fin"]) or \
(fields["depart_vise"] and fields["depart_vise"] < fields["aprem_fin"]):
logger.warning("réglages plages rejetés (heures visées incohérentes): user_id=%r valeurs=%r", user_id, fields)
return RedirectResponse("/settings?plages_error=1", status_code=303)
logger.info("réglages plages mis à jour: user_id=%r plages=%r", user_id, fields)
save_plages(user_id, fields)