Jump to content

Quantité de stock réservé et multiboutique


Recommended Posts

Bonsoir à tous ,

Je gère un un prestashop en version 1.7.8 qui fonction avec une multiboutique. Le groupe de multiboutique contient seulement deux boutiques.

Initialement les stocks de ces deux boutiques n'étaient pas partagés , mais il a fallut remettre les deux stocks synchrone. Ce qui a naturellement remis les stocks à zéros.

Cependant les stocks réservés ont aussi été remis à zéros. Comment peut-on faire pour rétablir ces données. C'est impossible semble-t-il via la page de stock du panneau admin.  Si il faut en passer par la BDD , y - t-il une table particulière ?

De même il semble que les nouvelles commandes ne comptabilise plus les réservations. Je suis aller regarder sur la page d'aide ici :

https://help-center.prestashop.com/fr/articles/115000622632-gerer-le-stock-d-un-produit

Mais ça ne change rien. Où puis je chercher dans mon application ?

 

Merci à vous

Link to comment
Share on other sites

Je pense avoir avancé sur une partie du problème.

La mise à jours des quantités en stock se déroule dans la classe StockManager dont le chemin est src>Adapter>StockManager.php

Dans cette classe est définit la fonction updateReservedProductQuantity() , elle même appelée par la fonction updatePhysicalProductQuantity().

Dans le cas d'une commande c'est la classe PaymentModule ( chemin classes > PaymentModule.php ) qui appel en premier la fonction updatePhysicalProductQuantity() de StockManager pour mettre à jour la quantité modifié par la commande.

Dans la fonction updateReservedProductQuantity() , la requête SQL suivante est executée

            UPDATE {table_prefix}stock_available sa
            SET sa.reserved_quantity = (
                SELECT SUM(od.product_quantity - od.product_quantity_refunded)
                FROM {table_prefix}orders o
                INNER JOIN {table_prefix}order_detail od ON od.id_order = o.id_order
                INNER JOIN {table_prefix}order_state os ON os.id_order_state = o.current_state
                WHERE o.id_shop = :shop_id AND
                os.shipped != 1 AND (
                    o.valid = 1 OR (
                        os.id_order_state != :error_state AND
                        os.id_order_state != :cancellation_state
                    )
                ) AND sa.id_product = od.product_id AND
                sa.id_product_attribute = od.product_attribute_id
                GROUP BY od.product_id, od.product_attribute_id
            )
            WHERE sa.id_shop = :shop_id

Dans mon cas je me suis rendu compte que la dernière condition , qui vérifie que la boutique d'où la commande est issue correspond bien à la boutique du produit renseignée , n'est jamais bonne. Donc les quantités réservés ne se mettent jamais à jour et pour cause !

Dans la table ps_stock_available , qui renseigne les quantités de stocks disponibles par produits , par déclinaisons et par boutique , cette même table modifié par la requête SQL , je vois que la table contient des lignes de produits avec une boutique que n'existe plus...

Le fait de partager des stocks qui ne l'était pas va créer visiblement de nouvelles lignes de produits dans cette tables mais pas supprimer les anciennes. L'action semble se contenter de remettre toutes les anciens produit à zéros. Ensuite quand on va passer commande , PaymentModule ne va pas chercher la bonne boutique.

 

Le problème n'est pas encore résolu car il faut comprendre comment faire en sorte que la bonne boutique soit choisi ou bien si il faut remettre la ps_stock_available correct et comment le faire proprement.

Si quelqu'un a une idée cela serait très appréciable.

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...