Erreur dans le calcul du "Meilleur prix d'achat"

Nous avons migré sur Dolibarr v.14.0.3 récemment, et j’ai remarqué que le « Meilleur prix d’achat » des produits est maintenant faussé :

Le meilleur prix d’achat du produit ci-dessus devrait être 178,30/2 = 89.15, mais est affiché à 44,575.

S’agit-il d’un bug de cette version ? Ou d’un potentiel problème de configuration ? Quelle est la formule utilisée pour calculer ce « Meilleur prix d’achat » ?

[EDIT] Après vérification, ce phénomène survient pour tous mes fournisseurs et est donc indépendant du fournisseur lui-même (remise globale).

Je vous remercie,

Fabien

Bonjour,
Idem pour moi : avez-vous trouvé l’origine du problème ?
Merci d’avance
Sterwen

Bonjour,
J’ai exactement le même problème.
Avez-vous trouvé une solution?
Merci d’avance
Nicolas

Je viens de tester et je reproduis aussi ce problème, je pense qu’il s’agit d’un bug. En effet, dans la classe ProductFournisseur, la fonction find_min_price_product_fournisseur() applique une première fois la réduction (autour de la ligne 820) :

// discount calculated buy price
$fourn_unitprice = $record["unitprice"] * (1 - $record["remise_percent"] / 100) - $record["remise"];

et la remise est ré-appliquée au moment d’afficher le prix, dans la méthode display_price_product_fournisseur() de la même classe, autour de la ligne 950 :

$out .= '<tr><td class="right">'.($showunitprice ?price($productFourn->fourn_unitprice * (1 - $productFourn->fourn_remise_percent / 100) - $productFourn->fourn_remise) : '').'</td>';

Naïvement, je dirais que supprimer l’application de la remise au moment de l’affichage ou au moment du chargement résoudrait le problème, mais il faut évidemment analyser l’impact : je suis sûr qu’une résolution simpliste ajouterait des bugs ailleurs.

L’origine du bug est sur la ligne 849, modifiée le premier octobre 2021 pour que la recherche du meilleur prix fournisseur tienne compte des prix dynamiques, mais qui provoque cette double application de la réduction.

[edit]

J’ai proposé un correctif, on verra s’il est bon (je suis certain qu’il résout le bug lorsqu’on n’utilise pas le module prix dynamique, mais je ne suis pas sûr qu’il soit bon lorsque ce module est activé).

Si vous n’utilisez pas le prix dynamique et que vous ne souhaitez pas attendre la publication d’un correctif final, vous pouvez appliquer le correctif proposé en attendant, mais je vous conseille plutôt d’attendre afin d’être sûrs d’avoir le meilleur correctif :slight_smile:

1 « J'aime »

Bonjour,
Merci de ce partage. Notre prestataire a fait une correction également, et a fait remonter le bug.
Cela devrait régler définitivement le problème.
Sterwen