SymeR Posted March 24 Share Posted March 24 (edited) 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 March 24 by SymeR correction erreur non dossier (see edit history) Link to comment Share on other sites More sharing options...
Prestashop Addict Posted March 24 Share Posted March 24 Bonjour, vous avez bien vidé le cache pour que votre override soit pris en compte? Link to comment Share on other sites More sharing options...
SymeR Posted March 24 Author Share Posted March 24 Bonjour, Ha oui j'ai oublié de le préciser. J'ai vidé le cache à plusieurs reprises depuis le BO. Link to comment Share on other sites More sharing options...
Prestashop Addict Posted March 24 Share Posted March 24 Merci de préciser la version de PS et PHP, pour qu'on puisse vous aider. Link to comment Share on other sites More sharing options...
SymeR Posted March 24 Author Share Posted March 24 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 More sharing options...
Knowband Plugins Posted March 24 Share Posted March 24 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 More sharing options...
SymeR Posted March 24 Author Share Posted March 24 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 More sharing options...
SymeR Posted March 24 Author Share Posted March 24 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 More sharing options...
Knowband Plugins Posted March 24 Share Posted March 24 Il est donc possible qu'il soit vide. Essayez d'utiliser la fonction PHP empty. if(empty($existing_id)) { } Link to comment Share on other sites More sharing options...
SymeR Posted March 24 Author Share Posted March 24 Non cela n'a pas d'incidence, j'ai mis mon dump() et exit hors condition. Donc normalement je devrais le voir mais il ne s'affiche pas. Link to comment Share on other sites More sharing options...
SymeR Posted March 24 Author Share Posted March 24 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now