Fonctionnalités principales : 1. Marchés hybrides - Onglet Mercurial - Ajout onglet Mercurial avec style distinct (vert, gras, blanc) - Affichage des produits mercuriaux pour marchés hybrides - Filtrage automatique des produits "Hors Marché 999" - Documentation Phase 2 avec CAS 1 et CAS 2 de marchés hybrides - Règles métier pour validation différenciée (devis 100% mercurial vs mixte) 2. Corrections bugs - Fix flag chkChange sur onglet "Sélection Produits" (callback asynchrone) - Plus d'alerte intempestive après sauvegarde des produits 3. Outils de déploiement - Nouveau script deploy-file.sh pour déploiement unitaire (DEV/PROD) - Amélioration deploy-cleo.sh 4. Gestion multi-contacts (v2.0.3) - Contrôleur AJAX cjxcontacts.php - Script migration clients_contacts - Documentation complète 5. Documentation - Mise à jour TODO.md avec Phase 2 marchés hybrides - Mise à jour README.md v2.0.3 - Ajout RULES.md - Ajout migration_clients_contacts.sql 6. Nettoyage - Suppression fichiers obsolètes (conf_new.php, conf_old.php, uof_linet_20250911.sql) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
248 lines
8.9 KiB
Markdown
248 lines
8.9 KiB
Markdown
# 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* |