Jump to content

Edit History

SymeR

SymeR


correction erreur non dossier

Bonjour à tous,
J'ai un petit soucis et je ne comprends pas d'où vient le problème.

Mon besoin est assez simple, j'ai des produits avec déclinaisons. 
En base de données dans le table  ps_stock_available, j'ai le champs out_of_stock qui est défini sur 2.

Je change en base de donnée la valeur pour une déclinaison, je le met à 0. Mais dès que j'enregistre à nouveau l'article, toutes les déclinaisons reprennent la valeur du produit principal soit 2.

J'ai donc voulu changer ce fonctionnement dans la classe StockAvailable.
J'ai identifier la fonction qui (je pensais) faisait cette modification : setProductOutOfStock()

Voici la fonction de base :

   public static function setProductOutOfStock($id_product, $out_of_stock = false, $id_shop = null, $id_product_attribute = 0)
    {
        if (!Validate::isUnsignedId($id_product)) {
            return false;
        }

        $existing_id = (int) StockAvailable::getStockAvailableIdByProductId((int) $id_product, (int) $id_product_attribute, $id_shop);

        if ($existing_id > 0) {
            Db::getInstance()->update(
                'stock_available',
                ['out_of_stock' => (int) $out_of_stock],
                'id_product = ' . (int) $id_product .
                (($id_product_attribute) ? ' AND id_product_attribute = ' . (int) $id_product_attribute : '') .
                StockAvailable::addSqlShopRestriction(null, $id_shop)
            );
        } else {
            $params = [
                'out_of_stock' => (int) $out_of_stock,
                'id_product' => (int) $id_product,
                'id_product_attribute' => (int) $id_product_attribute,
            ];

            StockAvailable::addSqlShopParams($params, $id_shop);
            Db::getInstance()->insert('stock_available', $params, false, true, Db::ON_DUPLICATE_KEY);
        }
    }

Et j'ai apporté la modification suivante dans le dossier override/classes/stock/StockAvailable.php :

class StockAvailable extends StockAvailableCore
{


 
    public static function setProductOutOfStock($id_product, $out_of_stock = false, $id_shop = null, $id_product_attribute = 0)
    {
        if (!Validate::isUnsignedId($id_product)) {
            return false;
        }

        $existing_id = (int) StockAvailable::getStockAvailableIdByProductId((int) $id_product, (int) $id_product_attribute, $id_shop);
		

        if ($existing_id == 0) {
            $params = [
                'out_of_stock' => (int) $out_of_stock,
                'id_product' => (int) $id_product,
                'id_product_attribute' => (int) $id_product_attribute,
            ];

            StockAvailable::addSqlShopParams($params, $id_shop);
            Db::getInstance()->insert('stock_available', $params, false, true, Db::ON_DUPLICATE_KEY);
        }
    }
	
}

Donc en gros j'ai supprimé la mise à jour si l'article existe déjà.

 

Mais le problème c'est que cela n'a aucun effet quand je sauvegarde un produit. Il me change quand même le champs out_of_stock en base de données.

J'ai également été voir dans les controller symfony ( que je maitrise beaucoup moins ), mais d'après ce que j'ai vu, c'est bien cette classe qui est appeler pour mettre à jour ce champs. Du coup je ne comprends pas ou est le problème.

Je vous remercie pour votre aide.

SymeR

SymeR

Bonjour à tous,
J'ai un petit soucis et je ne comprends pas d'où vient le problème.

Mon besoin est assez simple, j'ai des produits avec déclinaisons. 
En base de données dans le table  ps_stock_available, j'ai le champs out_of_stock qui est défini sur 2.

Je change en base de donnée la valeur pour une déclinaison, je le met à 0. Mais dès que j'enregistre à nouveau l'article, toutes les déclinaisons reprennent la valeur du produit principal soit 2.

J'ai donc voulu changer ce fonctionnement dans la classe StockAvailable.
J'ai identifier la fonction qui (je pensais) faisait cette modification : setProductOutOfStock()

Voici la fonction de base :

   public static function setProductOutOfStock($id_product, $out_of_stock = false, $id_shop = null, $id_product_attribute = 0)
    {
        if (!Validate::isUnsignedId($id_product)) {
            return false;
        }

        $existing_id = (int) StockAvailable::getStockAvailableIdByProductId((int) $id_product, (int) $id_product_attribute, $id_shop);

        if ($existing_id > 0) {
            Db::getInstance()->update(
                'stock_available',
                ['out_of_stock' => (int) $out_of_stock],
                'id_product = ' . (int) $id_product .
                (($id_product_attribute) ? ' AND id_product_attribute = ' . (int) $id_product_attribute : '') .
                StockAvailable::addSqlShopRestriction(null, $id_shop)
            );
        } else {
            $params = [
                'out_of_stock' => (int) $out_of_stock,
                'id_product' => (int) $id_product,
                'id_product_attribute' => (int) $id_product_attribute,
            ];

            StockAvailable::addSqlShopParams($params, $id_shop);
            Db::getInstance()->insert('stock_available', $params, false, true, Db::ON_DUPLICATE_KEY);
        }
    }

Et j'ai apporté la modification suivante dans le dossier override/classe/stock/StockAvailable.php :

class StockAvailable extends StockAvailableCore
{


 
    public static function setProductOutOfStock($id_product, $out_of_stock = false, $id_shop = null, $id_product_attribute = 0)
    {
        if (!Validate::isUnsignedId($id_product)) {
            return false;
        }

        $existing_id = (int) StockAvailable::getStockAvailableIdByProductId((int) $id_product, (int) $id_product_attribute, $id_shop);
		

        if ($existing_id == 0) {
            $params = [
                'out_of_stock' => (int) $out_of_stock,
                'id_product' => (int) $id_product,
                'id_product_attribute' => (int) $id_product_attribute,
            ];

            StockAvailable::addSqlShopParams($params, $id_shop);
            Db::getInstance()->insert('stock_available', $params, false, true, Db::ON_DUPLICATE_KEY);
        }
    }
	
}

Donc en gros j'ai supprimé la mise à jour si l'article existe déjà.

 

Mais le problème c'est que cela n'a aucun effet quand je sauvegarde un produit. Il me change quand même le champs out_of_stock en base de données.

J'ai également été voir dans les controller symfony ( que je maitrise beaucoup moins ), mais d'après ce que j'ai vu, c'est bien cette classe qui est appeler pour mettre à jour ce champs. Du coup je ne comprends pas ou est le problème.

Je vous remercie pour votre aide.

×
×
  • Create New...