{% extends 'base.html.twig' %} {# ══════════════════════════════════════════════════════════════════ Template — Planning mensuel ══════════════════════════════════════════════════════════════════ Affiche tous les employés actifs en lignes (3 sous-lignes chacun) et les jours du mois en colonnes, à la manière du Google Sheet. Pour chaque employé / chaque jour : - Ligne 1 : prix de la prestation (admins uniquement) - Ligne 2 : observation → Pointage.notes à la sauvegarde - Ligne 3 : site → Pointage.chantier à la sauvegarde Droits : - ROLE_USER : voit tout sauf le prix, lecture seule - ROLE_ADMIN : voit et modifie tout (prix, statut, observation, site) Variables attendues : users : User[] — employés actifs triés par nom jours : array[] — [{date, dateStr, dow, isWeekend, isFerie}] planning : array — [userId][dateStr] => PlanningJour|null year : int month : int isAdmin : bool statuts : StatutPointage[] ══════════════════════════════════════════════════════════════════ #} {% block title %}Planning — {{ month|mois_nom }} {{ year }}{% endblock %} {% block page_title %}Planning mensuel{% endblock %} {% set moisNoms = {1:'Janvier',2:'Fevrier',3:'Mars',4:'Avril',5:'Mai',6:'Juin', 7:'Juillet',8:'Aout',9:'Septembre',10:'Octobre',11:'Novembre',12:'Decembre'} %} {% set jourCourtsFr = {'1':'L','2':'M','3':'M','4':'J','5':'V','6':'S','7':'D'} %} {% block body %} {# ── Navigation mois ── #}