diff --git a/frontend/composables/useEmployeeDetailPage.ts b/frontend/composables/useEmployeeDetailPage.ts index ffd1aa9..eeaae0b 100644 --- a/frontend/composables/useEmployeeDetailPage.ts +++ b/frontend/composables/useEmployeeDetailPage.ts @@ -66,8 +66,9 @@ export const useEmployeeDetailPage = () => { await bonus.loadBonusData() } else if (activeTab.value === 'observation') { await observation.loadObservationData() - } else if (isForfait.value && showLeaveTab.value) { - // Eager load: needed for the "X jours restants" header label on forfait employees. + } else if (showLeaveTab.value) { + // Eager load: the header shows présence (et jours à travailler/restant pour le forfait), + // qui proviennent du récap congés — nécessaire même quand on ouvre un autre onglet. await leave.loadLeaveData() } } finally { @@ -77,14 +78,21 @@ export const useEmployeeDetailPage = () => { const contract = useEmployeeContract(employee, loadEmployee) const leave = useEmployeeLeave(employee, loadEmployee, phase.selectedPhase) + const formatDays = (n: number) => (Number.isInteger(n) ? String(n) : (Math.round(n * 100) / 100).toFixed(2).replace('.', ',')) + // Forfait : « (présence · restant à travailler) ». restant = jours à travailler (prorata) − présence. const forfaitRemainingDaysLabel = computed(() => { if (!isForfait.value) return '' const presence = leave.leaveSummary.value?.presenceDaysToToday if (presence === undefined || presence === null) return '' - const fmt = (n: number) => (Number.isInteger(n) ? String(n) : (Math.round(n * 100) / 100).toFixed(2).replace('.', ',')) - // restant à travailler = jours à travailler (prorata) − jours de présence déjà effectués const remaining = forfaitWorkTargetDays.value - presence - return ` (${fmt(presence)} présence · ${fmt(remaining)} restants)` + return ` (${formatDays(presence)} présence · ${formatDays(remaining)} restants)` + }) + // Non-forfait : « (présence) » seul (pas de cible de jours à travailler). + const nonForfaitPresenceLabel = computed(() => { + if (isForfait.value) return '' + const presence = leave.leaveSummary.value?.presenceDaysToToday + if (presence === undefined || presence === null) return '' + return ` (${formatDays(presence)} présence)` }) const rtt = useEmployeeRtt(employee, loadEmployee, phase.selectedPhase) const mileage = useEmployeeMileage(employee, loadEmployee) @@ -135,6 +143,7 @@ export const useEmployeeDetailPage = () => { showRttTab, employeeContractWorkLabel, forfaitRemainingDaysLabel, + nonForfaitPresenceLabel, ...phase, ...contract, ...leave, diff --git a/frontend/pages/employees/[id].vue b/frontend/pages/employees/[id].vue index 30a31e1..6d6b993 100644 --- a/frontend/pages/employees/[id].vue +++ b/frontend/pages/employees/[id].vue @@ -26,7 +26,7 @@
Date d'entrée : {{ employee.entryDate ? employee.entryDate.split('-').reverse().join('/') : '-' }}
{{ contractNatureLabel(employee.currentContractNature) }} {{ employeeContractWorkLabel }}{{ forfaitRemainingDaysLabel }}
+{{ contractNatureLabel(employee.currentContractNature) }} {{ employeeContractWorkLabel }}{{ forfaitRemainingDaysLabel }}{{ nonForfaitPresenceLabel }}
{{ employee.site?.name ?? '-' }}