# Duplication d'un chantier (avec ses tarifs)

## Fonctionnalité

Bouton **« Dupliquer »** dans la fiche chantier (ouverte depuis la fiche client). Il crée une copie
du chantier pour **le même client**, recopie ses **tarifs** et ouvre directement le nouveau chantier.

Fonctionnement calqué sur la duplication de formule (`formule_controller::dupliquer_formule`) :
confirmation, puis saisie du nouveau code dans un `prompt`.

## Fichiers modifiés

| Fichier | Changement |
|---|---|
| `routes/web/chantier.php` | Route `POST /chantier/dupliquer` (`chantier.dupliquer`) |
| `app/Http/Controllers/chantier_controller.php` | Nouvelle méthode `dupliquer()` |
| `resources/views/chantier/form.blade.php` | Bouton `#dupliquer_chantier` + JS associé |

## Règles

- **Droits** : comme le bouton « Nouveau » de la fiche chantier : refusé si `profil_chantier` vaut 0, 1 ou 3
  (bouton désactivé et contrôle côté serveur). Le bouton est aussi désactivé sur un chantier non encore enregistré.
- **Code** : saisi par l'utilisateur (12 caractères max), comme à la création. Le `chantier_code_complet`
  suit la règle existante : code client complété par des espaces jusqu'à 12 caractères, suivi du code chantier.
  Refus si ce code complet existe déjà.
- **Copie du chantier** : toutes les colonnes de `t_chantier` (`replicate()`), même `client_id`,
  sauf `chantier_code`, `chantier_code_complet` (nouveaux) et `chantier_credit_en_cours` (remis à 0).
- **Copie des tarifs** : toutes les lignes `t_tarif` avec `chantier_id` = chantier d'origine sont recopiées
  avec le nouveau `chantier_id` (un seul `INSERT … SELECT`). Seule la table active `t_tarif` est concernée,
  pas les bases tarifaires annuelles (`t_tarif_AAAA`) ni `t_tarif_edition`.
- **Copie des centrales** : les liens `t_chantier_centrale` sont recopiés (`sync()` sur `lier_chantier_centrale`).
  Si le chantier a des centrales, une traçabilité d'envoi `T_Chantier` est écrite comme à l'enregistrement
  (`Création`, ou `Suppression` si le chantier n'est pas défini en production).
- **Copie des formules du chantier** : les lignes `t_chantier_formule` sont recopiées avec le nouveau `chantier_id`.
- **Transaction** : création du chantier, copies (tarifs, centrales, formules) et traçabilités dans un même `DB::transaction`.
- **Traçabilité** : feuille `Chantier`, enregistrement = nouveau code complet, action
  `Duplication depuis <code d'origine>`.
- **Après succès** : message avec le nombre de tarifs copiés, rafraîchissement de la liste des chantiers du client
  et ouverture du nouveau chantier via `$("#ajouter_chantier").trigger('click', [chantier_id])`.

## Non copié

- `t_chantier_point_livraison` (vide actuellement).
- Bases tarifaires `t_tarif_AAAA` et `t_tarif_edition`.
- Les données d'activité (devis, commandes, BL, factures…) ne sont évidemment pas copiées.

## Tests

- Syntaxe PHP 8.1 OK, vues compilées (`artisan view:cache`).
- Script de test (transaction annulée) sur un chantier de 48 tarifs : nouveau chantier même client,
  48 tarifs copiés, traçabilité écrite, refus d'un code déjà existant.
- Second test : 5 centrales recopiées, 2 lignes `t_chantier_formule` de test recopiées, envoi `T_Chantier` écrit.
- Interface (bouton / ouverture du nouveau chantier) non testée dans le navigateur.
