From 13eeeb9c86232d194553c8bb51232b0f72f199d8 Mon Sep 17 00:00:00 2001 From: tristan Date: Wed, 29 Apr 2026 09:43:46 +0000 Subject: [PATCH] =?UTF-8?q?feat=20:=20ajout=20colonne=20Cumul=20sur=20l'?= =?UTF-8?q?=C3=A9cran=20RTT=20(#18)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affiche le solde RTT à la fin de chaque semaine (report N-1 + somme totalMinutes des semaines − paiements des mois antérieurs). Permet la comparaison ligne à ligne avec un suivi RH externe. Co-Authored-By: Claude Opus 4.7 (1M context) | Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [ ] Pas de régression - [ ] TU/TI/TF rédigée - [ ] TU/TI/TF OK - [ ] CHANGELOG modifié Reviewed-on: https://gitea.malio.fr/MALIO-DEV/SIRH/pulls/18 Co-authored-by: tristan Co-committed-by: tristan --- doc/functional-rules.md | 1 + frontend/components/employees/RttTab.vue | 37 ++++++++++++------- frontend/data/documentation-content.ts | 1 + frontend/services/dto/employee-rtt-summary.ts | 1 + src/Dto/Rtt/EmployeeRttWeekSummary.php | 1 + src/State/EmployeeRttSummaryProvider.php | 12 ++++++ 6 files changed, 40 insertions(+), 13 deletions(-) diff --git a/doc/functional-rules.md b/doc/functional-rules.md index 3be0d1d..75a07f7 100644 --- a/doc/functional-rules.md +++ b/doc/functional-rules.md @@ -313,6 +313,7 @@ Tous les filtres checkbox sont cochés par défaut à l'ouverture du drawer. - les heures payées sont soustraites du disponible RTT (`availableMinutes -= totalPaidMinutes`) - affichage: 2 lignes par mois dans le tableau (25% et 50%) - colonnes Total 25% et Total 50%: somme base + bonus de chaque tranche + - colonne Cumul (dernière colonne): solde RTT à la fin de chaque semaine = `report N-1 + somme totalMinutes des semaines jusqu'à celle-ci − paiements RTT des mois antérieurs au mois de la semaine`. Le paiement d'un mois M n'est déduit qu'à partir des semaines du mois M+1 (cohérent avec la logique de la ligne "Report mois précédent"). Permet la comparaison ligne à ligne avec un suivi RH externe (Excel) - ligne Report N-1 (carry rollover): affichée en juin uniquement si carry > 0 - ligne Report mois précédent: solde cumulé (carry N-1 + semaines antérieures − paiements antérieurs), affichée à partir de juillet (masquée si nul) - Reste = Report cumulé + Total du mois − Payé du mois (balance courante en fin de mois) diff --git a/frontend/components/employees/RttTab.vue b/frontend/components/employees/RttTab.vue index 12ef983..f0f5c13 100644 --- a/frontend/components/employees/RttTab.vue +++ b/frontend/components/employees/RttTab.vue @@ -40,14 +40,15 @@ - - - - - - - - + + + + + + + + + @@ -59,7 +60,8 @@ - + + @@ -73,6 +75,7 @@ + @@ -86,6 +89,7 @@ + @@ -126,10 +130,14 @@ {{ formatMinutes(week.base50Minutes + week.bonus50Minutes) }}0 h - + @@ -142,7 +150,8 @@ - + + @@ -155,7 +164,8 @@ - + + @@ -168,7 +178,8 @@ - + +
Base 50% Total 50%TotalTotalCumul
{{ formatMinutes(summary!.carryBase50Minutes) }} / {{ formatCentiemes(summary!.carryBase50Minutes) }} {{ formatMinutes(summary!.carryBonus50Minutes) }} / {{ formatCentiemes(summary!.carryBonus50Minutes) }} {{ formatMinutes(summary!.carryBase50Minutes + summary!.carryBonus50Minutes) }} / {{ formatCentiemes(summary!.carryBase50Minutes + summary!.carryBonus50Minutes) }}{{ formatMinutes(summary!.carryFromPreviousYearMinutes) }} / {{ formatCentiemes(summary!.carryFromPreviousYearMinutes) }} {{ formatMinutes(summary!.carryFromPreviousYearMinutes) }} / {{ formatCentiemes(summary!.carryFromPreviousYearMinutes) }}
{{ formatMinutes(monthReport.base50) }} / {{ formatCentiemes(monthReport.base50) }} {{ formatMinutes(monthReport.bonus50) }} / {{ formatCentiemes(monthReport.bonus50) }} {{ formatMinutes(monthReport.total50) }} / {{ formatCentiemes(monthReport.total50) }}{{ formatMinutes(monthReport.total) }} / {{ formatCentiemes(monthReport.total) }} {{ formatMinutes(monthReport.total) }} / {{ formatCentiemes(monthReport.total) }}
+ {{ formatMinutes(week.totalMinutes) }} 0 h + {{ formatMinutes(week.cumulativeBalanceMinutes) }} / {{ formatCentiemes(week.cumulativeBalanceMinutes) }} +   +
{{ formatMinutes(totals.base50) }} {{ formatMinutes(totals.bonus50) }} {{ formatMinutes(totals.total50) }}{{ formatMinutes(totals.total) }}{{ formatMinutes(totals.total) }}-
{{ currentPayment ? formatMinutes(-currentPayment.paidBase50Minutes) : '0 h' }} / {{ formatCentiemes(currentPayment ? -currentPayment.paidBase50Minutes : 0) }} {{ currentPayment ? formatMinutes(-currentPayment.paidBonus50Minutes) : '0 h' }} / {{ formatCentiemes(currentPayment ? -currentPayment.paidBonus50Minutes : 0) }} {{ currentPayment ? formatMinutes(-(currentPayment.paidBase50Minutes + currentPayment.paidBonus50Minutes)) : '0 h' }} / {{ formatCentiemes(currentPayment ? -(currentPayment.paidBase50Minutes + currentPayment.paidBonus50Minutes) : 0) }}{{ formatMinutes(paidTotal) }} / {{ formatCentiemes(paidTotal) }}{{ formatMinutes(paidTotal) }} / {{ formatCentiemes(paidTotal) }}-
{{ formatMinutes(reste.base50) }} / {{ formatCentiemes(reste.base50) }} {{ formatMinutes(reste.bonus50) }} / {{ formatCentiemes(reste.bonus50) }} {{ formatMinutes(reste.total50) }} / {{ formatCentiemes(reste.total50) }}{{ formatMinutes(reste.total) }} / {{ formatCentiemes(reste.total) }}{{ formatMinutes(reste.total) }} / {{ formatCentiemes(reste.total) }}-
diff --git a/frontend/data/documentation-content.ts b/frontend/data/documentation-content.ts index 284b755..442664c 100644 --- a/frontend/data/documentation-content.ts +++ b/frontend/data/documentation-content.ts @@ -482,6 +482,7 @@ export const documentationSections: DocSection[] = [ blocks: [ { type: 'list', content: 'Report N-1 : solde de l\'exercice précédent\nAcquis : cumul des heures supplémentaires de l\'exercice en cours\nDisponible : report + acquis − payé\nPayé : RTT convertis en salaire (soustraits du disponible)' }, { type: 'note', content: 'Les contrats INTERIM et le mode PRESENCE n\'accumulent pas de RTT (affiché à 0).' }, + { type: 'paragraph', content: 'La colonne "Cumul" affiche le solde RTT à la fin de chaque semaine : Report N-1 + somme des heures hebdomadaires jusqu\'à la semaine concernée − paiements RTT des mois précédents. Un paiement enregistré sur le mois M n\'est déduit qu\'à partir des semaines du mois M+1. Permet la comparaison ligne à ligne avec un suivi RH externe (Excel).' }, ], }, { diff --git a/frontend/services/dto/employee-rtt-summary.ts b/frontend/services/dto/employee-rtt-summary.ts index 5d0dbe5..bf09a03 100644 --- a/frontend/services/dto/employee-rtt-summary.ts +++ b/frontend/services/dto/employee-rtt-summary.ts @@ -9,6 +9,7 @@ export type EmployeeRttWeekSummary = { base50Minutes: number bonus50Minutes: number totalMinutes: number + cumulativeBalanceMinutes: number } export type RttMonthPayment = { diff --git a/src/Dto/Rtt/EmployeeRttWeekSummary.php b/src/Dto/Rtt/EmployeeRttWeekSummary.php index e409869..600a80b 100644 --- a/src/Dto/Rtt/EmployeeRttWeekSummary.php +++ b/src/Dto/Rtt/EmployeeRttWeekSummary.php @@ -17,5 +17,6 @@ final class EmployeeRttWeekSummary public int $base50Minutes = 0, public int $bonus50Minutes = 0, public int $totalMinutes = 0, + public int $cumulativeBalanceMinutes = 0, ) {} } diff --git a/src/State/EmployeeRttSummaryProvider.php b/src/State/EmployeeRttSummaryProvider.php index dc28e53..bf091e4 100644 --- a/src/State/EmployeeRttSummaryProvider.php +++ b/src/State/EmployeeRttSummaryProvider.php @@ -164,6 +164,18 @@ final readonly class EmployeeRttSummaryProvider implements ProviderInterface $monthBuckets[$m]['bonus50'] += $payment->getBonus50Minutes(); } + $runningCumul = $summary->carryFromPreviousYearMinutes; + $prevMonth = null; + foreach ($summary->weeks as $week) { + if (null !== $prevMonth && $week->month !== $prevMonth && isset($monthBuckets[$prevMonth])) { + $b = $monthBuckets[$prevMonth]; + $runningCumul -= $b['base25'] + $b['bonus25'] + $b['base50'] + $b['bonus50']; + } + $runningCumul += $week->totalMinutes; + $week->cumulativeBalanceMinutes = $runningCumul; + $prevMonth = $week->month; + } + $monthPayments = []; $totalPaidMinutes = 0;