# TODO - Évolutions CLEO

## Fonctionnalités à développer

### Module Devis

#### 6. ✅ Modifier un devis archivé (TERMINÉ - 12/09/2025)
**Priorité**: Haute  
**Description**: Permettre la modification d'un devis archivé et son renvoi pour traitement sans nécessiter de duplication.  
**Tâches**:
- [x] Ajouter un bouton "Réactiver" sur les devis archivés (statut 20)
- [x] Permettre le changement de statut d'archivé vers "En cours"
- [x] Conserver l'historique de réactivation dans `devis_histo`
- [x] Adapter les droits selon les rôles (RR, DV, DIR-CO)

#### 8. Dupliquer une ligne produit
**Priorité**: Moyenne  
**Description**: Permettre la duplication d'une ligne produit dans un même devis (utile pour les gratuités).  
**Tâches**:
- [ ] Ajouter un bouton "Dupliquer" sur chaque ligne produit
- [ ] Gérer la duplication avec prix à 0 pour les gratuités
- [ ] Conserver l'ordre des lignes après duplication
- [ ] Mettre à jour automatiquement les totaux

#### 16. Système de recherche avancée
**Priorité**: Haute  
**Description**: Ajouter une recherche multi-critères pour les devis en cours et archivés.  
**Tâches**:
- [ ] Créer une interface de recherche unifiée
- [ ] Implémenter la recherche par :
  - [ ] Numéro de devis
  - [ ] Nom d'établissement/client
  - [ ] Référence produit
  - [ ] Numéro d'opportunité
- [ ] Ajouter des filtres par statut (en cours/archivé)
- [ ] Paginer les résultats de recherche
- [ ] Export des résultats en Excel

#### 19. Gestion des contacts multiples
**Priorité**: Haute  
**Description**: Permettre la gestion de plusieurs contacts par client.  
**Tâches**:
- [ ] Créer une table `clients_contacts`
- [ ] Migration des contacts existants vers la nouvelle structure
- [ ] Interface CRUD pour les contacts
- [ ] Sélecteur de contact à la création/modification de devis
- [ ] Historique des contacts par devis

#### 21. Actualisation tarifaire
**Priorité**: Moyenne  
**Description**: Permettre l'actualisation des prix selon la dernière grille tarifaire.  
**Tâches**:
- [ ] Ajouter un bouton "Actualiser les tarifs"
- [ ] Comparer les prix actuels avec la grille en vigueur
- [ ] Afficher les différences avant validation
- [ ] Recalculer automatiquement les marges
- [ ] Tracer l'actualisation dans l'historique

### Module SAP

#### 14. Gestion de la prise en charge
**Priorité**: Haute  
**Description**: Ajouter la traçabilité de la prise en charge et du transfert EDI.  
**Tâches**:
- [ ] Ajouter les champs en base de données :
  - [ ] `chk_prise_en_charge` (boolean)
  - [ ] `fk_user_prise_en_charge` (int)
  - [ ] `date_prise_en_charge` (datetime)
  - [ ] `fk_user_transfert_edi` (int)
  - [ ] `date_transfert_edi` (datetime)
  - [ ] `erreur_transfert_edi` (text)
- [ ] Interface de prise en charge avec case à cocher
- [ ] Affichage du nom du gestionnaire (ex: "Angela Monteiro")
- [ ] Possibilité de décocher en cas d'erreur
- [ ] Log des transferts EDI
- [ ] Gestion et affichage des erreurs EDI

#### 16. Recherche dans le module SAP
**Priorité**: Moyenne  
**Description**: Implémenter la recherche dans le module SAP (voir point 16 des Devis).  
**Tâches**:
- [ ] Réutiliser le composant de recherche des devis
- [ ] Adapter aux spécificités SAP
- [ ] Filtres supplémentaires (état EDI, prise en charge)

## Migration Infrastructure - Séparation Application/Base de données

### ✅ PHASE 1 COMPLÉTÉE (12 septembre 2025)

**Description**: Migration réussie de l'architecture DEV/RECETTE vers la nouvelle structure avec séparation application/base de données.

### Architecture actuelle (après migration DEV)
- **DEV/RECETTE**: Host IN3 ✅
  - Container `dva-front` (application PHP uniquement) ✅
  - Container `maria3` (MariaDB dédié avec base `cleo`) ✅
- **PROD**: Host IN2 (actuel, à migrer)
  - Container `nx4` (application + BDD intégrées)
  - Bases de données: `uof_frontal` et `uof_linet`

### Architecture cible PROD (à faire)
- **PROD**: Host IN4 (nouveau)
  - Container `pra-front` (import depuis IN3.dva-front)
  - Container `maria4` (import depuis IN3.maria3)
- **Décommissionnement**: Host IN2 (après migration PROD)

### ✅ Refactoring de la base de données (COMPLÉTÉ)
**Changements réalisés**:
1. ✅ **Suppression de la base `uof_frontal`**
   - Configuration externalisée dans `.env`
   - Table `y_pages` migrée vers `cleo`
2. ✅ **Fusion `uof_frontal` + `uof_linet` → `cleo`**
   - Une seule base de données
   - Connexion PDO avec pattern Singleton
3. ✅ **Intégration des logs**
   - Table `z_logs` dans la base `cleo`
   - Tables `z_sessions` et `z_stats` créées

### Plan de migration - État d'avancement

#### ✅ Phase 0 - Refactoring base de données (COMPLÉTÉ - 12/09/2025)
- [x] Script de migration SQL créé
- [x] Table `y_pages` migrée depuis `uof_frontal`
- [x] Table `z_logs` créée dans `cleo`
- [x] Base `cleo` créée avec toutes les tables
- [x] Données migrées de `uof_linet` vers `cleo`
- [x] Références à `uof_frontal` supprimées
- [x] Classe Database PDO créée
- [x] Variables d'environnement `.env` implémentées
- [x] Tests validés en DEV

#### ✅ Phase 1 - Environnement DEV IN3 (COMPLÉTÉ - 12/09/2025)
- [x] Container `maria3` créé sur IN3
- [x] MariaDB 11.4 installé et configuré
- [x] Base `cleo` migrée vers `maria3`
- [x] Configuration pointant vers `maria3` (IP: 13.23.33.4)
- [x] Application testée et fonctionnelle
- [x] MariaDB supprimé de `dva-front`
- [x] Script de déploiement optimisé (`deploy-cleo-fast.sh`)

#### Phase 2 - Préparation PROD IN4 (À FAIRE)
**Export depuis IN3:**
- [ ] Exporter le container `dva-front` depuis IN3
  ```bash
  incus export dva-front dva-front-export.tar.gz
  ```
- [ ] Exporter le container `maria3` depuis IN3
  ```bash
  incus export maria3 maria3-export.tar.gz
  ```

**Import sur IN4:**
- [ ] Importer `dva-front` comme `pra-front` sur IN4
  ```bash
  incus import dva-front-export.tar.gz pra-front
  ```
- [ ] Importer `maria3` comme `maria4` sur IN4
  ```bash
  incus import maria3-export.tar.gz maria4
  ```
- [ ] Configurer les IPs et paramètres réseau sur IN4
- [ ] Adapter le fichier `.env` pour l'environnement PROD

#### Phase 3 - Migration des données PROD (À FAIRE)
- [ ] Effectuer une sauvegarde complète des bases PROD sur IN2/nx4
- [ ] Exporter les données de `uof_frontal` et `uof_linet` depuis IN2/nx4
- [ ] Utiliser le script de migration SQL pour fusionner les données
- [ ] Importer les données fusionnées dans `maria4` sur IN4
- [ ] Configurer `pra-front` pour pointer vers `maria4`
- [ ] Tests de validation en pré-production

#### Phase 4 - Bascule PROD (À FAIRE)
- [ ] Planifier la fenêtre de maintenance
- [ ] Arrêter l'application sur IN2
- [ ] Synchronisation finale des données vers IN4/maria4
- [ ] Basculer le DNS/proxy vers IN4
- [ ] Valider le fonctionnement en production
- [ ] Monitoring post-migration (48h)
- [ ] Décommissionner IN2 après période de stabilisation

### Configuration technique

#### Variables d'environnement
**DEV (IN3) - Actuel:**
```env
DB_HOST=13.23.33.4  # IP de maria3
DB_PORT=3306
DB_DATABASE=cleo
DB_USERNAME=cleo_user
DB_PASSWORD=CleoDev2025!
```

**PROD (IN4) - À configurer:**
```env
DB_HOST=<IP_maria4>  # À définir sur IN4
DB_PORT=3306
DB_DATABASE=cleo
DB_USERNAME=cleo_user
DB_PASSWORD=<PROD_PASSWORD>  # À sécuriser
```

#### Sécurité réseau
- ✅ Connexions uniquement depuis les containers applicatifs
- ✅ Pas d'exposition directe des ports MariaDB
- [ ] Firewall entre containers à configurer sur IN4

#### Backup et restauration
- [ ] Scripts de backup automatisés à mettre en place
- [ ] Réplication master-slave pour haute disponibilité (optionnel)

## Améliorations techniques prioritaires

### Sécurité
- [x] ✅ Migrer les credentials DB vers des variables d'environnement
- [x] ✅ Classe Database avec requêtes préparées PDO
- [x] ✅ Audit complet et correction de toutes les injections SQL (14 vulnérabilités corrigées)
- [ ] Correction des failles XSS potentielles
- [ ] Implémentation des tokens CSRF
- [ ] Tests de sécurité automatisés

### Performance
- [ ] Implémenter la pagination côté serveur pour toutes les listes
- [ ] Ajouter des index sur les colonnes fréquemment recherchées
- [ ] Mettre en cache les requêtes récurrentes

### Qualité du code
- [ ] Ajouter la documentation PHPDoc sur les fonctions principales
- [ ] Créer des tests unitaires pour les fonctions critiques
- [ ] Standardiser la gestion des erreurs

## Planning prévisionnel

### Sprint 1 (2 semaines) - Sécurité
- Correction des vulnérabilités critiques
- Migration des configurations sensibles

### Sprint 2 (3 semaines) - Fonctionnalités prioritaires
- Point 6 : Modification devis archivés
- Point 14 : Prise en charge SAP
- Point 16 : Recherche avancée

### Sprint 3 (3 semaines) - Gestion des contacts
- Point 19 : Contacts multiples
- Migration des données existantes

### Sprint 4 (2 semaines) - Améliorations
- Point 8 : Duplication lignes produits
- Point 21 : Actualisation tarifaire

### Sprint 5 (2 semaines) - Optimisations
- Performances et pagination
- Tests et documentation

## Notes de développement

### Structure de la table `clients_contacts` (à créer)
```sql
CREATE TABLE clients_contacts (
    rowid INT PRIMARY KEY AUTO_INCREMENT,
    fk_client INT NOT NULL,
    nom VARCHAR(100),
    prenom VARCHAR(100),
    fonction VARCHAR(100),
    telephone VARCHAR(20),
    mobile VARCHAR(20),
    email VARCHAR(255),
    principal TINYINT DEFAULT 0,
    active TINYINT DEFAULT 1,
    date_creat DATETIME,
    fk_user_creat INT,
    date_modif DATETIME,
    fk_user_modif INT,
    FOREIGN KEY (fk_client) REFERENCES clients(rowid)
);
```

### Modifications table `devis` pour SAP
```sql
ALTER TABLE devis ADD COLUMN chk_prise_en_charge TINYINT DEFAULT 0;
ALTER TABLE devis ADD COLUMN fk_user_prise_en_charge INT;
ALTER TABLE devis ADD COLUMN date_prise_en_charge DATETIME;
ALTER TABLE devis ADD COLUMN fk_user_transfert_edi INT;
ALTER TABLE devis ADD COLUMN date_transfert_edi DATETIME;
ALTER TABLE devis ADD COLUMN erreur_transfert_edi TEXT;
```

## Résumé de l'état actuel

### ✅ Réalisations (v2.0.2 - 12 septembre 2025)
1. **Migration DEV complétée** : Architecture séparée application/BDD
2. **Base unique `cleo`** : Fusion réussie de 3 bases en une seule
3. **Sécurité renforcée** : PDO, requêtes préparées, variables d'environnement
4. **Container `dva-front`** : MariaDB supprimé, application PHP uniquement
5. **Container `maria3`** : Base de données centralisée opérationnelle
6. **Audit de sécurité complété** : 14 vulnérabilités SQL identifiées et corrigées
   - 8 critiques (fonction autocomplete, injections dans cjxpost.php, mclients.php, mdevis.php)
   - 6 moyennes (cjxdevis.php, cjxexport.php, cjximport.php, mexpxls.php)
7. **Fonctionnalité Réactivation devis** : Bouton permettant de réactiver les devis archivés (statut 20 → 1)

### 🎯 Prochaines étapes prioritaires
1. **Migration PROD vers IN4** : Export/Import des containers vers `pra-front` et `maria4`
2. **Fonctionnalités métier** : Points 14, 16 (voir sections ci-dessus)
3. **Sécurité XSS** : Audit et correction des failles XSS potentielles
4. **Tests** : Mise en place de tests automatisés de sécurité

---

*Document mis à jour le 12 septembre 2025*  
*Version 2.0.2 - Sécurité SQL complète*