En-tête fusionné "Heures payés" (colspan=2) avec deux sous-colonnes 25% et
50% sous-jacentes. paid25Hours=base25Minutes, paid50Hours=base50Minutes
(bases seules, total inchangé vs l'ancienne colonne unique). buildRttPaymentMap
renvoie ['m25','m50'] par employé. Tableau passé à 20 colonnes (colspan ajustés).
PDF généré et validé sur données prod (A4 paysage, largeurs ~228mm).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
L'export récap salaire comptait tous les congés 'C' d'un forfait et ne
créditait aucune présence sur les jours de congé. Or un congé imputé sur le
stock N-1 ne doit pas s'afficher et doit compter comme jour de présence
(règle déjà appliquée dans la fiche employé via EmployeeLeaveSummaryProvider).
- Nouvelle méthode publique resolvePreviousYearTakenDays() (mutualise le budget
N-1 avec la fiche: phase courante + recalcul jours payés).
- SalaryRecapPrintProvider charge les congés depuis le 1er janvier et consomme
le budget N-1 chronologiquement (splitForfaitCongesByN1): jours couverts N-1
retirés de l'affichage congés et ajoutés à la présence; au-delà = congés N.
- Non-forfait / budget N-1 = 0: comportement inchangé.
Vérifié end-to-end sur données prod (SARAZI mai: +1 présence, 4 congés affichés;
LIOT/ODUNCU budget 0 après paiement N-1 -> congés affichés).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Le seuil de départ du +25% était proratisé aux jours contractés, mais le
plafond 25%/50% restait codé en dur à 43h: pour une embauche en milieu de
semaine, toutes les heures supp tombaient en 25%, jamais en 50%.
Le plafond vaut désormais seuil_départ_proraté + largeur de bande +25%
(4h pour un 39h, 8h pour un 35h). Semaine pleine: plafond = 43h (inchangé).
Témoin Dylan (CDD 39h embauché jeudi, 22h): 4h à 25% + 3h à 50%.
Écran Heures (WorkHourWeeklySummaryProvider) laissé tel quel (décision métier).
Suppression de deux helpers morts (computeOvertime25/50BonusMinutes) du service.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
| | |
## Description de la PR
## Modification du .env
## Check list
- [x] Pas de régression
- [x] TU/TI/TF rédigée
- [x] TU/TI/TF OK
- [x] CHANGELOG modifié
Reviewed-on: #19
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
Permet de consulter les exercices passés (table hebdomadaire RTT) en
réutilisant le pattern de l'onglet Congés. Plage bornée par
max(début historique contrat, RTT_START_DATE). Bouton + Payer les RTT
verrouillé sur exercices clos. Onglet masqué pour FORFAIT (inchangé).
Backend : rttStartDate désormais toujours exposé sur EmployeeRttSummary
pour que le sélecteur conserve sa borne lors de la navigation vers un
exercice passé. Le masquage existant des lignes Report continue de
fonctionner (comparaison mois-à-mois).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Permet de consulter les exercices passés (calendrier + compteurs) sur
l'onglet Congés. La plage proposée est bornée par max(début historique
contrat, RTT_START_DATE) pour ne pas remonter avant la mise en service
du logiciel. Édition des stocks N-1 et fractionnés verrouillée sur
exercices clos.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Quand un employé n'a pas d'absence sur un jour férié, la cellule prend le fond bleu clair (#b3e5fc) et affiche le nom du férié au survol — cohérent avec la vue jour.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Affiche désormais une ligne dédiée pour chaque jour férié (Lun-Ven) avec la mention "Férié : {nom}" et le total créditant les heures contractuelles, comme sur l'écran Heures.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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) <noreply@anthropic.com>
| 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: #18
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
- Input step passé de 0.5 à 0.01 pour accepter les centièmes (xx,xx)
- Labels mis à jour "(centièmes)" au lieu de "(heures)"
- Auto-remplissage du bonus 25% (base × 0.25) et 50% (base × 0.50)
- Ligne "Payé" affiche désormais les centièmes en gris comme les autres lignes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Nouveau endpoint GET /yearly-hours/print-all (admin, par mois uniquement)
- Service YearlyHoursExportBuilder extrait du provider existant (logique partagée)
- EmployeeYearlyHoursPrintProvider refactorisé pour utiliser le builder
- Template print-all.html.twig avec saut de page entre chaque employé
- Drawer BulkYearlyHoursDrawer avec loader "Génération en cours..."
- Bouton "Export heures" ajouté sur la page liste employés
- PHP memory_limit passé de 128M à 256M dans php.ini (nécessaire pour Dompdf multi-employés)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Nouvelle entité InterimAgency (table interim_agencies, API lecture seule)
- Sélecteur agence conditionnel dans les formulaires création employé et ajout contrat
- Affichage "Intérim (NomAgence)" sur la liste employés et l'historique contrat
- Date de fin obligatoire côté frontend pour CDD et INTERIM (aligné backend)
- Renommage "Types d'absence" → "Types de statut" (sidebar, page, titre)
- Renommage en-tête "Absence" → "Statut" sur les vues jour heures et conducteurs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>