fix(heures) : n'enregistrer que les lignes modifiées (anti-écrasement concurrent) #31
Reference in New Issue
Block a user
Delete Branch "feature/SIRH-42-fix-l-ajout-des-heures"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problème
Sur l'écran Heures / Heures Conducteurs, l'enregistrement envoyait au bulk-upsert une entrée pour tous les employés visibles non verrouillés, à partir de l'état en mémoire de la grille. Le backend (
WorkHourBulkUpsertProcessor) traitant une entrée vide comme une suppression, un admin avec une grille périmée pouvait supprimer une ligne saisie entre-temps par un autre utilisateur.Scénario reproduit
ROLE_SELFest vide.Correctif (suivi des lignes modifiées)
hydrateRowscapture un instantanéloadedRowsde l'état chargé depuis le serveur.handleSavene transmet plus que les lignes dont l'état courant diffère de l'instantané.Symétrique dans
useHoursPage.tsetuseDriverHoursPage.ts.Limite connue
Pas de verrou optimiste backend : l'édition explicite d'une ligne sur données périmées peut toujours écraser une saisie concurrente sur cette même ligne (hors périmètre).
Doc
doc/hours-save-dirty-tracking.md(nouveau)CLAUDE.md(section Validation Rules)Vérification
🤖 Generated with Claude Code