Récemment


StockAvailable et setQuantity();


  • legacy

    Salut,

    Je deviens fou je ne comprends ce qu'il se passe et ça m'énerve.

    Prestashop 1.6.1.18 tout neuf

    Je m'explique je n'utilisais pas le module mailalerts pour les articles hors stock, j'ai décidé de l'installer. Il fonctionne très bien sauf que les clients ne reçoivent pas de mail quand je mets à jours les stocks.

    Dans mon débug je bloque ici :

    https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/stock/StockAvailable.php#L507

    Si je mets juste arpès cette ligne un d($id_product_attribute);

    Il est set à 0 donc plus bas le

                Hook::exec('actionUpdateQuantity',
                    array(
                        'id_product' => $id_product,
                        'id_product_attribute' => $id_product_attribute,
                        'quantity' => $stock_available->quantity
                    )
                );
    

    Ne fait pas travailler le module mailalerts car il a un ipa à 0 ...

    Si je mets le d($id_product_attribute); juste avant pas de soucis.

    J'ai donc remonté jusqu'à $this->upate(); et même dans ObjectModel je ne trouve pas d'ou ça vient.



  • Un ipa à 0 n'est pas un problème (produit sans décli)

    Sauf utilisation d'une fonction avec paramètre par référence (pas le cas ici), si ipa est à 0 c'est qu'il a été passe comme tel à la fonction.
    => public static function getStockAvailableIdByProductId($id_product, $id_product_attribute = null, $id_shop = null)

    Le problème ne peut venir que de l'appelant:

    classes/Product.php:1356:        StockAvailable::setQuantity($this->id, $id_product_attribute, $quantity);
    controllers/admin/AdminImportController.php:1946:                                    StockAvailable::setQuantity((int)$product->id, 0, (int)$product->quantity, (int)$shop);
    controllers/admin/AdminImportController.php:1949:                                StockAvailable::setQuantity((int)$product->id, 0, (int)$product->quantity, (int)$this->context->shop->id);
    controllers/admin/AdminImportController.php:1958:                            StockAvailable::setQuantity((int)$product->id, 0, (int)$product->quantity, (int)$shop);
    controllers/admin/AdminImportController.php:1961:                        StockAvailable::setQuantity((int)$product->id, 0, (int)$product->quantity, (int)$this->context->shop->id);
    controllers/admin/AdminImportController.php:2414:                                    StockAvailable::setQuantity((int)$product->id, $id_product_attribute, (int)$info['quantity'], (int)$shop);
    controllers/admin/AdminImportController.php:2417:                                StockAvailable::setQuantity((int)$product->id, $id_product_attribute, (int)$info['quantity'], $this->context->shop->id);
    controllers/admin/AdminImportController.php:2426:                            StockAvailable::setQuantity((int)$product->id, $id_product_attribute, (int)$info['quantity'], (int)$shop);
    controllers/admin/AdminImportController.php:2429:                        StockAvailable::setQuantity((int)$product->id, $id_product_attribute, (int)$info['quantity'], $this->context->shop->id);
    controllers/admin/AdminProductsController.php:4901:                StockAvailable::setQuantity($product->id, (int)Tools::getValue('id_product_attribute'), (int)Tools::getValue('value'));
    controllers/admin/AdminAttributeGeneratorController.php:153:                                        StockAvailable::setQuantity($this->product->id, (int)$attribute['id_product_attribute'], $quantity, (int)$current_shop['id_shop']);
    controllers/admin/AdminAttributeGeneratorController.php:158:                            StockAvailable::setQuantity($this->product->id, (int)$attribute['id_product_attribute'], $quantity);
    

  • legacy

    StockAvailable::setQuantity($this->id, $id_product_attribute, $quantity);

    Est bien appelé avec un $id_product_attribute.

    Le problème c'est qu'il est relancé plus loin dedans avec un $id_product_attribute à 0


Se connecter pour répondre