feat(heures) : export PDF jour accessible aux chefs de site (périmètre par site)
Auto Tag Develop / tag (push) Successful in 10s
Auto Tag Develop / tag (push) Successful in 10s
L'export des heures de la vue Jour était réservé aux admins. Il est désormais ouvert aux chefs de site, restreint à leurs sites : - sécurité endpoint ROLE_ADMIN -> ROLE_USER - périmètre résolu côté backend via EmployeeRepository::findScoped() (un siteIds hors périmètre est ignoré, aucune fuite inter-sites) - bouton Exporter visible pour admin + chef de site (masqué pour ROLE_SELF) - doc, doc in-app et CLAUDE.md mis à jour Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+15
-7
@@ -1,17 +1,24 @@
|
||||
# Export PDF des heures — vue Jour
|
||||
|
||||
Bouton **Exporter** à droite du titre « Heures », visible **uniquement pour les
|
||||
administrateurs** (`ROLE_ADMIN`) et **uniquement en vue Jour** (masqué en vue Semaine).
|
||||
Bouton **Exporter** à droite du titre « Heures », visible pour les **administrateurs**
|
||||
(`ROLE_ADMIN`) **et les chefs de site** (`ROLE_USER`), **uniquement en vue Jour** (masqué
|
||||
en vue Semaine, masqué pour les profils employé `ROLE_SELF`).
|
||||
|
||||
## Périmètre
|
||||
- **Administrateur** : peut exporter tous les sites.
|
||||
- **Chef de site** : ne voit dans le drawer que **ses sites** et ne peut exporter que
|
||||
ceux-ci. Le périmètre est appliqué côté backend (`EmployeeRepository::findScoped`) — un
|
||||
`siteIds` forcé hors de son périmètre est ignoré, aucune donnée d'un autre site ne fuit.
|
||||
|
||||
## Comportement
|
||||
- Ouvre un drawer : un champ **date** (préremplit la date affichée) et des **cases à
|
||||
cocher des sites** (présélectionnées sur le filtre courant).
|
||||
cocher des sites** (limitées au périmètre de l'utilisateur).
|
||||
- Génère un **PDF A4 portrait** d'une seule journée, **regroupé par site**.
|
||||
|
||||
## Données
|
||||
- Mêmes employés que la vue Jour : **non-conducteurs**, **sous contrat** à la date
|
||||
choisie, des sites cochés. Les employés sous contrat sans saisie apparaissent (lignes
|
||||
vides).
|
||||
choisie, des sites cochés et **dans le périmètre de l'utilisateur**. Les employés sous
|
||||
contrat sans saisie apparaissent (lignes vides).
|
||||
- Colonnes : Nom · Statut · Début matin · Fin matin · Début après-midi · Fin après-midi ·
|
||||
Début soir · Fin soir · Jour · Nuit · **Total** (en gras). **Pas de colonne « Valider ».**
|
||||
- Colonne **Statut** : affiche le **code** du type d'absence (ex. `AT`), pas le libellé,
|
||||
@@ -23,8 +30,9 @@ administrateurs** (`ROLE_ADMIN`) et **uniquement en vue Jour** (masqué en vue S
|
||||
de couleur contenant le code et le libellé du type à droite. Triée par code, dédupliquée.
|
||||
|
||||
## Technique
|
||||
- Endpoint : `GET /work-hours/day-export?workDate=YYYY-MM-DD&siteIds=1,2,3` (`ROLE_ADMIN`).
|
||||
- Provider : `App\State\WorkHourDayExportProvider`.
|
||||
- Endpoint : `GET /work-hours/day-export?workDate=YYYY-MM-DD&siteIds=1,2,3` (`ROLE_USER`).
|
||||
- Provider : `App\State\WorkHourDayExportProvider` — résout le périmètre via
|
||||
`EmployeeRepository::findScoped($user)` (admin → tous, chef de site → ses sites).
|
||||
- Calcul des cellules : `YearlyHoursExportBuilder::buildDayRowsForEmployees` (source
|
||||
unique de vérité, partagée avec les exports annuels).
|
||||
- Gabarit : `templates/work-hour-day-export/print.html.twig`.
|
||||
|
||||
Reference in New Issue
Block a user