Skip to content

fix(planning): absences multi-employés masquées + format des slots d'absence#143

Merged
makcimerrr merged 1 commit into
mainfrom
fix/absence-slots-format
Jul 22, 2026
Merged

fix(planning): absences multi-employés masquées + format des slots d'absence#143
makcimerrr merged 1 commit into
mainfrom
fix/absence-slots-format

Conversation

@makcimerrr

Copy link
Copy Markdown
Owner

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 dans start/end des 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 correctement 00:00/23:59 — deux producteurs, deux formats.)

Correctifs

  1. Producteurs unifiés : la page absences écrit 00:00/23:59 (ajout + édition).
  2. Grille robuste : absences clusterisées « journée entière » quel que soit le format stocké ; heures non parsables ignorées.
  3. API /api/schedules/absences : date calendaire dérivée de (weekKey, day) et exposée ; filtres start/end appliqués dessus (l'ancien filtre sur slot.start était déjà cassé pour les absences créées via la sidebar).
  4. Suppression/édition fiabilisées : les slots n'ont pas d'id en base — l'ancien ciblage par slotId (toujours undefined) 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)

  • 626 lignes time_slots double-encodées en string (dont de vrais créneaux invisibles dans la grille) → décodées en tableaux jsonb.
  • 61 lignes avec dates dans les slots d'absence → 00:00/23:59.
  • Vérifié : 1347/1347 lignes en array, 0 date restante ; la semaine W32 affiche maintenant les 5 absences.

Build + 33 tests OK.

🤖 Generated with Claude Code

… 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>
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
admin-dashboard Ready Ready Preview, Comment Jul 22, 2026 12:41pm

@github-actions github-actions Bot added the bug Something isn't working label Jul 22, 2026
@makcimerrr
makcimerrr merged commit 21e5e1b into main Jul 22, 2026
16 checks passed
@makcimerrr
makcimerrr deleted the fix/absence-slots-format branch July 22, 2026 12:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant