Suite à l'ajout de l'exercice suivant dans les sélecteurs, isHistoricalYear (selectedYear !== currentYear) s'applique aussi à l'exercice futur. Les docs parlaient uniquement d'exercice passé/antérieur ; clarifié pour couvrir passé ET futur. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.8 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 au plus ancien. La borne haute est l'exercice suivant (exercice courant + 1) lorsque la phase de contrat est ouverte, afin de consulter en avance les congés posés sur l'exercice à venir ; pour une phase clôturée, la borne haute reste l'exercice de fin de phase ;
- 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'exercice courant et à l'exercice suivant.
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 hors exercice courant
Quand selectedYear !== currentYear (consultation d'une année différente de l'exercice courant, passée ou future) :
- 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 les stocks de report ou les jours fractionnés d'un exercice clos décalerait silencieusement les soldes des années postérieures ; les éditer sur un exercice futur (pas encore démarré) n'aurait pas de sens. La consultation reste possible, l'édition non.
Sélecteur de phase de contrat
Quand l'employé a plusieurs phases de contrat (Employee.contractPhases.length > 1), le picker Vue contrat en haut de la fiche permet de consulter une phase passée. L'onglet Congés bascule alors sur les règles de la phase choisie :
- Période Juin→Mai pour les phases non-forfait, Jan→Déc pour FORFAIT.
- Sélecteur d'année interne borné aux exercices intersectant la phase.
- Bornes d'exercice cappées sur
phase.endDatecôté backend (l'exercice de transition affiche les soldes acquis jusqu'à la date de fin de phase, pas au-delà). - Boutons crayon
Jours fractionnés/Année N-1 payésdésactivés (lecture seule sur phase passée).
Cf. doc/contract-phase-view.md pour les détails complets.
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).