Skip to content

feat(planning): roulements éditables en base (CRUD + page /planning/roulements)#142

Merged
makcimerrr merged 1 commit into
mainfrom
feat/editable-rotations
Jul 22, 2026
Merged

feat(planning): roulements éditables en base (CRUD + page /planning/roulements)#142
makcimerrr merged 1 commit into
mainfrom
feat/editable-rotations

Conversation

@makcimerrr

Copy link
Copy Markdown
Owner

Système de roulements éditables

Les templates 3 semaines hardcodés d'apply-rotation sont remplacés par une table rotations (source de vérité) : un roulement = un cycle de 1 à 12 semaines (weeks jsonb, clés = employees.id), qui se répète sur la plage d'application. Une exception (semaine spéciale, vacances, jour férié…) = un roulement d'une seule semaine appliqué sur la période concernée.

Nouveautés

  • Page /planning/roulements (sous-nav Planning) : liste des roulements, création (vierge ou duplication), renommage, suppression ; onglets de semaines (ajout/retrait) ; grille employés × jours, chaque cellule s'édite en un clic (presets 9h-17h / 8h-16h / 10h-18h / 13h-21h / 16h-21h, horaire libre, repos). Lecture seule pour les non-editors.
  • API : GET/POST /api/rotations, PUT/DELETE /api/rotations/[id] — gardées withPlanningAccess/withPlanningEditor, validation/sanitize des semaines.
  • Sidebar planning : sélecteur de roulement (depuis la base) + lien « Gérer les roulements » remplacent les boutons Standard/Piscine hardcodés.
  • apply-rotation : { rotationId } (rétro-compat mode → roulement seedé du même nom), application par employeeId.

Seed & données

  • Seed idempotent au premier GET : « Standard » et « Piscine » reconstruits depuis les anciens templates (valeurs post-feat(planning): Nassuif en permanence externe + Maxime à temps plein #141 : Nassuif en permanence externe, Maxime à temps plein), noms résolus en employeeId.
  • Prod déjà préparée : table créée + seed appliqué et vérifié (Standard et Piscine, 3 semaines chacune).

Validation

pnpm test 33/33 ; pnpm build OK.

🤖 Generated with Claude Code

…oulements)

Les roulements ne sont plus hardcodés dans apply-rotation : table `rotations`
(name unique, weeks jsonb — cycle de 1 à 12 semaines, clés = employees.id) qui
devient la source de vérité. Une « exception » (semaine spéciale, vacances…) se
modélise comme un roulement d'une semaine appliqué sur la plage voulue.

- Schéma + service CRUD (lib/db/services/rotations.ts) avec sanitize des
  semaines et seed idempotent : les anciens templates Standard/Piscine
  (post-#141 : Nassuif permanence, Maxime temps plein) résolus nom→employeeId.
  Prod déjà seedée (table créée + INSERT, ON CONFLICT DO NOTHING).
- API /api/rotations (GET liste + seed, POST) et /api/rotations/[id]
  (PUT, DELETE), gardées withPlanningAccess / withPlanningEditor.
- apply-rotation : body { rotationId } (rétro-compat mode standard/piscine →
  roulement seedé du même nom) ; application par employeeId.
- Page /planning/roulements : sélection/création/duplication/renommage/
  suppression, onglets semaines (+/-), grille employés × jours avec éditeur de
  cellule (presets 9-17/8-16/10-18/13-21/16-21, horaire libre, repos),
  lecture seule pour les non-editors. Ajoutée à la sous-nav Planning.
- Sidebar planning : sélecteur de roulement (liste DB) + lien « Gérer les
  roulements » à la place des deux boutons hardcodés.

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:18pm

@github-actions github-actions Bot added the enhancement New feature or request label Jul 22, 2026
@makcimerrr
makcimerrr merged commit ad1f655 into main Jul 22, 2026
16 checks passed
@makcimerrr
makcimerrr deleted the feat/editable-rotations branch July 22, 2026 12:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant