# Règles métier - Application CLEO Ce document recense les règles métier et de développement identifiées dans l'application CLEO. ## 1. Gestion des rôles et permissions ### 1.1 Hiérarchie des rôles - **DIR-CO** (fk_role = 1) : Direction commerciale - Accès complet aux devis (propres + statut >= 2) - Vision globale de l'activité - **DV** (fk_role = 2) : Directeur des ventes - Accès à ses propres devis - Accès aux devis de ses RR subordonnés (statut >= 3) - Récupération des RR via `fk_parent` dans la table `users` - **RR** (fk_role = 3) : Responsable régional - Accès uniquement à ses propres devis - **Admin** (fk_role = 90) : Administration système - Accès complet à l'administration ### 1.2 Visibilité des devis (mdevis.php) La clause WHERE pour filtrer les devis dépend du rôle : - **DIR-CO** : `d.fk_user = :fkUser OR d.fk_statut_devis >= 2` - **DV** : `d.fk_user = :fkUser OR (d.fk_statut_devis >= 3 AND d.fk_user IN ([RR_IDS]))` - **RR** : `d.fk_user = :fkUser` ## 2. Gestion des marchés et produits ### 2.1 Types de marchés - **Marché standard** : Contient ses propres produits uniquement - **Marché hybride** (`chk_marche_hybride = 1`) : Combine les produits du marché + produits du marché 999 - **Marché avec remise sur TG** (`chk_remise_sur_tg = 1`) : Charge uniquement les produits du marché 999 - **Marché 999** : Marché "Hors marché" ou "Tarif général" ### 2.2 Chargement des produits (load_devis_marche_produits) | Type de marché | chk_remise_sur_tg | chk_marche_hybride | Produits chargés | |---------------|-------------------|-------------------|------------------| | Spécifique | 1 | - | Tous les produits du marché 999 | | Spécifique | 0 | 0 | Produits du marché uniquement | | Spécifique | 0 | 1 | Produits du marché + produits du 999 non présents | | 999 (Hors marché) | - | - | Tous les produits du marché 999 | ### 2.3 Terme "Purchasing" Quand `terme_achat = 'Purchasing'` dans `marches_listes` : - Récupère les prix d'achat nets depuis le marché 999 - Applique les paliers de remise du marché 999 ## 3. Sécurité et développement ### 3.1 Accès base de données - **Obligatoire** : Utiliser la classe `Database` avec ses méthodes - **Interdit** : Appeler directement `$db->prepare()` sur l'objet Database - **Méthodes disponibles** : - `$db->fetchAll($sql, $params)` : Récupérer plusieurs lignes - `$db->fetchOne($sql, $params)` : Récupérer une ligne - `$db->query($sql, $params)` : Exécuter une requête - `$db->lastInsertId()` : Récupérer le dernier ID inséré ### 3.2 Protection contre les injections SQL - Utiliser `intval()` pour les entiers dans les requêtes non préparées - Utiliser `nettoie_input()` pour nettoyer les entrées utilisateur - Privilégier les requêtes préparées via la classe Database ### 3.3 Variables de sécurité - `$cidSafe = intval($cid)` : Version sécurisée pour les requêtes SQL - Attention lors de la modification de variables : recalculer ou utiliser directement `intval()` ## 4. Statuts des devis ### 4.1 Statuts principaux - **1** : En cours - **2** : Validé niveau 1 - **3** : Validé niveau 2 - **20** : Archivé ### 4.2 Réactivation des devis - Un devis archivé (statut 20) peut être réactivé (statut 1) - La réactivation est tracée dans `devis_histo` - Disponible selon les droits du rôle ## 5. Conventions de nommage ### 5.1 Fichiers - **Contrôleurs** : `c*.php` pour les standards, `cjx*.php` pour AJAX - **Modèles** : `m*.php` - **Vues** : `v*.php` ### 5.2 Tables de base de données - **Tables principales** : Nom simple (`devis`, `clients`, `produits`) - **Tables de référence** : Préfixe `x_` (`x_familles`, `x_statuts`) - **Tables système** : Préfixe `y_` (`y_pages`) ou `z_` (`z_logs`, `z_sessions`) ## 6. Gestion des prix et marges ### 6.1 Prix nets - `chk_prix_net = 1` : Prix non modifiable (marché hybride) - `chk_prix_net = 0` : Prix modifiable avec marges ### 6.2 Paliers de remise Les produits peuvent avoir jusqu'à 6 paliers de remise : - `prc_discount_1` avec `quantite_1` - `prc_discount_2` avec `quantite_2` - ... jusqu'à 6 --- *Document créé le 16 septembre 2025* *À mettre à jour au fur et à mesure des découvertes*