Modification page "A valider" pour regrouper les créneaux des agents

This commit is contained in:
PTA
2026-08-21 11:44:08 +02:00
parent 94e7f09eb4
commit b3e53f83b8
7 changed files with 260 additions and 54 deletions

View File

@@ -205,7 +205,7 @@ final class PageController extends Controller
{
$this->access->requirePage('pta');
$this->renderPage('pta', 'PTA annuel par agent', 'pta', [
'pageSubtitle' => 'Le PTA détaillé d’un agent : souhaits de lieux, contraintes et répartition des heures.',
'pageSubtitle' => 'Le PTA détaillé d\'un agent : souhaits de lieux, contraintes et répartition des heures.',
'agents' => (new AgentModel($this->pdo))->allActive(),
'structures' => (new StructureModel($this->pdo))->allActive(),
'scripts' => ['pta.js'],
@@ -303,8 +303,8 @@ final class PageController extends Controller
public function manage_structures(): void
{
$this->access->requirePage('manage_structures');
$this->renderPage('manage_structures', 'Lieux d’affectation', 'manage_structures', [
'pageSubtitle' => 'Créer un lieu d’affectation et définir son type : périscolaire ou extrascolaire.',
$this->renderPage('manage_structures', 'Lieux d\'affectation', 'manage_structures', [
'pageSubtitle' => 'Créer un lieu d\'affectation et définir son type : périscolaire ou extrascolaire.',
'structures' => (new StructureModel($this->pdo))->allActive(),
'scripts' => ['administration.js'],
'modules' => ['administration'],
@@ -323,7 +323,7 @@ final class PageController extends Controller
{
$this->access->requirePage('dsi');
$this->renderPage('dsi', 'Espace DSI', 'dsi', [
'pageSubtitle' => 'Les comptes d’accès de l’application, leurs jetons, et le journal des connexions, des écritures et des refus.',
'pageSubtitle' => 'Les comptes d\'accès de l\'application, leurs jetons, et le journal des connexions, des écritures et des refus.',
'scripts' => ['dsi.js'],
'modules' => ['dsi'],
'pageConfig' => [
@@ -343,7 +343,7 @@ final class PageController extends Controller
public function faq(): void
{
$this->access->requirePage('faq');
$this->renderPage('faq', 'Guide d’utilisation', 'faq', [
$this->renderPage('faq', 'Guide d\'utilisation', 'faq', [
'pageSubtitle' => 'Le parcours complet, du paramétrage des lieux à la validation des plannings, et les réponses aux questions les plus fréquentes.',
]);
}

View File

@@ -51,10 +51,10 @@ window.PTA_PAGE_CONFIG = <?= json_encode([
'params' => $pageConfig,
], JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE) ?>;
</script>
<script src="assets/js/core.js?v=7.23"></script>
<script src="assets/js/core.js?v=7.24"></script>
<?php foreach ($scripts as $script): ?>
<script src="assets/js/<?= htmlspecialchars($script) ?>?v=7.23"></script>
<script src="assets/js/<?= htmlspecialchars($script) ?>?v=7.24"></script>
<?php endforeach; ?>
<script src="assets/js/page-bootstrap.js?v=7.23"></script>
<script src="assets/js/page-bootstrap.js?v=7.24"></script>
</body>
</html>

View File

@@ -104,7 +104,7 @@ $showHelpTab = in_array('faq', $allowedPages, true);
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= htmlspecialchars($pageTitle) ?> — PTA</title>
<link rel="stylesheet" href="assets/style.css?v=7.23">
<link rel="stylesheet" href="assets/style.css?v=7.24">
</head>
<body>
<main class="app-shell">

View File

@@ -43,7 +43,7 @@ $titre = $titres[$etape] ?? 'Connexion';
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= htmlspecialchars($titre) ?> — PTA</title>
<link rel="stylesheet" href="assets/style.css?v=7.23">
<link rel="stylesheet" href="assets/style.css?v=7.24">
</head>
<body class="role-page-body">
<main class="role-page-shell">

View File

@@ -1,8 +1,13 @@
<?php
/**
* File des plannings en attente de validation.
* File des plannings en attente de validation, REGROUPÉE PAR AGENT.
* Module JS : `pendingValidation`.
*
* Le tableau ne liste plus un planning par ligne mais un AGENT par ligne
* (nom, lieu d'affectation, nombre de semaines à valider) : la file dépassait
* la centaine de lignes en période de saisie. Le détail semaine par semaine
* reste accessible en dépliant la ligne de l'agent.
*
* Partiel de contenu inclus par la vue de page homonyme. Les identifiants HTML
* posés ici sont les points d'ancrage du module JS : les renommer casse le
* module sans aucune erreur visible.
@@ -13,16 +18,16 @@
<div class="section-heading">
<div>
<h2>Plannings en attente de validation</h2>
<p class="section-subtitle">Retrouvez tous les brouillons contenant des affectations. Ouvrez un planning pour le contrôler puis le valider directement dans l’écran de saisie.</p>
<p class="section-subtitle">Chaque ligne regroupe les brouillons d’un agent. Dépliez-la pour voir le détail des semaines, puis ouvrez celle à contrôler pour la valider dans l’écran de saisie.</p>
</div>
<button id="refresh-pending-validation" class="button button-secondary" type="button">Actualiser</button>
</div>
<div class="pending-validation-summary" aria-live="polite">
<article class="pending-summary-card">
<span>À valider</span>
<strong id="pending-validation-count">0</strong>
<small>planning(s)</small>
<span>Agents concernés</span>
<strong id="pending-validation-agents">0</strong>
<small><span id="pending-validation-count">0</span> planning(s) à valider</small>
</article>
<article class="pending-summary-card">
<span>Volume en attente</span>
@@ -47,8 +52,7 @@
<tr>
<th>Agent</th>
<th>Lieu d’affectation</th>
<th>Semaine</th>
<th>Créneaux</th>
<th>Semaines à valider</th>
<th>Volume</th>
<th>Dernière modification</th>
<th></th>