# Facture : unité des lignes granulat avec masse volumique

## Besoin
En facturation, une ligne granulat (type article 5 / ligne `G`) dont le produit a la case
**« Utilser masse volumique calcul contribution »** cochée doit prendre comme unité
l'**Unité vente ERP** du produit (`t_produit.unite_vente_id`, ex. `UN`) au lieu de la tonne.

## Règle
| Case masse volumique | Unité vente ERP renseignée | Unité de la ligne facture |
|---|---|---|
| cochée | oui | `t_produit.unite_vente_id` |
| cochée | non (0) | comportement inchangé |
| non cochée | — | comportement inchangé |

La quantité n'est pas modifiée (pas de conversion). Devis / commandes / Factur-X non touchés.

## Fichiers modifiés
- `public/generation_facture/generation_facture_selectionner_client.php` (case 5 GRANULAT) :
  la requête `produit_libelle_2` lit aussi `produit_utiliser_masse_volumique_calcul_contribution`
  et `unite_vente_id` ; si coché et unité renseignée → `$ligne_facture_unite_id = unite_vente_id`,
  sinon `80` (valeur historique en dur, conservée).
- `app/Http/Controllers/facture_controller.php` `article_ligne_facture()` : même règle pour le type 5
  (création d'une ligne manuelle ; avant : `unite_id` null).
- `app/Services/facture_ligne_article_service.php` `prix_article()` : jointure `t_unite` sur
  `unite_vente_id` pour le type 5 ; renvoie `unite_id` / `unite` quand la règle s'applique, pour
  pré-sélectionner l'unité dans le formulaire.

## Points connus
- L'id `80` en dur pour la tonne (génération depuis BL) est conservé tel quel : il ne correspond pas
  forcément à la tonne sur toutes les bases (en local, Tonne = `TN` id 17).
- La table de correspondance Factur-X (`generer_data_cii_par_facture_service::$unitCodeMap`) attend
  `T`/`U` alors que les codes `t_unite` font 2 caractères (`TN`, `UN`) → repli `C62`. Non corrigé
  (hors périmètre demandé).
