From 17f871e82df2b36a7f325edf49cce7f780400848 Mon Sep 17 00:00:00 2001 From: tristan Date: Thu, 19 Mar 2026 17:10:11 +0100 Subject: [PATCH] =?UTF-8?q?feat=20:=20modification=20=C3=A9cran=20RTT=20+?= =?UTF-8?q?=20modification=20=C3=A9cran=20frais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 5 + doc/functional-rules.md | 11 +- frontend/components/employees/MileageTab.vue | 125 +++++++++++++----- frontend/components/employees/RttTab.vue | 47 ++++--- frontend/composables/useEmployeeMileage.ts | 23 +++- frontend/services/dto/mileage-allowance.ts | 2 + frontend/services/mileage-allowances.ts | 18 ++- migrations/Version20260319100000.php | 28 ++++ src/Entity/MileageAllowance.php | 45 +++++++ src/Repository/WorkHourRepository.php | 39 ++++++ src/State/EmployeeRttSummaryProvider.php | 33 +++++ src/State/LeaveRecapPrintProvider.php | 30 +++++ ...AllowanceAmountReceiptDownloadProvider.php | 53 ++++++++ ...eAllowanceAmountReceiptUploadProcessor.php | 66 +++++++++ src/State/MileageAllowanceDeleteProcessor.php | 10 ++ 15 files changed, 468 insertions(+), 67 deletions(-) create mode 100644 migrations/Version20260319100000.php create mode 100644 src/State/MileageAllowanceAmountReceiptDownloadProvider.php create mode 100644 src/State/MileageAllowanceAmountReceiptUploadProcessor.php diff --git a/CLAUDE.md b/CLAUDE.md index 10254f0..7847d3f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -46,6 +46,11 @@ - INTERIM: no overtime bonuses, no recovery time - Driver contracts: no overtime calculation +## Frais (MileageAllowance) +- Onglet "Frais" (anciennement "Frais Kms") sur la fiche employé +- Validation: mois obligatoire + au moins `kilometers > 0` ou `amount > 0` +- Les deux champs km et montant sont optionnels individuellement mais au moins un requis + ## Frontend Patterns ### Table styling (standard across all pages) diff --git a/doc/functional-rules.md b/doc/functional-rules.md index ead88f8..95ca083 100644 --- a/doc/functional-rules.md +++ b/doc/functional-rules.md @@ -274,6 +274,7 @@ Tous les filtres checkbox sont cochés par défaut à l'ouverture du drawer. - base identique aux calculs d'heures supplémentaires de la vue semaine Heures - minutes de récupération hebdomadaires = `HS totales + bonus 25% + bonus 50%` - contrats `INTERIM` et suivi `PRESENCE`: récupération à `0` + - date limite de calcul: uniquement les semaines terminées (jusqu'au dernier dimanche), **ou** la semaine en cours si tous les jours existants sont validés RH (`isValid = true`). En cas de fin de contrat en milieu de semaine, seuls les jours jusqu'à la date de fin sont vérifiés. - compteur global: - affiché en **jours** (1 jour = 7h = 420 minutes) - report: @@ -353,13 +354,17 @@ Tous les filtres checkbox sont cochés par défaut à l'ouverture du drawer. - `kilometers` (nombre de km, optionnel) - `amount` (montant en €, optionnel) - `comment` (commentaire, optionnel) - - `receiptPath` / `receiptName` (justificatif PDF) + - `receiptPath` / `receiptName` (justificatif Km, PDF) + - `amountReceiptPath` / `amountReceiptName` (justificatif Montant, PDF) - Règle de validation: - le mois est obligatoire - au moins un des deux champs `kilometers` ou `amount` doit être > 0 - les deux peuvent être remplis simultanément -- Tableau: colonnes Mois, Nombre de Km, Montant €, Commentaire, Justificatif -- Justificatif: upload PDF uniquement, téléchargement via endpoint dédié +- Tableau: colonnes Mois, Nombre de Km, Montant €, Commentaire, Justif. Km, Justif. Montant +- Deux justificatifs distincts (upload PDF uniquement): + - Justificatif Km : upload via `/mileage_allowances/{id}/receipt`, téléchargement via GET même URL + - Justificatif Montant : upload via `/mileage_allowances/{id}/amount-receipt`, téléchargement via GET même URL +- La suppression d'un frais supprime les deux fichiers justificatifs du disque ## 13) Notifications diff --git a/frontend/components/employees/MileageTab.vue b/frontend/components/employees/MileageTab.vue index 8fd7937..ab69084 100644 --- a/frontend/components/employees/MileageTab.vue +++ b/frontend/components/employees/MileageTab.vue @@ -2,12 +2,13 @@
+ class="grid grid-cols-6 border border-black bg-tertiary-500 px-6 py-3 text-[20px] font-semibold text-black rounded-t-md">

Mois

Nombre de Km

Montant €

Commentaire

-

Justificatif

+

Justif. Km

+

Justif. Montant

Aucun frais kilométrique. @@ -16,23 +17,36 @@

{{ formatMonth(item.month) }}

{{ item.kilometers }}

{{ item.amount ? item.amount + ' €' : '-' }}

{{ item.comment ?? '-' }}

-

+

- - {{ item.receiptName ?? 'Télécharger' }} + + {{ item.receiptName ?? 'Télécharger' }} + + - +

+

+ + + {{ item.amountReceiptName ?? 'Télécharger' }} -

@@ -94,20 +108,38 @@
-
+ +
+ +
+ Fichier actuel : {{ editingItem.amountReceiptName }} +
+ +

{{ amountFileError }}

Fichier au format pdf

@@ -156,7 +188,7 @@