# Plan de charge centrale — mise à jour (barre Réalisé : Livré / Sous centrale)

Suite de `docs/plan_charge_centrale.md` (fonctionnalité initiale). Cette session a fait évoluer la présentation UI de la page planning, ajouté les objectifs horaires par centrale, puis distingué **livré** de **sous centrale** dans la barre "Réalisé".

## 1. Bouton "Plan de charge" dans les pages planning legacy

Ajouté à côté du bouton **Présence véhicule**, ouvre `/plan_charge_centrale` dans un nouvel onglet (`window.open(App.baseUrl+'plan_charge_centrale/', '_blank')`), sur les 3 pages qui partagent la même barre d'outils :

- `public/planning/index.php`
- `public/planning_prev/index.php`
- `public/planning_prev_reel/index.php`

Réorganisation de la ligne de filtres pour faire de la place : date en `col-md-2` (agrandie), heure début/fin/combo durée en `col-md-1` + `form-control-sm`, champ recherche véhicule en `col-md-2` + `form-control-sm`. Les 3 boutons (**Présence véhicule**, **Plan de charge**, **Rafraichir**) sont regroupés dans un conteneur `col-md-5 d-flex justify-content-end`, collés les uns aux autres (`mr-1`) et alignés à droite de la ligne.

## 2. Distinction Livré / Sous centrale dans la barre "Réalisé"

**Besoin** : dans la même barre (même position que l'ancienne barre "Réalisé"), distinguer les quantités livrées par les véhicules propres de la centrale de celles livrées par des véhicules "sous centrale".

**Champ utilisé** : `t_vehicule.Vehicule_CSC` (checkbox "Véhicule sous centrale" dans `resources/views/vehicule/form.blade.php:188-193`), `int` 0/1. Confirmé avec l'utilisateur après investigation — aucun champ de substitution de centrale (`centrale_substitution_v2_id`) n'était en cause, ce champ est en fait sans rapport (mécanisme différent : substitution de centrale à l'intégration BL, pas de trace après coup dans les tables).

**Calcul** (`plan_charge_centrale_controller::data()`) : la requête "Réalisé" (`t_planning` où `planning_reel = 1`) est désormais scindée en deux, jointes sur `t_vehicule` via `vehicule_id` :

- **Livré** : `LEFT JOIN t_vehicule` + `Vehicule_CSC IS NULL OR Vehicule_CSC != 1` (le `LEFT JOIN` conserve les lignes sans véhicule assigné, comptées comme "livré" par défaut).
- **Sous centrale** : `JOIN t_vehicule` + `Vehicule_CSC = 1`.

Chacune groupée par `HOUR(planning_debut)`, comme le reste des séries.

**Rendu graphique** (`resources/views/planning/plan_charge_centrale.blade.php`) : 3 datasets Chart.js avec un `stack` par paire logique — **Prévu** (`stack: 'prevu'`, bleu, seule sur sa barre) puis **Livré** (`stack: 'realise'`, vert `#4CAF50`) et **Sous centrale** (`stack: 'realise'`, vert clair `#A5D6A7`) empilés l'un sur l'autre dans la même barre. `xAxes`/`yAxes` passés en `stacked: true` pour activer l'empilement (motif déjà utilisé dans `resources/views/commande/graph_synthese.blade.php`).

Testé avec des données réelles (centrale 49, 22/04/2024, véhicule id 1630 marqué CSC) : le split renvoie bien des valeurs distinctes sur les deux séries horaires.

## 3. Fichiers modifiés cette session

| Fichier | Changement |
|---|---|
| `public/planning/index.php` | Bouton Plan de charge + réorganisation toolbar |
| `public/planning_prev/index.php` | Idem |
| `public/planning_prev_reel/index.php` | Idem |
| `app/Http/Controllers/plan_charge_centrale_controller.php` | Split Livré / Sous centrale (jointure `t_vehicule.Vehicule_CSC`) |
| `resources/views/planning/plan_charge_centrale.blade.php` | 2 datasets empilés (`stack: 'realise'`) au lieu d'un seul "Réalisé" |

## 4. Limites connues

- Pas de vérification visuelle navigateur (pas d'identifiants de connexion disponibles pendant la session) — validé uniquement via appels directs au contrôleur avec de vraies données.
- Le lien vers `/plan_charge_centrale` reste absent du menu de navigation principal (cf. `docs/plan_charge_centrale.md` §5) ; seul le bouton dans les pages planning y donne accès.
