Astreinte : une ligne en cours de saisie survit à l'auto-enregistrement
Un début sans fin (ou l'inverse) était effacé par la sauvegarde
automatique pendant la frappe. La ligne est désormais conservée,
réaffichée, et ignorée des calculs (décompte, repos) tant que la paire
n'est pas complète. Le bloc dépliant reste ouvert pendant tout le cycle
HTMX (restauration aussi après le settle).
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
This commit is contained in:
@ -873,14 +873,17 @@ def save_pointage(
|
||||
p_by_date = {p["date"]: p for p in raw}
|
||||
# Les événements d'astreinte ne sont affichés (donc postés) que les jours
|
||||
# qualifiés (astreinte ou lendemain) ; ailleurs on conserve ceux déjà saisis
|
||||
# au lieu de les écraser à vide. Les paires début/fin invalides sont ignorées.
|
||||
# au lieu de les écraser à vide. Une ligne en cours de saisie (début sans
|
||||
# fin, ou l'inverse) est conservée telle quelle : l'auto-enregistrement ne
|
||||
# doit pas effacer une saisie à moitié tapée — les calculs (décompte, repos)
|
||||
# ignorent les événements incomplets tant que la paire n'est pas complète.
|
||||
if jour_astreinte_qualifie(date, set(load_astreintes_effectives(user_id))):
|
||||
events = []
|
||||
# Les descriptions sont optionnelles : sans elles (POST programmatique),
|
||||
# zip s'arrêterait à la liste la plus courte et perdrait les événements.
|
||||
for i, (deb, fin) in enumerate(zip(astreinte_debut, astreinte_fin)):
|
||||
deb, fin = clean(deb), clean(fin)
|
||||
if deb and fin:
|
||||
if deb or fin:
|
||||
desc = astreinte_desc[i] if i < len(astreinte_desc) else ""
|
||||
events.append({"debut": deb, "fin": fin,
|
||||
"desc": (desc or "").strip()[:200] or None})
|
||||
|
||||
Reference in New Issue
Block a user