feat(heures) : calendrier des jours validés (vue Jour) + harmonisation Malio UI (#30)
Auto Tag Develop / tag (push) Successful in 10s

## Fonctionnel
- Calendrier MalioDate en vue Jour (écrans Heures ET Heures Conducteurs) : les jours entièrement validés par un admin sont peints en vert.
  - Endpoint `GET /work-hours/validation-status?from=&to=[&driver=1]` (scope conducteur inversé via `driver=1`), périmètre complet (ignore le filtre sites).
  - Chargement à la volée par mois (event `@month-change`), refresh après validation / saisie / absence.

## Harmonisation @malio/layer-ui 1.7.11
- `reserveMessageSpace=false` sur tous les champs (alignement).
- Tous les drawers migrés sur `MalioDrawer` (titre via slot `#header`, `AppDrawer` custom supprimé).
- Boutons d'action en `MalioButton` ; deux boutons côte à côte partagent l'espace.
- Inputs date en `MalioDate`, sélecteur semaine en `MalioDateWeek`.
- Boutons d'ajout uniformisés sur « Ajouter » + icône.

## Divers
- `.env` : `EXCLUDED_PUBLIC_HOLIDAYS="null"`.
- Doc : `doc/hours-validated-days.md`, `documentation-content.ts`, `CLAUDE.md`.
- Tests : provider `WorkHourValidationStatus` (suite complète 236/236 OK via pre-commit hook).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: #30
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
This commit was merged in pull request #30.
This commit is contained in:
2026-06-16 13:53:03 +00:00
committed by Autin
parent 5d2b5d1c54
commit 74abecbe03
37 changed files with 1881 additions and 495 deletions
+20
View File
@@ -138,3 +138,23 @@ export const getWorkHourDayContext = async (workDate: string) => {
{ toast: false }
)
}
// Jours entièrement validés (admin) sur une plage, pour colorer le calendrier de
// la vue Jour. `validatedDays` = liste de dates Y-m-d (cf. doc/hours-validated-days).
// `driver` : true → écran Heures Conducteurs (seuls les conducteurs), false → écran Heures.
export const getWorkHourValidationStatus = async (
from: string,
to: string,
options?: { driver?: boolean }
) => {
const api = useApi()
const query: Record<string, string> = { from, to }
if (options?.driver) query.driver = '1'
const data = await api.get<{ from: string; to: string; validatedDays: string[] }>(
'/work-hours/validation-status',
query,
{ toast: false }
)
return data?.validatedDays ?? []
}