From 8fb5b80d8de4118b0d76c1a70ac881efa23d9de1 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Tue, 26 May 2026 11:35:46 +0200 Subject: [PATCH] =?UTF-8?q?fix(absences)=20:=20afficher=20le=20solde=20de?= =?UTF-8?q?=20CP=20avec=20d=C3=A9cimales=20(8,75)=20sans=20arrondir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le solde était arrondi à la demi-journée (Math.round(n*2)/2), affichant 9 au lieu de 8,75 : un salarié pouvait croire à un droit supérieur au réel. Formatage via Intl.NumberFormat fr-FR (virgule, max 2 décimales, zéros superflus retirés) dans formatDays et les cartes de solde. --- frontend/components/absence/AbsenceBalanceCards.vue | 3 ++- frontend/composables/useAbsenceHelpers.ts | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/frontend/components/absence/AbsenceBalanceCards.vue b/frontend/components/absence/AbsenceBalanceCards.vue index 4d831d8..b811b5e 100644 --- a/frontend/components/absence/AbsenceBalanceCards.vue +++ b/frontend/components/absence/AbsenceBalanceCards.vue @@ -102,7 +102,8 @@ const others = computed(() => ) function formatNumber(n: number): string { - return (Math.round(n * 2) / 2).toString() + // Valeur réelle avec décimales (ex. 8,75) : pas d'arrondi qui gonflerait le solde. + return new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 }).format(n) } // Total entitlement = acquired (N-1) + in-progress (N); falls back to the diff --git a/frontend/composables/useAbsenceHelpers.ts b/frontend/composables/useAbsenceHelpers.ts index d4dadb7..3921706 100644 --- a/frontend/composables/useAbsenceHelpers.ts +++ b/frontend/composables/useAbsenceHelpers.ts @@ -75,9 +75,11 @@ export function useAbsenceHelpers() { } function formatDays(days: number): string { - const rounded = Math.round(days * 2) / 2 - const unit = rounded > 1 ? t('absences.daysPlural') : t('absences.daySingular') - return `${rounded} ${unit}` + // Affiche la valeur réelle avec décimales (ex. 8,75) : un solde de CP se + // gère en demi/quart de journée, arrondir masquerait des droits réels. + const value = new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 }).format(days) + const unit = days >= 2 ? t('absences.daysPlural') : t('absences.daySingular') + return `${value} ${unit}` } return {