From 47f9bea57d02b1b3ae748432ab4e62751fba1116 Mon Sep 17 00:00:00 2001 From: tristan Date: Mon, 4 May 2026 09:58:50 +0200 Subject: [PATCH] =?UTF-8?q?feat=20:=20s=C3=A9lecteur=20d'exercice=20sur=20?= =?UTF-8?q?l'onglet=20RTT=20de=20la=20fiche=20employ=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Permet de consulter les exercices passés (table hebdomadaire RTT) en réutilisant le pattern de l'onglet Congés. Plage bornée par max(début historique contrat, RTT_START_DATE). Bouton + Payer les RTT verrouillé sur exercices clos. Onglet masqué pour FORFAIT (inchangé). Backend : rttStartDate désormais toujours exposé sur EmployeeRttSummary pour que le sélecteur conserve sa borne lors de la navigation vers un exercice passé. Le masquage existant des lignes Report continue de fonctionner (comparaison mois-à-mois). Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 7 +++ doc/rtt-tab.md | 52 ++++++++++++++++ frontend/components/employees/RttTab.vue | 45 +++++++++++++- frontend/composables/useEmployeeRtt.ts | 77 +++++++++++++++++++++++- frontend/data/documentation-content.ts | 9 +++ frontend/pages/employees/[id].vue | 15 ++++- src/State/EmployeeRttSummaryProvider.php | 13 ++-- 7 files changed, 204 insertions(+), 14 deletions(-) create mode 100644 doc/rtt-tab.md diff --git a/CLAUDE.md b/CLAUDE.md index d274cfc..53154c3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -76,6 +76,13 @@ - Sur un exercice passé (`selectedYear !== currentYear`), les boutons crayon **Jours fractionnés** et **Année N-1 payés** sont **désactivés** : pas d'édition rétroactive des stocks de report. - Doc : `doc/leave-tab.md`. +## Onglet RTT (fiche employé) +- Tableau hebdomadaire (`frontend/components/employees/RttTab.vue`) — exercice fixe Juin(N-1)→Mai(N). Onglet **masqué pour les FORFAIT** (`showRttTab`). +- **Sélecteur d'année** sous le tableau dans la zone scrollable. Même mécanique que l'onglet Congés (double plancher) : `max(floor_contrat, floor_rttStartDate)`. Format unique : `Juin 2025 → Mai 2026`. +- Changement d'année → recharge via `useEmployeeRtt.setSelectedRttYear(year)` (`getEmployeeRttSummary?year=YYYY`). `EmployeeRttSummary.rttStartDate` est déjà exposé (champ existant) — il sert à la fois au floor du sélecteur et au masquage des lignes Report avant la mise en service. +- Sur un exercice passé, le bouton **+ Payer les RTT** est désactivé (pas de paiement rétroactif). +- Doc : `doc/rtt-tab.md`. + ## Récap. congés (écran) - Accès via sidebar `Récap. congés`, conditionné au flag `User.hasLeaveRecapAccess` (défaut `false`) — activé au create/edit user. Le flag s'applique à tous les profils, y compris admin. - Scope : `ROLE_ADMIN` → tous les employés, `ROLE_USER` (chef de site) → employés de ses sites, `ROLE_SELF` → sa ligne diff --git a/doc/rtt-tab.md b/doc/rtt-tab.md new file mode 100644 index 0000000..f3d694c --- /dev/null +++ b/doc/rtt-tab.md @@ -0,0 +1,52 @@ +# Onglet "RTT" — fiche employé + +## Vue d'ensemble + +L'onglet **RTT** de la fiche employé (`frontend/components/employees/RttTab.vue`) affiche un tableau hebdomadaire détaillé des heures supplémentaires accumulées et payées sur un exercice : +- bandeau de navigation par mois (chevrons gauche/droite) ; +- table semaine par semaine : Heure / Base 25% / 25% / Total 25% / Base 50% / 50% / Total 50% / Total / Cumul ; +- ligne Report (carry N-1 ou cumul mois précédents) ; +- ligne Total mois, ligne Payé, ligne Reste ; +- bouton « + Payer les RTT » dans le bandeau ; +- sélecteur d'exercice en pied de tableau. + +L'onglet est **masqué pour les contrats FORFAIT** (filtre `showRttTab` dans `useEmployeeDetailPage`). Les FORFAIT n'accumulent pas de RTT. + +## Période affichée + +Toujours **Juin (Y-1) → Mai (Y)**. Le champ `EmployeeRttSummary.year` correspond à `Y` (année de fin d'exercice) ; ex. `year=2026` = `01/06/2025 → 31/05/2026`. + +## Sélecteur d'année + +Position : sous la table, à l'intérieur de la zone scrollable, à gauche. + +Plage proposée : +- du plus récent (= exercice courant) au plus ancien ; +- **double plancher** : `max(floor_historique_contrat, floor_data_start_date)` + - **floor_historique_contrat** : dérivé de `employee.contractHistory[].startDate` — premier exercice où l'employé avait un contrat ouvert + - **floor_data_start_date** : exercice contenant `RTT_START_DATE` (env, ex. `2026-02-23` → exercice 2026) +- la valeur est exposée par l'API `GET /employees/{id}/rtt-summary` via le champ `rttStartDate` (déjà existant — mais peuplé uniquement quand la date tombe dans l'exercice retourné, donc le composable utilise la première réponse pour borner la plage). +- format unique : `Juin 2025 → Mai 2026`, `Juin 2024 → Mai 2025`… + +Comportement : +- changer d'exercice recharge `getEmployeeRttSummary?year=YYYY` (le backend valide 2000–2100) ; +- la table redéploie les semaines de l'exercice sélectionné, navigation par mois conservée. + +## Verrouillage des édition sur exercices passés + +Quand `selectedYear !== currentYear` (consultation d'un exercice antérieur), le bouton **+ Payer les RTT** est désactivé. Justification : un paiement rétroactif sur un exercice clos décalerait les soldes courants et le report N-1 calculé. + +La consultation reste possible, l'édition non. + +## Implémentation + +- Composable : `frontend/composables/useEmployeeRtt.ts` + - État : `selectedRttYear`, computed `currentRttYear`, `availableRttYears` + - API : `setSelectedRttYear(year)`, `loadRttData()`, `resetLoaded()` + - `resetLoaded()` (appelé au changement d'employé) remet `selectedRttYear = null`. +- Composant : `frontend/components/employees/RttTab.vue` + - Props : `selectedYear`, `availableYears`, `currentYear` + - Event : `update-selected-year` + - Renommage `currentYear` (computed local de l'année du mois affiché) → `displayedMonthYear` pour éviter la collision avec la nouvelle prop. +- Page : `frontend/pages/employees/[id].vue` +- Backend : aucun changement — `EmployeeRttSummaryProvider` accepte déjà `?year=YYYY` (validation 2000–2100) et expose `rttStartDate`. diff --git a/frontend/components/employees/RttTab.vue b/frontend/components/employees/RttTab.vue index f0f5c13..04fe9ee 100644 --- a/frontend/components/employees/RttTab.vue +++ b/frontend/components/employees/RttTab.vue @@ -11,7 +11,7 @@ - {{ currentMonthLabel }} {{ currentYear }} + {{ currentMonthLabel }} {{ displayedMonthYear }}