La liste des motifs d'une nouvelle plage s'ouvrait sur un placeholder vide « Choisir un motif », alors que le temps de travail est le cas très majoritaire : elle propose désormais « Heure de travail » (code TRAVAIL), avec repli sur le premier motif décomptant le quota si le référentiel ne contient pas ce code. Côté PDF, seul le code générique TRAVAIL était traité comme du temps travaillé. Les motifs ALP matin, ALP soir, restauration, mercredi périscolaire, extrascolaire, préparations et ménage de fond tombaient donc : - dans un total invisible du bilan annuel (ligne « Heures travaillées » à 0 h 00 alors que les heures étaient bien décomptées plus bas) ; - dans la couleur grise « Autre absence » des plannings agent et lieu. La classification est centralisée dans App\Core\MotifCategories, réutilisée par PtaModel (qui portait déjà la même liste) et par les deux services PDF. Un motif inconnu du référentiel est rattaché au temps de travail dès lors qu'il décompte le quota, pour qu'aucun total ne puisse disparaître d'un document. La ligne « Heures travaillées » détaille en outre les motifs regroupés, et le total décompté suit maintenant le drapeau compte_dans_quota comme QuotaModel : il additionnait auparavant les congés, hors quota, en contradiction avec sa propre note de bas de tableau. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PTA V6 — application PHP MVC multipage
PTA n’est plus une SPA. Chaque fonction principale correspond à une page PHP distincte :
planning.php: saisie, brouillon, validation et semaines types ;pending.php: plannings en attente de validation ;coverage.php: contrôle des créneaux sans agent ;structures.php: planning hebdomadaire par lieu ;agents.php: planning mensuel et bilan par agent ;vacations.php: aperçu et enregistrement des vacances scolaires ;administration.php: lieux, agents et règles de couverture.
index.php redirige vers le choix de rôle lors de la première visite, puis vers la page d’accueil autorisée pour le profil sélectionné.
Architecture
page PHP
→ PageController
→ Models / Services
→ View dédiée
View
→ API JSON uniquement pour les actions asynchrones utiles
Les contrôleurs métier, modèles, services PDF et endpoints API de la V5.20 sont conservés. La différence principale porte sur l’interface : plus de routeur JavaScript, plus de vues cachées et plus de chargement de tous les modules sur une seule page.
JavaScript chargé par page
- Saisie :
planning-editor.jsetweek-templates.js; - À valider :
pending-validation.js; - Couverture :
coverage.js; - Par lieu :
structure-overview.js; - Par agent :
agent-overview.js; - Vacances :
vacation-calendar.js; - Administration :
administration.jset la partie configuration decoverage.js.
assets/js/page-bootstrap.js initialise uniquement les modules déclarés par la page et applique les filtres transmis dans l’URL.
Liens directs
Une page de contrôle peut ouvrir directement le planning concerné :
planning.php?structure_id=2&agent_id=7&week=2026-W31&focus=validation
Installation
- Configurer
config.php. - Utiliser le schéma SQL correspondant à la V5.20.
- Placer le dossier sur le serveur PHP.
- Ouvrir
index.phpouplanning.php.
Aucune migration SQL supplémentaire n’est nécessaire pour passer de la V5.20 à la V6.
Version 7
Voir README_V7.md pour le nouveau socle PTA annuel, les équipes des mercredis/vacances et les contrôles métier associés.
V7.2 — Vue annuelle
La page annual.php reproduit l’esprit du tableau annuel historique : douze mois côte à côte, codes AP/PP/AE/PE, couleurs métier, vacances scolaires et accès direct à la semaine à corriger. Voir README_V7_2.md.
V7.8 — Sécurité et droits en base
Les correctifs de sécurité et le déplacement de la matrice des droits dans des
vues SQL sont décrits dans README_V7_8.md. La migration
database/migration_v7_8_securite_acces.sql est obligatoire.
V7.4 — Rôles et droits d’accès
La première arrivée ouvre role.php. Les droits Agent, Responsable de structure et Service Enfance sont vérifiés dans les pages et les contrôleurs API. Voir README_V7_4.md.