# CLEO - Application de gestion de devis

## Vue d'ensemble

CLEO est une application web de gestion de devis développée en PHP 8.3 pour les PME. Elle utilise une architecture MVC classique avec un framework maison appelé "d6".

**Version actuelle** : 2.0.3 (gestion multi-contacts complétée le 21 octobre 2025)

## Architecture technique

### Stack technologique
- **Langage** : PHP 8.3
- **Architecture** : MVC (Model-View-Controller)
- **Framework** : Framework maison "d6"
- **Base de données** : MariaDB 11.4
- **Connexion DB** : PDO avec requêtes préparées
- **Configuration** : Variables d'environnement (.env)
- **Gestion des dépendances** : Composer
- **JavaScript** : Vanilla JS uniquement (PAS de jQuery)
- **CSS Framework** : Bootstrap 3.3.7 (sans jQuery)
- **Bibliothèques principales** :
  - PHPMailer 6.8 (envoi d'emails)
  - PHPSpreadsheet 1.28 (export/import Excel)
  - phpseclib 3.0 (fonctions de sécurité)

### Structure des dossiers
```
cleo/
├── config/           # Configuration de l'application
│   ├── conf.php     # Configuration principale (DB, paths, etc.)
│   └── init.php     # Initialisation et définition des constantes
├── controllers/      # Contrôleurs MVC
│   ├── cjx*.php    # Contrôleurs AJAX
│   └── c*.php      # Contrôleurs standards
├── models/          # Modèles de données
├── views/           # Vues et templates
│   └── layouts/     # Layouts réutilisables
├── pub/             # Ressources publiques
│   └── res/
│       └── d6/      # Framework d6
├── vendor/          # Dépendances Composer
└── index.php        # Point d'entrée principal
```

## Fonctionnalités métier

### Modules principaux
1. **Gestion des devis** (`cdevis.php`, `mdevis.php`, `vdevis.php`)
   - Création, modification, duplication de devis
   - Workflow de validation multi-niveaux
   - Historisation des modifications
   - Calcul automatique des marges
   - Gestion des remises par paliers de quantité

2. **Gestion des clients** (`cclients.php`)
   - Base clients avec contacts multiples (table `clients_contacts`)
   - Gestion des contacts via modale Bootstrap intégrée aux devis
   - Contact principal automatique avec indicateur visuel
   - Segmentation par secteur géographique
   - Types de clients paramétrables
   - Import/export de données

3. **Gestion des marchés** (`cmarches.php`)
   - Catalogue de marchés
   - Association aux devis
   - Visibilité paramétrable par rôle

4. **Administration** (`cusers.php`, `csap.php`)
   - Gestion des utilisateurs
   - Système de rôles et permissions
   - Interface d'administration

### Système de rôles
- **DIR-CO** (Direction commerciale) : Accès complet, vision globale
- **DV** (Directeur des ventes) : Gestion de son équipe de RR
- **RR** (Responsable régional) : Gestion de ses propres devis
- **Admin** (rôle 90) : Administration système

## Base de données

### Architecture actuelle
- **Base unique** : `cleo` sur le container `maria3`
- **Connexion** : PDO avec pattern Singleton
- **Sécurité** : Requêtes préparées systématiques

### Tables principales
- `devis` : Table principale des devis (champ `fk_contact` depuis v2.0.3)
- `devis_produits` : Lignes de produits des devis
- `devis_histo` : Historique des modifications
- `clients` : Base clients
- `clients_contacts` : Contacts multiples par client (v2.0.3)
- `produits` : Catalogue produits
- `produits_familles` : Familles de produits avec marges
- `marches` : Référentiel des marchés
- `users` : Utilisateurs et hiérarchie
- `x_*` : Tables de référence (statuts, types, etc.)
- `y_pages` : Configuration des pages/routes

## Points de sécurité

### Vulnérabilités corrigées

✅ **v2.0.1 - Stockage des mots de passe**
- Credentials externalisés dans `.env`
- Variables d'environnement utilisées systématiquement

✅ **v2.0.1 - Protection contre les injections SQL**
- Migration complète vers PDO
- Requêtes préparées dans la classe `Database`
- Pattern Singleton pour la connexion

✅ **v2.0.1 - Gestion des erreurs sécurisée**
- Classe `Database` avec gestion d'erreurs centralisée
- Logging contrôlé par variables d'environnement
- Mode debug désactivable en production

✅ **v2.0.2 - Corrections critiques**
- Sanitisation stricte des entrées utilisateur
- Validation des paramètres AJAX
- Fonction `nettoie_input()` utilisée systématiquement

✅ **v2.0.3 - Gestion multi-contacts sécurisée**
- Contrôleur AJAX `cjxcontacts.php` avec requêtes préparées
- Validation des foreign keys et soft delete
- Prévention de suppression du dernier contact actif

### Vulnérabilités restantes à traiter

#### 1. Injections SQL résiduelles
- **Localisation** : Certains contrôleurs (`controllers/cjx*.php`)
- **Problème** : Concaténations directes dans certaines requêtes complexes
- **Recommandation** : Audit complet et migration progressive

#### 2. Configuration IP en dur
- **Localisation** : `config/conf.php`
- **Problème** : Certaines IPs encore hardcodées
- **Recommandation** : Migration complète vers `.env`

### Points positifs de sécurité
- Utilisation de `password_hash()` avec bcrypt pour les mots de passe utilisateurs
- Fonction `nettoie_input()` pour la sanitisation des entrées
- Gestion des sessions PHP native
- Contrôle d'accès basé sur les rôles

## Performances et optimisations

### Points d'attention
1. **Requêtes non optimisées** : Pas de pagination visible dans les listes
2. **Absence de cache** : Requêtes répétitives non mises en cache
3. **Chargement des données** : Chargement complet des listes sans limite

### Recommandations
- Implémenter une pagination côté serveur
- Ajouter un système de cache (Redis/Memcached)
- Optimiser les requêtes avec des index appropriés
- Utiliser le lazy loading pour les données volumineuses

## Qualité du code

### Points forts
- Structure MVC claire et cohérente
- Séparation des responsabilités respectée
- Nommage cohérent des fichiers et fonctions
- Utilisation de Composer pour les dépendances
- JavaScript Vanilla (pas de dépendance jQuery)

### Axes d'amélioration
1. **Standards PHP modernes**
   - Absence de namespaces
   - Pas d'autoloading PSR-4
   - Manque de typage strict PHP 8.3

2. **Documentation**
   - Peu de commentaires PHPDoc
   - Absence de documentation API
   - Pas de README technique

3. **Tests**
   - Aucun test unitaire visible
   - Pas de tests d'intégration
   - Absence de CI/CD

4. **Gestion des erreurs**
   - Try/catch non systématiques
   - Logging basique via `eLog()`
   - Pas de monitoring applicatif

## Plan d'amélioration recommandé

### Court terme (Sécurité - En cours)
1. ✅ Migrer les credentials vers des variables d'environnement
2. ✅ Remplacer les requêtes SQL par des requêtes préparées (classe Database)
3. ✅ Implémenter une gestion d'erreurs sécurisée
4. ⏳ Auditer et corriger les failles XSS potentielles

### Moyen terme (Qualité et maintenabilité)
1. Migrer vers une structure PSR-4 avec namespaces
2. Implémenter des tests unitaires (PHPUnit)
3. Ajouter une documentation PHPDoc complète
4. Mettre en place un système de logging structuré (Monolog)

### Long terme (Evolution et performance)
1. Considérer la migration vers un framework moderne (Symfony/Laravel)
2. Implémenter une API REST pour découpler front/back
3. Ajouter un système de cache performant
4. Mettre en place un pipeline CI/CD

## Architecture de déploiement

### Environnement DEV (Actuel - IN3)
- **Container `dva-front`** : Application PHP 8.3 + Nginx (Alpine Linux)
  - IP : 13.23.33.42
  - MariaDB : **Supprimé** (12/09/2025)
- **Container `maria3`** : Base de données MariaDB 11.4
  - IP : 13.23.33.4
  - Base : `cleo`

### Environnement PROD (Futur - IN4)
- **Container `nx4`** : Application PHP
- **Container `maria4`** : Base de données

## Conclusion

CLEO v2.0.3 représente l'aboutissement de trois itérations majeures d'amélioration :

**v2.0.1 - Architecture sécurisée**
- Base de données unique et centralisée
- Connexions PDO avec requêtes préparées
- Configuration externalisée
- Séparation application/base de données

**v2.0.2 - Sécurité renforcée**
- Sanitisation systématique des entrées
- Validation stricte des paramètres AJAX
- Corrections de vulnérabilités critiques

**v2.0.3 - Gestion multi-contacts**
- Migration vers table relationnelle `clients_contacts`
- Interface modale intégrée dans les devis
- CRUD complet avec soft delete
- Gestion automatique du contact principal

L'application dispose maintenant d'une base solide pour évoluer vers des standards modernes tout en maintenant sa stabilité opérationnelle.

---

*Document mis à jour le 21 octobre 2025*
*Version 2.0.3 - Gestion multi-contacts*