feat(calendar) : supprimer / modifier une plage de congés d'un coup #34

Merged
tristan merged 1 commits from feature/SIRH-39-pouvoir-supprimer-plusieurs-conges-d-un-coup into develop 2026-06-24 14:03:17 +00:00
Owner

Contexte

Sur le calendrier, une absence est stockée une ligne par jour sans lien entre les jours (cf. AbsenceWriteProcessor::expandAbsenceRange). Conséquences pour la RH :

  • Impossible de retirer une plage : la suppression n'effaçait que le jour cliqué → il fallait supprimer chaque jour un par un.
  • Modifier une plage laissait des incohérences : le PATCH réutilisait une ligne et en recréait d'autres sans nettoyer l'ancien bloc → jours « fantômes » au raccourcissement et doublons à l'allongement.

Changements (frontend/pages/calendar.vue)

  • Supprimer (handleDelete) : efface toutes les absences de l'employé comprises dans la plage [début ; fin] du drawer. Flux RH : clic sur un jour → étendre la date de fin → Supprimer. Jours sans absence ignorés (aucune erreur) ; jour validé (isValid/site) protégé côté backend. Confirmation avec nombre de jours + intervalle.
  • Modifier (handleSubmit) : remplacement de bloc — supprime l'ancien bloc contigu de même type (vers l'avant depuis le jour cliqué) + les absences recouvertes par la nouvelle plage, puis recrée la plage via createAbsence. Corrige le bug du PATCH. Les jours antérieurs au jour cliqué ne sont jamais touchés ; confirmation « chevauche une autre » seulement pour un autre type. updateAbsence n'est plus appelé depuis le calendrier.

Pourquoi côté frontend

Le backend ne peut pas reconstituer « la plage » (aucun identifiant de groupe en BDD) ; le frontend a la plage visible. Vérifié : les écrans Heures et Heures Conducteurs verrouillent les dates du drawer (lock-dates), donc le PATCH y reste mono-jour — le calendrier est le seul écran à reshaper une plage. AbsenceWriteProcessor non modifié.

Documentation

  • doc/functional-rules.md, frontend/data/documentation-content.ts (in-app), CLAUDE.md.

Tests

  • 253 tests PHPUnit verts (hook pre-commit). Pas de framework de test frontend dans le projet.
  • À valider en réel : raccourcir / allonger une plage (pas de jour fantôme ni doublon), supprimer une plage d'un coup.

🤖 Generated with Claude Code

## Contexte Sur le calendrier, une absence est stockée **une ligne par jour** sans lien entre les jours (cf. `AbsenceWriteProcessor::expandAbsenceRange`). Conséquences pour la RH : - **Impossible de retirer une plage** : la suppression n'effaçait que le jour cliqué → il fallait supprimer chaque jour un par un. - **Modifier une plage laissait des incohérences** : le `PATCH` réutilisait une ligne et en recréait d'autres sans nettoyer l'ancien bloc → jours « fantômes » au raccourcissement et doublons à l'allongement. ## Changements (`frontend/pages/calendar.vue`) - **Supprimer** (`handleDelete`) : efface **toutes** les absences de l'employé comprises dans la plage `[début ; fin]` du drawer. Flux RH : clic sur un jour → étendre la date de fin → Supprimer. Jours sans absence ignorés (aucune erreur) ; jour validé (`isValid`/site) protégé côté backend. Confirmation avec nombre de jours + intervalle. - **Modifier** (`handleSubmit`) : **remplacement de bloc** — supprime l'ancien bloc contigu de même type (vers l'avant depuis le jour cliqué) + les absences recouvertes par la nouvelle plage, puis recrée la plage via `createAbsence`. Corrige le bug du `PATCH`. Les jours antérieurs au jour cliqué ne sont jamais touchés ; confirmation « chevauche une autre » seulement pour un autre type. `updateAbsence` n'est plus appelé depuis le calendrier. ## Pourquoi côté frontend Le backend ne peut pas reconstituer « la plage » (aucun identifiant de groupe en BDD) ; le frontend a la plage visible. Vérifié : les écrans **Heures** et **Heures Conducteurs** verrouillent les dates du drawer (`lock-dates`), donc le `PATCH` y reste mono-jour — le calendrier est le seul écran à reshaper une plage. `AbsenceWriteProcessor` non modifié. ## Documentation - `doc/functional-rules.md`, `frontend/data/documentation-content.ts` (in-app), `CLAUDE.md`. ## Tests - 253 tests PHPUnit verts (hook pre-commit). Pas de framework de test frontend dans le projet. - À valider en réel : raccourcir / allonger une plage (pas de jour fantôme ni doublon), supprimer une plage d'un coup. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
tristan added 1 commit 2026-06-24 12:24:11 +00:00
Sur le calendrier, une absence est stockée une ligne par jour sans lien
entre les jours. La suppression et la modification n'agissaient donc que
sur le jour cliqué.

- Supprimer (handleDelete) : efface toutes les absences de l'employé
  comprises dans la plage [début ; fin] du drawer (jours sans absence
  ignorés, jour validé protégé côté backend).
- Modifier (handleSubmit) : remplacement de bloc — supprime l'ancien bloc
  contigu de même type (vers l'avant depuis le jour cliqué) + les absences
  recouvertes par la nouvelle plage, puis recrée la plage. Corrige le bug
  du PATCH qui laissait des jours fantômes (raccourcissement) et des
  doublons (allongement). updateAbsence n'est plus utilisé sur le calendrier.

Backend AbsenceWriteProcessor non touché : les écrans Heures verrouillent
les dates du drawer, le PATCH y reste mono-jour.

Doc : functional-rules.md, documentation-content.ts (in-app), CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tristan merged commit 77ae6820d7 into develop 2026-06-24 14:03:17 +00:00
tristan deleted branch feature/SIRH-39-pouvoir-supprimer-plusieurs-conges-d-un-coup 2026-06-24 14:03:18 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/SIRH#34