Jump to content

Ne pas changer le champs out_of_stock lors de l'update d'un produit


Recommended Posts

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.

Edited by SymeR
correction erreur non dossier (see edit history)
Link to comment
Share on other sites

Information pris directement sur la page information dans les paramètres avancées :

Version de PrestaShop : 8.1.7

Informations du serveur : Linux #1 SMP Debian 5.10.209-2 (2024-01-31) x86_64
Version du logiciel serveur : Apache
Version de PHP : 8.1.32
Limite de mémoire : 512M
Temps maximal d'exécution : 3600
Taille max. pour envoi de fichiers : 128M

 

Et la surcharge est bien mentionnée dans la liste des surcharges :

classes/stock/StockAvailable.php

 

Link to comment
Share on other sites

2 hours ago, SymeR said:

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

 

Ce chemin est-il correct ?

Il devrait s'agir de 
override/classes/stock/StockAvailable.php

Vérifiez également si les substitutions sont activées depuis le BackOffice.

Link to comment
Share on other sites

Oui pardon, je viens de corriger sur mon post initial.

Le chemin est bien override/classes/stock/StockAvailable.php

La nom de la surcharge sur mon message précédent le confirme bien.

Pour ce qui est des substitutions, je ne sais pas ce que s'est. POuvez vous m'en dire plus svp ?

Link to comment
Share on other sites

D'ailleurs ce qui est étonnant, je viens de mettre dans ma fonction  ( et dans celle "overridé" et dans la fonction par défaut ).

dump($existing_id); exit;

Mais rien ne s'affiche. C'est comme si il ne passait pas par cette fonction 

 

Link to comment
Share on other sites

J'ai peut être une piste pourquoi cela ne fonctionne pas. J'utilise la nouvelle fiche produit. Elle ne doit pas utiliser les mêmes controllers peut être.

Je vais chercher ou c'est products-v2.
Si vous avez des infos, je suis preneur 🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...