# Écran Suivi livraison

Nouvel écran de suivi en temps réel des livraisons du jour, accessible via le menu **Suivi > Suivi livraison**.

## Fonctionnement

L'écran affiche une colonne par chantier actuellement en cours de livraison (au sens : commande non soldée, avec une date de livraison aujourd'hui ou un BL déjà émis aujourd'hui). Dans chaque colonne, une carte par véhicule ayant un BL actif aujourd'hui pour ce chantier, avec son statut déduit des heures renseignées sur le BL.

L'écran ne fonctionne que sur la date du jour (pas de sélecteur de date) ; un filtre par centrale est disponible. Rafraîchissement automatique toutes les 20 secondes, et bouton "Actualiser" manuel.

### Déduction du statut

Le statut d'un camion est déduit de la dernière étape atteinte parmi les heures du BL (`t_bl`), dans l'ordre :

1. `bl_heure_fab` renseignée, `bl_heure_dep_centrale` non renseignée → **Chargement**
2. `bl_heure_dep_centrale` renseignée, `bl_heure_arr_chantier` non renseignée → **En route vers le chantier**
3. `bl_heure_arr_chantier` renseignée, `bl_heure_dep_vidange` non renseignée → **Attente sur chantier**
4. `bl_heure_dep_vidange` renseignée, `bl_heure_dep_chantier` non renseignée → **Déchargement**
5. `bl_heure_dep_chantier` renseignée, `bl_heure_arr_centrale` non renseignée → **Retour vers la centrale**

Un BL dont `bl_heure_arr_centrale` est renseignée (voyage terminé, camion revenu à la centrale) n'est plus affiché.

**Point d'attention technique** : les colonnes `bl_heure_*` de `t_bl` sont des `TIME NOT NULL` — une heure non renseignée vaut `'00:00:00'` et non `NULL`. La détection "heure renseignée" (`heure_definie()` dans le contrôleur) et le filtre SQL sur `bl_heure_arr_centrale` tiennent compte de cette particularité (comparaison à `'00:00:00'`, pas seulement `whereNull`).

Si un véhicule a plusieurs BL actifs aujourd'hui pour des chantiers différents (rotations), seul son BL le plus récent (id_bl le plus élevé) est retenu et il apparaît uniquement dans la colonne de ce chantier.

## Fichiers modifiés / créés

- [app/Http/Controllers/suivi_livraison_controller.php](../app/Http/Controllers/suivi_livraison_controller.php) — `index()` (affichage, gate sur `profil_bl`) et `data()` (endpoint AJAX JSON).
- [resources/views/suivi_livraison/index.blade.php](../resources/views/suivi_livraison/index.blade.php) — vue avec grille de colonnes (chantiers) et cartes véhicules, polling AJAX.
- [routes/web.php](../routes/web.php) — bloc de routes `suivi_livraison.index` / `suivi_livraison.data`, ajouté après le bloc `suivi_numero_bl`.
- [public/inc/haut.inc.php](../public/inc/haut.inc.php) — entrée de menu "Suivi livraison" dans la section Suivi, gatée sur `profil_bl`.

## Décisions prises

- Pas de nouvelle table/migration : l'écran ne fait que lire `t_commande`, `t_bl`, `t_chantier`, `t_vehicule` existants.
- Accès gaté sur `profil_bl` (comme les autres écrans liés au BL), faute de profil dédié existant.
- Rendu en colonnes/cartes (façon Kanban) plutôt qu'en DataTables classique, car le nombre de véhicules par chantier est variable et l'alignement en lignes n'a pas de sens métier ici.
