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 @@