diff --git a/controllers/lecture_page_ctrl.php b/controllers/lecture_page_ctrl.php index 3fbdf9f..ed1f621 100644 --- a/controllers/lecture_page_ctrl.php +++ b/controllers/lecture_page_ctrl.php @@ -1,92 +1,39 @@ '#e74c3c', // Évacuation - 2 => '#3498db', // ASV - 3 => '#f39c12', // Transmission - 4 => '#9b59b6', // Conseiller technique - 5 => '#2ecc71', // Gestion - 6 => '#8B4513', // Désobstruction - 7 => '#e91e63', // Médical - 8 => '#00bcd4', // Ventilation - 9 => '#95a5a6', // Pas de spécialité - ]; - - // Créneaux 8h-20h (toutes les 30 min) + // Créneaux horaires : 0h à 24h toutes les 30 minutes $creneaux = []; - for ($min = 8 * 60; $min < 20 * 60; $min += 30) { - $creneaux[] = sprintf('%02d:%02d', intdiv($min, 60), $min % 60); + for ($minutes = 0; $minutes < 1440; $minutes = $minutes + 30) { + $heures = intdiv($minutes, 60); + $mins = $minutes % 60; + $creneaux[] = sprintf('%02d:%02d', $heures, $mins); } - // Index des sauveteurs + couleur par spécialité - $sauveteurs_index = []; - foreach ($sauveteurs as $s) { - $spe_num = (int) ($s['specialite'] ?? 0); - $s['couleur'] = $couleurs[$spe_num] ?? '#cccccc'; - $sauveteurs_index[$s['ID']] = $s; + // Regrouper les missions par sauveteur + $missions_par_sauveteur = []; + foreach ($missions as $mission) { + $id_sauv = $mission['ID_Sauveteur']; + $missions_par_sauveteur[$id_sauv][] = $mission; } - // Grille : sauveteur_id → créneau → [couleur, en_prepa] - $grille = []; - foreach ($sauveteurs as $s) { - $grille[$s['ID']] = []; - foreach ($creneaux as $c) { - $grille[$s['ID']][$c] = null; - } - } - - // Remplissage de la grille avec les missions - foreach ($missions as $m) { - $id_sauv = $m['ID_Sauveteur']; - if (!isset($grille[$id_sauv])) continue; - - $debut = new DateTime($m['DateHeureDebut']); - $fin = new DateTime($m['DateHeureFin']); - $en_prepa = (bool) $m['EnPrepa']; - - foreach ($creneaux as $c) { - $debut_creneau = new DateTime($date . ' ' . $c . ':00'); - $fin_creneau = (clone $debut_creneau)->modify('+30 minutes'); - - if ($debut < $fin_creneau && $fin > $debut_creneau) { - $grille[$id_sauv][$c] = [ - 'couleur' => $sauveteurs_index[$id_sauv]['couleur'], - 'en_prepa' => $en_prepa, - 'mission_id' => $m['ID'], - ]; - } - } - } - - // Légende des spécialités - $legendes = [ - 1 => 'Évacuation', - 2 => 'ASV', - 3 => 'Transmission', - 4 => 'Conseiller technique', - 5 => 'Gestion', - 6 => 'Désobstruction', - 7 => 'Médical', - 8 => 'Ventilation', - 9 => 'Pas de spécialité', - ]; - + // Affichage require('views/lecture_page.php'); - planning_view($sauveteurs, $sauveteurs_index, $creneaux, $grille, $date, $date_precedente, $date_suivante, $couleurs, $legendes); + planning_view($sauveteurs, $creneaux, $missions_par_sauveteur, $date); } diff --git a/css/global.css b/css/global.css index 8bf294e..e222ab0 100644 --- a/css/global.css +++ b/css/global.css @@ -174,6 +174,15 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; } vertical-align: middle; } +/* Couleurs des statuts (classes CSS) */ +.vert { background-color: #2ecc71; } +.violet { background-color: #9b59b6; } +.marron { background-color: #8B4513; } +.jaune { background-color: #f1c40f; } +.orange { background-color: #f39c12; } +.bleu { background-color: #3498db; } +.rouge { background-color: #e74c3c; } + /* FORMULAIRES */ form label { display: inline-block; min-width: 140px; } form input[type="text"], diff --git a/models/lecture_page_model.php b/models/lecture_page_model.php index 8ccb108..0b8d8b8 100644 --- a/models/lecture_page_model.php +++ b/models/lecture_page_model.php @@ -1,21 +1,22 @@ query($req)->fetchAll(PDO::FETCH_ASSOC); +function get_sauveteurs(PDO $pdo): array +{ + $sql = "SELECT ID, nom, prenom, specialite + FROM Sauveteur + ORDER BY nom, prenom"; + return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC); } -// Récupère les missions d'une date donnée -function get_missions_by_date(PDO $c, string $date): array { - $req = "SELECT ID, DateHeureDebut, DateHeureFin, ID_Sauveteur, EnPrepa - FROM Mission - WHERE DATE(DateHeureDebut) = :date - OR DATE(DateHeureFin) = :date - ORDER BY DateHeureDebut"; - - $stmt = $c->prepare($req); - $stmt->bindValue(':date', $date); - $stmt->execute(); +function get_missions_planning(PDO $pdo, string $date): array +{ + $sql = "SELECT m.ID_Sauveteur, m.DateHeureDebut, m.DateHeureFin, m.EnPrepa, s.TypeStatut + FROM Mission m + JOIN Statut s ON m.ID_statut = s.ID + WHERE DATE(m.DateHeureDebut) = :date + OR DATE(m.DateHeureFin) = :date + ORDER BY m.ID_Sauveteur, m.DateHeureDebut"; + $stmt = $pdo->prepare($sql); + $stmt->execute([':date' => $date]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } diff --git a/views/footer.php b/views/footer.php index 5b12b68..cd20e97 100644 --- a/views/footer.php +++ b/views/footer.php @@ -1,8 +1,8 @@
diff --git a/views/header.php b/views/header.php index 0f3b4ef..77a6326 100644 --- a/views/header.php +++ b/views/header.php @@ -38,7 +38,7 @@ $notif = '';
-
+
@@ -47,7 +47,7 @@ $notif = '';
diff --git a/views/lecture_page.php b/views/lecture_page.php index 29609d2..eb178c8 100644 --- a/views/lecture_page.php +++ b/views/lecture_page.php @@ -1,47 +1,84 @@ '#2ecc71', + 'Sauveteur en approche de la cavite' => '#9b59b6', + 'Sauveteur sous terre' => '#8B4513', + 'Sauveteur equipe de gestion' => '#f1c40f', + 'Sauveteur en mission a l\'exterieur' => '#f39c12', + 'Sauveteur en repos' => '#3498db', + 'Sauveteur en brancardage civiere' => '#e74c3c', + ]; ?> -
+
- - - -
| Sauveteur | - -= substr($c, 0, 5) ?> | + += $creneau ?> |
|---|---|---|
|
- = htmlentities($s['nom'] . ' ' . $s['prenom']) ?>
- = $legendes[(int) $s['specialite']] ?? 'Inconnu' ?> + = htmlentities($sauveteur['nom'] . ' ' . $sauveteur['prenom']) ?> + = htmlentities($sauveteur['specialite']) ?> |
-
+ modify('+30 minutes');
+
+ $liste_missions = $missions_par_sauveteur[$sauveteur['ID']] ?? [];
+ foreach ($liste_missions as $mission) {
+ $debut_mission = new DateTime($mission['DateHeureDebut']);
+ $fin_mission = new DateTime($mission['DateHeureFin']);
+
+ if ($debut_mission < $fin_creneau && $fin_mission > $debut_creneau) {
+ $statut = $mission['TypeStatut'];
+ $en_prepa = (bool) $mission['EnPrepa'];
+ break;
+ }
}
- ?>
- - = $cell && $cell['en_prepa'] ? 'P' : '' ?> - | + + // Affichage de la cellule + if ($statut === null) { + $style = ''; + $titre = ''; + $texte = ''; + } else { + $couleur = $couleurs[$statut] ?? '#ccc'; + $titre = htmlspecialchars($statut); + if ($en_prepa) { + $style = 'background:' . $couleur . '; opacity:0.4;'; + $titre .= ' (préparation)'; + $texte = 'P'; + } else { + $style = 'background:' . $couleur . '; opacity:0.85;'; + $texte = ''; + } + } + ?> += $texte ?> |
-
-