Permet de consulter les exercices passés (calendrier + compteurs) sur l'onglet Congés. La plage proposée est bornée par max(début historique contrat, RTT_START_DATE) pour ne pas remonter avant la mise en service du logiciel. Édition des stocks N-1 et fractionnés verrouillée sur exercices clos. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.7 KiB
Onglet "Congés" — fiche employé
Vue d'ensemble
L'onglet Congés de la fiche employé (frontend/components/employees/LeaveTab.vue) affiche :
- un bandeau de compteurs (acquis, pris, reste, en cours d'acquisition, N-1 ou samedis selon le contrat) ;
- un calendrier annuel coloré des congés posés (12 mois en grille 4×3) ;
- pour chaque mois, le nombre de jours de présence (
presenceDaysByMonth) ; - un sélecteur d'année en pied de calendrier.
Période affichée
La période dépend du type de contrat actuel de l'employé :
| Type de contrat | Période affichée |
|---|---|
| FORFAIT | Janvier → Décembre (année civile) |
| Autres | Juin (Y-1) → Mai (Y) (exercice CP) |
Cette règle suit EmployeeLeaveSummaryProvider::resolveYear() côté backend : la sélection FORFAIT vs non-FORFAIT se fait toujours sur le contrat courant, pas sur celui qui était en vigueur à l'année consultée.
Sélecteur d'année
Position : en bas du calendrier, à gauche, à l'intérieur de la zone scrollable. Il scrolle donc avec les mois et apparaît sous la grille.
Plage proposée :
- du plus récent (= année courante) au plus ancien ;
- double plancher : l'année minimum est
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 : dérivé de l'env
RTT_START_DATE(date de mise en service du logiciel, ex.2026-02-23→ exercice 2026 / année forfait 2026). Aucune donnée historique n'existe avant cette date, donc on ne propose pas d'années antérieures même si le contrat de l'employé est plus ancien.
- floor_historique_contrat : dérivé de
- la valeur est exposée par l'API
GET /employees/{id}/leave-summaryvia le champdataStartDate(peuplé depuis l'env serveur). - en cas d'historique manquant et d'env absente, la plage se réduit à l'année courante.
Format des libellés :
- FORFAIT :
2026,2025,2024… - Autres :
Juin 2025 → Mai 2026,Juin 2024 → Mai 2025…
Comportement :
- changer d'année recharge l'intégralité de l'onglet (
getEmployeeLeaveSummary?year=YYYY+listAbsences+listPublicHolidays) ; - les compteurs du bandeau reflètent l'année sélectionnée.
Verrouillage des éditions sur années passées
Quand selectedYear !== currentYear (consultation d'une année antérieure) :
- le bouton crayon Jours fractionnés (non-FORFAIT) est désactivé ;
- le bouton crayon Année N-1 payés (FORFAIT) est désactivé.
Justification : modifier rétroactivement les stocks de report ou les jours fractionnés d'un exercice clos décalerait silencieusement les soldes de toutes les années postérieures. La consultation reste possible, l'édition non.
Implémentation
- Composable :
frontend/composables/useEmployeeLeave.ts- État :
selectedLeaveYear, computedcurrentLeaveYear,availableLeaveYears - API :
setSelectedLeaveYear(year),loadLeaveData(),resetLoaded() resetLoaded()(appelé au changement d'employé) remetselectedLeaveYear = nullpour que la valeur par défaut soit recalculée à partir du nouveau contrat.
- État :
- Composant :
frontend/components/employees/LeaveTab.vue- Props :
selectedYear,availableYears,currentYear - Event :
update-selected-year
- Props :
- Page :
frontend/pages/employees/[id].vue(câble le composable au composant) - Backend :
EmployeeLeaveSummaryProviderreçoitRTT_START_DATEviaservices.yaml(argument$dataStartDate) et l'expose dans la réponseEmployeeLeaveSummary.dataStartDate. Le filtrage?year=YYYYétait déjà accepté (validation 2000–2100).