Module Prix dynamiques

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
Prix Dynamiques
Numéro/ID du module 2200
Doc utilisateur du module Cette page
Doc développeur du module Module Prix Dynamiques (développeur)

Introduction

Ce module permet d'avoir un prix de produit qui se calcule dynamiquement au moment de l'ajout du produit dans un un document (devis, commande, facture,).

Installation

Ce module est livré en standard avec la distribution de Dolibarr, aussi il est déjà installé.

Par contre, ce module étant au statut expérimental, pour pouvoir l'utiliser, il est nécessaire d'activer MAIN_FEATURES_LEVEL=1 dans Accueil -> Configuration -> Divers :

Level of features to show:

  • -1 = stable + deprecated
  • 0 = stable only (default)
  • 1 = stable + experimental
  • 2 = stable + experimental + development

Attention, des bugs peuvent être présents.

Configuration

Pour utiliser ce module, il vous faut d'abord l'activer. Pour cela, après s'être connecté avec un compte administrateur, aller sur la page "Accueil - Configuration - Modules".

Choisissez l'onglet dans lequel apparaît le module puis cliquez sur "Activer".

Le module est alors activé.

Si un pictogramme Cog circle.svg apparaît sur la vignette ou à la fin de la ligne du module, cliquez dessus pour accéder à la page de paramétrage spécifique à ce module.

Utilisation

Reconnaissons-le, c'est probablement le module le plus cryptique de Dolibarr. Mais il a titillé votre curiosité, car vous sentez bien qu'il peut faire des choses très particulières...

Et c'est le cas en effet : le concept est de calculer le prix unitaire en fonction des paramètres du produit. Exemple type : une barre en acier dont le prix sera calculé au mètre (information entrée sur le devis/commande/facture) mais indexé sur un prix au volume (ou au poids, ce qui revient au même).

Mais comment qu'on fait ? Il faut déjà accéder à l'éditeur d'expression de prix (la formule, quoi). Pour cela, une fois le module activé, se rendre sur le produit concerné, puis l'onglet "prix de vente" et demander à modifier le prix par défaut, on a alors le bouton "Editeur d'expression de prix" tant attendu.

On clique dessus et pis si la formule a déjà été rentrée, on la sélectionne, sinon, on choisit 'Nouveau', on lui donne un nom et on tape la formule (qui peut se faire sur plusieurs lignes pour des calculs intermédiaires).

Là bien sûr on pleure un peu car si le dictionnaire des calculs est simple (caractères standards =*/+-), il faut encore connaître les noms des variables d'intérêt qui sont les champs de l'objet produit concerné (classe Product, oui il faut aller voir le code). Autant dire que si cette fonctionnalité vous intéresse, ou vous avez du temps, ou il est raisonnable de faire appel à un prestataire Dolibarr...

Le calcul doit commencer par un price=, cependant ne rien indiquer fonctionne aussi.

Exemple, indexer le prix de vente sur le coût de revient :

price = #global_coefvente# * #cost_price#

où #global_coefvente# fait référence à la variable coefvente définie dans la configuration du module, tandis que #cost_price# est le champ du produit définissant son prix de revient (défini manuellement dans l'onglet prix d'achat du produit). Remplacer par #pmp# si vous préférez le prix moyen pondéré. Vous aurez compris que # encadrant un nom de variable se réfère à un paramètre du produit, sauf s'il commence par global_ où il se réfère à un paramètre configuré pour le module.

Ce module est donc très puissant. Il ne lui manque que la gestion des tests conditionnels (accessible en remplaçant la librairie support evalmath par celle de Moodle (https://github.com/moodle/moodle/blob/master/lib/evalmath/evalmath.class.php)). Lorsque les calculs deviennent complexes (en tout cas longs et verbeux), il peut également être utile de modifier le champ expression de la table llx_c_price_expression qui a une longueur maximale de 80 caractères par défaut.

Opérateurs

Ne pas hésiter à compléter la liste.

Fonctionne dans :
Caractère Rôle Editeur d'expression de prix Attributs supplémentaires Exemple
price = A toujours placer au début de l'expression (correspond à la variable calculée).

En alternative, ne rien indiquer fonctionne aussi.

X price = #supplier_min_price#

#supplier_min_price#

#nomvar# Pour signaler une variable où nomvar est le nom de la variable dans le code (à placer au début et à la fin du nom de variable sans espace) X #supplier_min_price#
+ Addition X X 3 + 2
- Soustraction X X 3 - 2
* Multiplication X X 3 * 2
/ Division X X 3 / 2
( ) Parenthèses à utiliser pour la priorité entre multiplication et addition. X X (2+3)*2
( ) Parenthèses à utiliser autour d'une condition pour la délimiter si elle est imbriquée dans une autre condition. X ($object->weight > 0 ? 20 : 0 ) > 0 ? 'jaune' : 'rouge'
$nomtable->nomvar A utiliser si la variable nomvar est dans une table nomtable du code pouvant être appelée (ex : Attributs supplémentaires du module Produits) X $object->weight
; Pour séparer les expressions s'il y en a plusieurs dans la même formule X
A + B "OU" logique (la condition A ou la condition B ou les deux doivent être vrais) X isset($object->weight) && $object->weight > 0
A && B "ET" logique (les conditions A et B doivent être vraies) X
A == B Egalité logique (A doit être égal à B pour valider la condition) X
A > B A doit être strictement plus grand que B X
A < B A doit être strictement plus petit que B X
X ? Y : Z Equivaut respectivement au "then" et au "else" de l'expression "if X then Y else Z". X $object->weight > 0 ? 20 : 0

Fonctions

Ne pas hésiter à compléter la liste.

Fonction Rôle Exemple
X ? Y : Z If X Then Y Else Z : si la condition X est satisfaite, appliquer Y, sinon appliquer Z. weight > 0 ? 2 * weight : 0 (si le poids est supérieur à zéro, renvoyer deux fois le poids, sinon renvoyer zéro).
isset(X) Vérifie si la variable X a une valeur définie. Si Poids = "" et Volume = 500 mL, le poids n'a pas de valeur définie -> isset(Poids) = 0.
round(X,2) Arrondit la variable X à 2 chiffres après la virgule. round(2.564,2) = 2.56

Liste des variables utilisables

Ne pas hésiter à compléter la liste.

Nom de la variable dans le code Chemin IHM correspondant Onglet IHM correspondant Champ IHM correspondant Testé dans la version Dolibarr
#global_NOMVARIABLE# Accueil -> Configuration -> Modules/Applications PRIX CALCULES DYN. Variable globale NOMVARIABLE v20.0.2
#supplier_min_price# Produits | Services -> Produits -> Liste -> choisir le produit Prix d'achat Prix quantité min. v20.0.2
#supplier_min_price_with_discount# Produits | Services -> Produits -> Liste -> choisir le produit Prix d'achat Prix quantité min. * ( 1 - Remise pour cette qté. ) v20.0.2
#pmp# Produits | Services -> Produits -> Liste -> choisir le produit Prix d'achat Prix moyen pondéré (PMP) v20.0.2
#supplier_quantity# Produits | Services -> Produits -> Liste -> choisir le produit Prix d'achat Qté achat minimum v20.0.2
#supplier_tva_tx# Produits | Services -> Produits -> Liste -> choisir le produit Prix d'achat Taux TVA (pour ce produit/fournisseur) v20.0.2
#tva_tx# Produits | Services -> Produits -> Liste -> choisir le produit Prix de vente Taux de taxe par défaut v20.0.2
#weight# Produits | Services -> Produits -> Liste -> choisir le produit Produit Poids v20.0.2
#localtax1_tx# Factures -> Factures fournisseur -> Liste -> choisir une facture Facture fournisseur Montant TVA calculé dans le Mode 1 v20.0.2
#localtax2_tx# Factures -> Factures fournisseur -> Liste -> choisir une facture Facture fournisseur Montant TVA calculé dans le Mode 2 v20.0.2

Liste des variables en erreur

Ne pas hésiter à compléter la liste.

Nom de la variable dans le code Chemin IHM correspondant Onglet IHM correspondant Champ IHM correspondant Testé dans la version Dolibarr
#cost_price# Produits | Services -> Produits -> Liste -> choisir le produit Prix d'achat Prix de revient Erreur inconnue '24' en v20.0.2
#price_min# Produits | Services -> Produits -> Liste -> choisir le produit Prix de vente Prix min Erreur inconnue '24' en v20.0.2
#length# Produits | Services -> Produits -> Liste -> choisir le produit Produit Longueur Erreur inconnue '24' en v20.0.2
#surface# Produits | Services -> Produits -> Liste -> choisir le produit Produit Surface Erreur inconnue '24' en v20.0.2

Exemples de formules fonctionnelles

Ne pas hésiter à compléter la liste.

Note importante : pour le calcul d'un prix TTC, il ne faut pas ajouter la TVA dans le calcul, car la multiplication est déjà faite implicitement par Dolibarr (on multiplierait sinon deux fois par la TVA).

Formule Chemin IHM correspondant Onglet IHM correspondant Champ IHM correspondant Usage Testé dans la version Dolibarr
price = #supplier_min_price_with_discount# * #global_coefvente# Produits | Services -> Produits -> Liste -> choisir le produit Prix de vente Modifier prix par défaut -> Editeur d'expression de prix Calcul du prix de vente TTC à partir du prix d'achat HT, de la remise produit, de la marge globale et de la TVA. v20.0.2
price = #supplier_min_price# * #global_coefvente# Produits | Services -> Produits -> Liste -> choisir le produit Prix de vente Modifier prix par défaut -> Editeur d'expression de prix Calcul du prix de vente TTC à partir du prix d'achat HT, de la marge globale et de la TVA. v20.0.2
price = #cost_price# * #global_coefvente# Produits | Services -> Produits -> Liste -> choisir le produit Prix de vente Modifier prix par défaut -> Editeur d'expression de prix Calcul du prix de vente TTC à partir du prix de revient, de la marge globale et de la TVA. v20.0.2
isset($object->weight) && $object->weight > 0 ?

round($object->price_ttc / ($object->weight_units == '-3' ? $object->weight / 1000 : $object->weight), 2) :

(isset($object->volume) && $object->volume > 0 ?

round($object->price_ttc / ($object->volume_units == '0' ? $object->volume / 1000 : $object->volume), 2) :

0)

Accueil -> Configuration -> Modules/Applications -> PRODUITS Attributs supplémentaires Nouvel attribut Cette formule calcule le Prix au kg ou au L du produit. Elle permet de gérer si le produit est solide (au poids) ou liquide (au volume), gère aussi si l’unité est g (-3) ou kg (0), ou bien millilitre (0) ou litre (98), et fait un arrondi à 2 chiffres après la virgule. v20.0.2

Limitations

Lorsque le prix d'achat HT est modifié (par exemple suite à une évolution tarifaire), dans Dolibarr v19.0.2 et v20.0.2 on peut constater que :

  • le prix de vente TTC dans l'onglet Prix de vente du produit se recalcule bien
  • le prix de vente TTC dans la liste des produits, dans les commandes en cours et dans les nouvelles commandes ne se recalcule pas.

Pour provoquer le recalcul, il faut manuellement, sur chaque produit dont le prix d'achat change, aller dans Prix de vente -> Modifier prix par défaut -> cliquer sur Enregistrer sans rien changer.

Une évolution du module pour prendre en compte ce recalcul serait la bienvenue.