Bonjour,
J'ai creusé un peu la question ce matin.
La récupération du stock des produits en bundle pour le produit principal dans les listings est fait par le code:
if($options['bundle_qty']) {
$pids = array();
foreach($rows as $row) {
if($row->product_quantity >= 0)
continue;
$pids[] = (int)$row->product_id;
}
if(!empty($pids)) {
$query = 'SELECT pr.product_id, MIN( p.product_quantity / pr.product_related_quantity) as qty '.
' FROM '.hikashop_table('product_related').' AS pr '.
' INNER JOIN '.hikashop_table('product').' AS p ON pr.product_related_id = p.product_id '.
' WHERE pr.product_id IN ('.implode(',', $pids).') AND pr.product_related_type = '.$this->database->quote('bundle').
' AND p.product_quantity >= 0';
$this->database->setQuery($query);
$relations = $this->database->loadObjectList('product_id');
foreach($rows as $k => $row) {
if(!isset($relations[(int)$row->product_id]))
continue;
$rows[$k]->product_quantity = floor($relations[(int)$row->product_id]->qty);
}
}
}
dans administrator/components/com_hikashop/classes/product.php
En lisant le code, ce que je vois, c'est que si au moins un produit en bundle a un stock différent de illimité, alors le système remplace le stock du produit principal par le stock minimum des produits en bundle.
Alors que sur la page produit, le stock du produit principal n'est remplacé par le stock des produits en bundle que si le stock du produit principal est illimité.
Je pense que c'est là d'où vient l'incohérence entre le listing et la page produit.
Rajoutez le code:
if($row->product_quantity>=0)
continue;
avant la ligne:
if(!isset($relations[(int)$row->product_id]))
dans administrator/components/com_hikashop/classes/product.php pour que sur les listings aussi, la quantité des produits en bundle ne soit prise en compte dans l'affichage que si le produit principal a une quantité "illimité" et cela devrait fournir un affichage cohérent entre le listing et la page détails.