# Module Attachements — Plan de développement

## Contexte métier

Un **attachement** est un document indépendant généré à partir des données d'un projet.  
Il n'est **pas** lié à un devis. Il récapitule les travaux réalisés sur un projet (temps passé par les salariés, quantités, montants) et produit un PDF propre.

> ⚠️ **En attente métier** : préciser exactement quelles colonnes de la table `projects` (ou tables liées) alimentent les lignes de l'attachement (heures par salarié ? par poste ? quantités de quoi ?).

---

## Flux utilisateur

1. Menu **VENTES → Attachements** → page liste `/attachements`
2. Bouton **"Nouvel attachement"** → modale : sélectionner un projet
3. À la sélection du projet → AJAX charge les données du projet (salariés, heures, quantités)
4. Aperçu/confirmation des lignes récupérées (modifiable ?)
5. **Enregistrer** → crée l'enregistrement en base + redirect vers la page de l'attachement
6. **PDF** → dompdf avec un template dédié "Attachement"

---

## Architecture technique proposée

### Nouvelle table `attachements`

```sql
CREATE TABLE attachements (
    id              INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    reference       VARCHAR(50)  NOT NULL,          -- ex: ATT26001
    att_reference   INT UNSIGNED NOT NULL DEFAULT 0,
    project_id      INT UNSIGNED NOT NULL,
    company_id      INT UNSIGNED NOT NULL,           -- client (v_companies)
    id_vcompanies   INT UNSIGNED NOT NULL DEFAULT 1, -- société émettrice
    issue_date      DATE         NOT NULL,
    statut          VARCHAR(50)  NOT NULL DEFAULT 'brouillon',
    sumht           DECIMAL(15,3) NOT NULL DEFAULT 0,
    sum             DECIMAL(15,3) NOT NULL DEFAULT 0,
    currency        VARCHAR(20)  NOT NULL DEFAULT 'TND',
    notes           TEXT,
    creation_date   DATE,
    created_by      INT UNSIGNED,
    deleted         TINYINT(1)   NOT NULL DEFAULT 0
);
```

> Les **lignes** ne sont pas stockées séparément — elles sont recalculées à la volée depuis les données du projet à l'affichage/PDF.  
> Si un jour on veut une snapshot figée, on ajoutera `attachement_has_lines` (prévu dans le plan mais pas prioritaire).

### Compteur de référence

Nouvelle colonne `att_reference` dans la table `core` (gérée par `SettingModel`).  
Format : `ATT` + année 2 chiffres + numéro paddé → `ATT26001`.

### Fichiers à créer

| Fichier | Rôle |
|---|---|
| `app/Controllers/AttachementsController.php` | CRUD + PDF |
| `app/Models/AttachementModel.php` | Modèle Eloquent CI4 |
| `app/Views/blueline/attachements/all.php` | Liste (page-list.css) |
| `app/Views/blueline/attachements/view.php` | Détail (page-detail.css) |
| `app/Views/blueline/attachements/_form.php` | Modale création (modal-form.css) |
| `app/Views/blueline/templates/attachement/` | Template PDF dompdf |

### Routes à ajouter (`app/Config/Routes.php`)

```php
$routes->get('attachements',                  'AttachementsController::index',   ['filter' => 'auth']);
$routes->get('attachements/create',           'AttachementsController::create',  ['filter' => 'auth']);
$routes->post('attachements/create',          'AttachementsController::create',  ['filter' => 'auth']);
$routes->get('attachements/view/(:num)',      'AttachementsController::view/$1', ['filter' => 'auth']);
$routes->get('attachements/preview/(:num)',   'AttachementsController::preview/$1', ['filter' => 'auth']);
$routes->get('attachements/delete/(:num)',    'AttachementsController::delete/$1', ['filter' => 'auth']);
$routes->get('attachements/projectData/(:num)', 'AttachementsController::projectData/$1', ['filter' => 'auth']);
```

### Entrée de menu VENTES

À ajouter dans `modules_sous` en base (comme les autres entrées VENTES : factures, devis, avoirs).

---

## Données à récupérer depuis le projet

> **⚠️ EN ATTENTE DE VALIDATION MÉTIER**
>
> Questions en suspens :
> - Quelles colonnes de `projects` (ou tables liées) constituent les lignes de l'attachement ?
> - Est-ce des heures par salarié (depuis `planification` ?) ou des quantités d'articles ?
> - Le PDF liste-t-il les salariés individuellement ou par poste/catégorie ?
> - L'attachement est-il modifiable après création, ou snapshot figée ?

---

## Ce qui a été supprimé (ancien code ATT-PRJ)

- Bouton "Créer ATT-PRJ" dans `estimates/all.php`
- Méthodes `createAtt()` et `generateAtt()` dans `EstimatesController`
- Vue `estimates/_estimateb.php`
- Routes `estimates/createAtt` et `estimates/generateAtt`
- Bloc "Gestion des attachements projet" dans `settings/gestioncommercial.php`
- Méthode `saveAttachementsProjet()` dans `SettingsController`
- Champ `attachements_projet` dans `SettingModel::$allowedFields`

---

## Statut

- [x] Nettoyage de l'ancien code ATT-PRJ
- [ ] Validation métier des données projet à récupérer
- [ ] Migration SQL (table `attachements` + colonne `att_reference` dans `core`)
- [ ] `AttachementModel`
- [ ] `AttachementsController` (index, create, view, preview, delete)
- [ ] Vues (all, view, _form)
- [ ] Template PDF
- [ ] Entrée de menu VENTES
- [ ] Routes
