3.4- Détail des priorités dans ladéfinission des règles de commission
3.4.1- Gestion des dates
• Si l'utilisateur a soumis une date de début via le formulaire, on l'utilise ; sinon, par défaut : le 1er jour du mois courant.
• Même logique pour la date de fin, mais par défaut : le dernier jour du mois courant (date('m')+1, 0 → jour "0" du mois suivant = dernier jour du mois en cours).
• L'heure est fixée à 12h00 (midi) pour éviter les problèmes de fuseaux horaires.
3.4.2- Choix de la méthode de calcul
COMMISSION_METHOD (base de calcul)
| Valeur | Signification |
| ORDER | Commission sur les commandes (dès la commande) |
| PAYMENT | Commission sur les paiements reçus (au prorata) |
| FULLPAYMENT | Commission uniquement une fois la facture entièrement payée |
COMMISSION_BASE (assiette de commission)
| Valeur | Signification |
| TURNOVER | Commission sur le chiffre d'affaires |
| MARGIN | Commission sur la marge |
3.4.3- Boucle de calcul et logique de "rupture"
a) Option COMMISSION_RESTRICT_TO_CONTACT
Avant d'afficher une ligne, on vérifie si un autre contact de type "commissionné" existe sur la facture. Si oui → le commercial "générique" n'est pas commissionné sur cette facture (seul le contact dédié l'est).
b) La logique de rupture (saut à chaque sous total)
• Rupture par agent : quand on change d'agent commercial, on affiche le sous-total du précédent, on cumule dans les totaux généraux, puis on réinitialise les compteurs et on mémorise les infos du nouvel agent.
• Rupture par client : idem quand un agent a plusieurs clients.
• Sinon : on mémorise simplement les infos (société, facture, paiement, bases de commission) sans cumul.
Résultat par (agent, client, facture, ligne, date)
├─ 1 → 1ère itération : mémorise agent/client/facture + calcule taux
├─ 2 → même agent/client → cumul silencieux (ou ligne détail)
├─ 3 → changement de CLIENT → rupture client : sous-total client affiché
├─ 4 → cumul...
├─ 5 → changement d'AGENT → rupture agent : sous-total agent affiché
├─ 6 → cumul...
└─ Fin de boucle → affichage du DERNIER sous-total + ligne des TOTAUX GÉNÉRAUX
À chaque rupture, la commission est calculée : taux de commission (%) × base (CA ou marge).
3.4.4- Taux simple ou cumulé
• Sans COMMISSION_CUMUL : la première règle correspondante donne le taux.
• Avec COMMISSION_CUMUL : on continue de parcourir toutes les règles et on additionne les taux. Permet par exemple : 2% de base + 3% si catégorie produit premium + 1% si client fidèle = 6%
3.4.5- Priorités règle de commissionnement
Une règle est sélectionnée par 7 tests successifs :
Tableau des règles de commission :
└── Niveau 1 : fk_user → À QUI s'applique la règle (agent/commercial) ou -1 (tous)
└── Niveau 2 : fk_contact_type → TYPE DE CONTACT concerné ou -1 (tous types)
└── Niveau 3 : fk_soc → CLIENT (tiers) précis ou -1 (tous)
└── Niveau 4 : fk_prodcat → CATÉGORIE de PRODUIT ou -1 (toutes)
└── Niveau 5 : fk_custcat → CATÉGORIE de CLIENT ou -1 (toutes)
└── Niveau 6 : fk_product_type → 0 = PRODUIT, 1 = SERVICE, -1 = les deux
└── Niveau 7 : limite → SEUIL (montant ou % de remise)
└── = valeur : le TAUX de commission (ex: 8 pour 8%)
Au sein de chaque règle, la priorité est accordée selon les critères :
1. QUI est commissionné : le contact commissionné > le commercial du tiers > tous (-1)
2. TYPOLOGIE : type de contact précis > tous types (-1)
3. CLIENT : client précis > tous (-1)
4. CATÉGORIE PRODUIT : catégorie précise > toutes (-1)
5. CATÉGORIE CLIENT : catégorie précise > toutes (-1)
6. TYPE PRODUIT/SERVICE : produit OU service > les deux (-1)
7. SEUIL : traité séparément (barème à l'intérieur d'une règle)
Exemple pour 5 cas: (du plus prioritaire au moins prioritaire)
| cat. prod | cat. client | client | type prod | Interprétation | |
| (A) | ✔ précise | — | ✔ précis | ✔ précis | Très spécifique : catégorie produit + client + type |
| (B) | — | — | ✔ précis | ✔ précis | Moins spécifique : pas de catégorie produit |
| (C) | ✔ précise | — | ✔ précis | — | Pas de type produit |
| (D) | — | — | ✔ précis | — | Pas de catégorie produit ni de type |
| (E) | ✔ précise | ✔ précise | — | ✔ précis | On remet les catégories et type mais on enlève le client et on ajoute la catégorie client |
Nb : si 2 règles arrivent à égalité c’est la plus anciennement créée qui s’applique.