3.8 KiB
Refonte onglet RTT employé
Contexte
L'onglet RTT actuel affiche une grille annuelle de 12 mois avec les minutes de récupération par semaine. Il doit être remplacé par une vue mensuelle détaillée avec navigation, un tableau ventilé par palier de majoration (25% / 50%), et un système de paiement à 4 champs.
Maquette de référence
Fichier : RTT.png à la racine du projet.
Structure de la vue
En-tête
- Navigation mensuelle :
< MOIS ANNÉE >(flèches gauche/droite) - Navigation limitée aux mois de l'exercice (juin N-1 à mai N)
- Mois courant affiché par défaut à l'ouverture
- En haut à droite :
RTT À LA DATE DU JOUR : X heure(cumul annuel toutes semaines confondues)
Tableau
7 colonnes :
| Semaine | Heure | Base | 25% | Base | 50% | Total |
|---|
- Semaine : label "Semaine 1" à "Semaine 5" (toujours 5 lignes, vide si le mois n'a que 4 semaines)
- Heure : heures supplémentaires brutes de la semaine
- Base (1er) : heures de base dans le palier 25% (heures entre 35h et 39h pour un contrat 39h)
- 25% : bonus = base 25% × 0.25
- Base (2e) : heures de base dans le palier 50% (heures au-delà de 43h)
- 50% : bonus = base 50% × 0.50
- Total : somme de toutes les bases + tous les bonus
Lignes de synthèse
- Total : somme des 5 semaines par colonne
- Payé : montants payés pour ce mois (affichés en négatif). Colonne "Heure" = "-"
- Reste : Total - |Payé| par colonne. Colonne "Heure" = "-"
Bouton
+ Payer les RRT en bas, centré. Ouvre un drawer.
Drawer de paiement
Champs :
- Mois (select) : liste des mois de l'exercice
- Base 25% (number, en heures)
- Heures 25% (number, en heures)
- Base 50% (number, en heures)
- Heures 50% (number, en heures)
Si des paiements existent pour le mois sélectionné, le formulaire est pré-rempli pour modification.
Boutons : Annuler / Enregistrer.
Rattachement semaine → mois
Règle existante conservée : une semaine est rattachée au mois de son samedi (voir RttRecoveryComputationService::buildWeeksForExercise).
Backend
Modification de EmployeeRttSummary
Le provider retourne les données pour un mois donné (paramètre query ?month=X) en plus du cumul annuel.
Nouvelles données par semaine :
overtimeMinutes: heures sup brutesbase25Minutes: base palier 25%bonus25Minutes: bonus 25%base50Minutes: base palier 50%bonus50Minutes: bonus 50%totalMinutes: somme base + bonus
Modification de EmployeeRttPayment
Remplacer les champs minutes (int) + rate (int 25/50) par :
base25Minutes(int)bonus25Minutes(int)base50Minutes(int)bonus50Minutes(int)
Migration Doctrine nécessaire.
Modification de EmployeeRttPaymentInput
Adapter les champs pour correspondre aux 4 nouvelles valeurs.
Modification de RttRecoveryComputationService
computeRecoveryByWeek retourne déjà les minutes totales. Il faut enrichir le retour pour ventiler base/bonus par palier. La logique de calcul des paliers existe déjà en interne, il suffit de l'exposer.
Frontend
Stockage vs affichage
- Backend : stockage en minutes (inchangé)
- Frontend : conversion minutes ↔ heures à l'affichage et à la saisie
Réécriture de RttTab.vue
- Supprimer la grille annuelle de 12 mois
- Navigation mensuelle avec état réactif (mois courant)
- Tableau HTML avec les 7 colonnes décrites
- 5 lignes semaines + Total + Payé + Reste
- Formatage en "Xh" ou "Xh Ym" (ex: "6h 30m")
Modification du DTO TypeScript
Adapter EmployeeRttSummary et EmployeeRttWeekSummary pour les nouveaux champs.
Unités de conversion
- Affichage : heures et minutes (ex: "6h 30m", "30 m")
- Saisie paiement : en heures décimales (number input)
- Stockage : minutes entières (int)