Initial commit - Application CLEO de gestion de devis

- Architecture MVC avec framework maison d6
- Modules : devis, clients, marchés, SAP
- Documentation initiale (README et TODO)
- Configuration Composer avec dépendances

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-11 18:26:07 +02:00
commit 046c23f2d2
2378 changed files with 163904 additions and 0 deletions

194
docs/README.md Normal file
View File

@@ -0,0 +1,194 @@
# CLEO - Analyse de l'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".
## Architecture technique
### Stack technologique
- **Langage** : PHP 8.3
- **Architecture** : MVC (Model-View-Controller)
- **Framework** : Framework maison "d6"
- **Base de données** : MySQL/MariaDB
- **Gestion des dépendances** : Composer
- **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
- 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
### Bases multiples
- **uof_frontal** : Base principale de l'application
- Possibilité de connexion à plusieurs bases selon le contexte
### Tables principales identifiées
- `devis` : Table principale des devis
- `devis_produits` : Lignes de produits des devis
- `devis_histo` : Historique des modifications
- `clients` : Base clients
- `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 critiques identifiées
#### 1. Stockage des mots de passe en clair
- **Localisation** : `config/conf.php:40-50`
- **Risque** : Exposition des credentials de base de données
- **Recommandation** : Utiliser des variables d'environnement (.env)
#### 2. Injections SQL potentielles
- **Localisation** : Multiple, ex: `controllers/cjxdevis.php`
- **Problème** : Concaténation directe de variables dans les requêtes SQL
- **Exemple** :
```php
$sql .= ' AND SUBSTR(cp,1,2) IN (' . $depts . ') ';
```
- **Recommandation** : Utiliser des requêtes préparées PDO
#### 3. Gestion des erreurs non sécurisée
- **Localisation** : `pub/res/d6/d6_tools.php:66-84`
- **Problème** : Pas de gestion d'erreurs robuste pour les connexions DB
- **Recommandation** : Implémenter un système de logging sécurisé
#### 4. Configuration sensible exposée
- **Localisation** : `config/conf.php:30`
- **Problème** : IP exclue hardcodée dans le code
- **Recommandation** : Externaliser dans un fichier de configuration
### 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
### 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é critique)
1. Migrer les credentials vers des variables d'environnement
2. Remplacer les requêtes SQL par des requêtes préparées
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
## Conclusion
CLEO est une application fonctionnelle qui répond aux besoins métier de gestion de devis pour PME. Cependant, elle nécessite des améliorations importantes en termes de sécurité et de modernisation du code pour garantir sa pérennité et sa maintenabilité.
Les priorités absolues sont la sécurisation des accès base de données et la protection contre les injections SQL. Une fois ces points critiques adressés, l'application pourra évoluer progressivement vers des standards plus modernes.
---
*Document généré le 11 septembre 2025*
*Analyse basée sur l'examen du code source de l'application CLEO*

162
docs/TODO.md Normal file
View File

@@ -0,0 +1,162 @@
# TODO - Évolutions CLEO
## Fonctionnalités à développer
### Module Devis
#### 6. Modifier un devis archivé
**Priorité**: Haute
**Description**: Permettre la modification d'un devis archivé et son renvoi pour traitement sans nécessiter de duplication.
**Tâches**:
- [ ] Ajouter un bouton "Réactiver" sur les devis archivés (statut 20)
- [ ] Permettre le changement de statut d'archivé vers "En cours"
- [ ] Conserver l'historique de réactivation dans `devis_histo`
- [ ] 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)
## Améliorations techniques prioritaires
### Sécurité (URGENT)
- [ ] Migrer les credentials DB vers des variables d'environnement
- [ ] Remplacer toutes les requêtes SQL par des requêtes préparées
- [ ] Audit et correction des failles XSS
### 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;
```
---
*Document créé le 11 septembre 2025*
*À mettre à jour au fur et à mesure de l'avancement des développements*