# Variantes saisonnières des compositions de formules

## Le problème

Une formule de béton (ex : « C25/30 XF1 ») peut varier selon la saison (ex : **été** vs **hiver**). Non seulement les quantités d'ingrédients peuvent changer, mais certains ingrédients (adjuvants spécifiques, type de ciment, etc.) peuvent être ajoutés, retirés ou remplacés d'une variante à l'autre.

Aujourd'hui, le système ne gère pas cette notion de saison. Il n'y a qu'une seule composition par formule et par centrale.

---

## Les 2 concepts clés à bien distinguer

1. **La Variante Active (Globale)** : 
   - Définie dans la gestion des variantes (`formule_variant`).
   - Un champ booléen `formule_variant_active` dans la table `t_formule_variant` indique quelle est la variante active (une seule variante active à la fois).
   - Cette variante active sert de référence par défaut pour la **production**, les **bons de livraison** et le **départ cycle**.

2. **La Variante Sélectionnée (Dans la fiche Formule & Exports)** :
   - Dans l'onglet **Composition** d'une formule, l'utilisateur dispose d'un menu déroulant **« Variante »** (à côté du choix de la Centrale).
   - Le tableau des compositions, les **calculs techniques** (masse volumique, rapport E/C, dosage ciment, empreinte carbone…) et les **exports Excel** de formules s'effectuent tous selon la **variante sélectionnée**.
   - L'utilisateur peut ainsi consulter, calculer et exporter la variante « Hiver » même si la variante active en production est « Été ».

---

## Création, Activation et Suppression des Variantes (`formule_variant`)

### 1. Règle de création par duplication (Copie de variante)
- **Pas de bouton "Ajouter"** dans l'index des variantes.
- **Pas de bouton "Nouveau"** (réinitialisation à blanc) dans le formulaire de variante.
- **Création uniquement par duplication** : Dans le formulaire d'une variante existante, un bouton **« Créer à partir de cette variante »** permet de créer une nouvelle variante (ex: créer "Hiver" à partir de "Défaut").
- **Duplication automatique des compositions** : Lorsqu'une nouvelle variante est créée à partir d'une variante source, **toutes les compositions associées à la variante source sont automatiquement dupliquées** et rattachées à la nouvelle variante.

### 2. Variante par défaut et migration
- Par défaut, lors de la mise en place de la fonctionnalité, une variante par défaut (ex: **« Défaut »**) est créée et activée.
- Toutes les compositions existantes dans la base de données sont automatiquement rattachées à cette variante « Défaut ».

### 3. Activation
- Dans la liste des variantes, un bouton **« Activer »** permet de définir la variante active pour la production.
- Activer une variante met son champ `formule_variant_active = 1` et bascule toutes les autres à `0`.
- **Règle** : Une seule variante active à la fois au niveau global.

### 4. Suppression en cascade
- **Suppression autorisée** : Une variante peut être supprimée (sauf si elle est actuellement active).
- **Cascade automatique** : Lors de la suppression d'une variante, toutes les lignes de compositions rattachées à cette variante dans `t_composition` sont **automatiquement supprimées en cascade**.
- **Sécurité** : La variante actuellement active ne peut pas être supprimée (il faut d'abord en activer une autre).

---

## Onglet Composition dans la Fiche Formule

- **En-tête de l'onglet** :
  - Select **Centrale**
  - Select **Variante** (pré-sélectionne par défaut la variante active, mais modifiable)
  - Un **badge visuel** (ex: `🟢 Variante Active : Été`) informe l'utilisateur de la variante actuellement active en production.
- **Tableau des compositions & Calculs** :
  - Affiche les ingrédients et effectue les **calculs** (coûts, masses volumiques, dosage ciment, rapport E/C, empreinte carbone…) pour le couple **[Centrale choisie + Variante sélectionnée]**.
  - **Pas de colonne « Variante » dans le tableau**, car tout le tableau et les calculs sont basés sur la variante sélectionnée.
  - Les modifications/ajout/suppression dans ce tableau agissent sur la variante sélectionnée.
- **Exports Excel** :
  - L'export de la fiche / des compositions est basé sur la **variante sélectionnée**.

---

## Ce qui change dans l'application

| Quoi | Changement |
|------|------------|
| **Base de données** | Champ `formule_variant_active` dans `t_formule_variant`. Clé étrangère / Suppression en cascade (`onDelete('cascade')`) des compositions rattachées à la variante supprimée. |
| **Page / Formulaire Variante** | Suppression du bouton « Ajouter » et « Nouveau ». Ajout du bouton « Créer à partir de cette variante ». Suppression avec suppression automatique en cascade des compositions. |
| **Fiche formule** (onglet Composition) | Select « Variante » en en-tête + badge « Variante Active ». Pas de colonne Variante dans le tableau. |
| **Calculs & Exports Excel** | Basés sur la **variante sélectionnée** dans la fiche formule / filtres d'export. |
| **Production & Départ Cycle** | Utilisent la variante marquée `formule_variant_active = 1`. |
