# Fiche client : historique de la relation et synthèse des devis

## Sous-onglet « Historique » (Commercial / Contact / Action)

Frise chronologique, du plus récent au plus ancien, affichée seulement pour un client existant et chargée à la première ouverture du sous-onglet. Période au choix : 6, 12 (par défaut), 24 derniers mois ou tout. Les pastilles de légende (agrandies) servent de filtre : un clic barre la pastille et retire ce type d'événement de la frise, un second clic le réaffiche. Le filtre est conservé quand on change de période (`filtrer_historique()` réappliqué après chaque chargement).

| Événement | Source | Couleur / icône |
|---|---|---|
| Action commerciale | `t_action` : type, motif, commentaire, commercial, chantier. Une action future est affichée en grisé « (à venir) » | bleu, `fa-handshake` |
| Devis | `t_devis` : code, état, chantier, quantité prévue, montant HT | cyan, `fa-file-alt` |
| Première livraison d'un chantier | `MIN(bl_date_livraison)` par chantier, BL non annulés | vert, `fa-truck` |
| Incident | `t_incident` : code, famille, description, nature, gravité, chantier | rouge, `fa-exclamation` |

- `app/Http/Controllers/client_controller.php` : méthode `historique()` → JSON `{evenements: [{date, type, titre, detail, complement, a_venir}]}`.
- `routes/web/client.php` : `GET client/historique` (nom `client.historique`, paramètres `client_id`, `mois` ; 0 = tout).
- `resources/views/client/form.blade.php` : lien `#nav-historique-tab`, panneau `#commercial_contact_action_historique` (CSS de la frise en `<style>` local, préfixé `#historique_client`), JS `charger_historique()`.

## Onglet Devis : état, quantité, montant et synthèse

- `resources/views/fiche_annexe/table_devis_fiche_annexe.blade.php` : colonnes ETAT, QTE PREV. et MONTANT HT. Au-dessus du tableau, un cadre par état (En cours, Gagné, Perdu…) avec le nombre de devis, la quantité prévue et le montant HT sur la période filtrée. La synthèse arrive avec les données du tableau (événement `xhr.dt`), sans second appel.
- `app/Http/Controllers/devis_controller.php` :
  - `data_table_devis_fiche_annexe()` : montant HT en sous-requête (`selectSub`) et clé `synthese` dans la réponse ; `lier_centrale` en `?->` (centrale absente).
  - nouvelle méthode statique `libelle_etat_devis()` (0 En cours, 1 Gagné, 2 Perdu, 3 Renégocier, 4 Abandonner, sinon Autre), utilisée aussi par `data_table()` à la place de son `switch`, et par `client_controller::historique()`.

## Décisions

- **Montant HT d'un devis** = somme quantité × prix de **toutes** les lignes, comme le total affiché dans la fiche devis (`lignes_devis`).
- **Pas de colonne « transformé en commande »** : `t_commande.devis_id` n'est quasiment jamais renseigné (1 commande sur 84 289 en base de dev). L'état « Gagné » du devis sert d'indicateur.
- La progression volume prévu / livré par chantier (proposée avec ce point) n'est pas faite : elle dépend de la décision en attente sur ce qui va sur le client ou sur le chantier.

## Test

`historique()` : 73 événements sur tout l'historique du client 3286 (avec incidents), 88 sur 12 mois pour le 2394. `data_table_devis_fiche_annexe()` sur le client 4856 : 11 devis en cours, 93,5 m³, 12 894,85 € HT. Rendu dans le navigateur non testé.
