fix(planning): absences multi-employés masquées + format des slots d'absence#143
Merged
Conversation
… et données
Bug : quand plusieurs employés étaient absents le même jour, la grille
n'affichait qu'une seule absence (pleine largeur, les autres masquées dessous).
Cause : la page /planning/absences écrivait la DATE du jour dans start/end des
slots (« 2026-08-03 ») au lieu d'horaires. Le parsing donnait startHour=2026 →
chaque absence formait son propre cluster pleine largeur, empilées, la
dernière (VIF) masquant les autres.
Correctifs code :
- La page absences écrit désormais start 00:00 / end 23:59 (même format que
/api/schedules/range), à l'ajout comme à l'édition.
- Grille : les slots d'absence sont clusterisés en « journée entière » quel
que soit le format stocké (robuste aux anciennes données) ; heures de
travail non parsables ignorées au lieu de propager NaN.
- /api/schedules/absences : la date calendaire est dérivée de (weekKey, day)
et exposée ; les filtres start/end s'appliquent dessus (l'ancien filtre sur
slot.start ne fonctionnait déjà pas pour les absences créées via la sidebar).
- Suppression/édition d'une absence : ciblage par (employeeId, weekKey, day)
en ne retirant que les slots non-work — les slots n'ont PAS d'id en base,
l'ancien filtre par slotId (undefined) supprimait au passage les créneaux
de travail du jour et ne traitait que le premier jour du groupe.
Données prod migrées (backup schedules_backup_20260722, 1347 lignes) :
- 626 lignes time_slots double-encodées en string JSON ("[]" mais aussi de
vrais créneaux invisibles dans la grille) → décodées en jsonb array ;
- 61 lignes avec des dates dans les slots d'absence → 00:00/23:59.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bug (prod)
Quand plusieurs employés sont absents le même jour, la grille n'affiche qu'une seule absence (hachurée pleine largeur) — les autres sont empilées dessous, masquées (screenshots : seule « VIF » visible alors que toute l'équipe est en congés).
Cause
La page
/planning/absencesécrivait la date du jour dansstart/enddes slots ("2026-08-03") au lieu d'horaires.parseInt("2026-08-03")→startHour = 2026→ chaque absence formait son propre cluster pleine largeur dans l'algo d'empilement ; la dernière rendue masquait les autres. (La sidebar, elle, écrivait correctement00:00/23:59— deux producteurs, deux formats.)Correctifs
00:00/23:59(ajout + édition)./api/schedules/absences: date calendaire dérivée de(weekKey, day)et exposée ; filtres start/end appliqués dessus (l'ancien filtre surslot.startétait déjà cassé pour les absences créées via la sidebar).slotId(toujoursundefined) supprimait les créneaux de travail du jour et ne traitait que le premier jour du groupe. Nouveau ciblage par(employeeId, weekKey, day), seuls les slots non-work sont retirés.Données prod (déjà migrées, backup
schedules_backup_20260722)time_slotsdouble-encodées en string (dont de vrais créneaux invisibles dans la grille) → décodées en tableaux jsonb.00:00/23:59.array, 0 date restante ; la semaine W32 affiche maintenant les 5 absences.Build + 33 tests OK.
🤖 Generated with Claude Code