Erreur méthode load_stock de la class product

Le tableau stock_warehouse n’est pas initialisé avant de mettre à jour les informations.
Typiquement, il manque une ligne comme:

$this->stock_warehouse = Array();

vers la ligne 2602 du fichier /htdocs/product/class/product.class.php

En fait les initialisation de tableau doivent être fait au début lors de la définition de la classe
je viens de regarder dans les sources du core, c’est déjà corrigé pour la prochaine version

En fait, le bug se voit quand on tente de lire tous les éléments constituant un produit virtuel. Le fait de faire un fetch() suivi d’un load_stock() sur un objet qui n’est pas détruit et re-créé.
Ex:

$produit = new Produit($db);
$produit->fetch($id1);
$produit->load_stock();
$produit->fetch($id2);
$produit->load_stock();

Supposons la situation suivante:

         Entrepot1  Entrepot2
$id1       10            12
$id2        3             0

Lors du second appel, il reste un artefact du premier appel qui associe un stock de 12 au produit2 dans l’entrepôt 2.

J’espère avoir été clair :slight_smile:

oui,
Je pensais qu’il s’agissait d’un problème de déclaration de variable, pas d’initialisation…
Par contre je pense qu’il faut initialiser ce tableau lors du fetch pas lors du load_stock.

C’est vrai, c’est plus joli.
On gagne peut-être en perf si on ne le fait que dans load_stock(). De plus, tout rappel à load_stock() s’assure de mettre à jour le tableau en fonction de la situation réelle au moment de l’appel (si plusieurs utilisateurs connectés).

Pour mémoire, le load_stock était fait auparavant à chaque fetch mais il a été mis en commentaire dans la version actuelle avec le commentaire suivant :
// We should not load stock at each fetch. If someone need stock, he must call load_stock after fetch.

Recharger le stock est effectivement « couteux », cependant réinitialiser le tableau l’est beaucoup moins et évite les « effets de bord » (il vaut mieux un tableau vide qu’avec de mauvaise données…)
edit : je viens de « puller » un correctif sur le sujet : https://github.com/Dolibarr/dolibarr/pull/1532

N’hésite pas à t’inscrire sur le git pour en faire de même :wink:

1 « J'aime »

Juste pour info, on a le même cas de figure avec la fonction get_sousproduits_arbo() ligne 2412 du fichier /htdocs/product/class/product.class.php, où la variable $this->sousprods n’est pas initialisée avant d’ajouter les données.
Il conviendrait sans doute de rajouter ligne 2414 par exemple

$this->sousprods = array();