Jump to content

Diminution d'un produit lors d'une commande prestashop en gestion de stock avancer multi entrepot


Recommended Posts

Bonjour, 

il y'a trois jours je suis passer en multi entrepôt pour des raisons physique.

sur le coups nous avons activer par la même occasion la gestion de stock avancer et effectuer un inventaire afin de mettre les produit sur différent entrepôt ici A et B , mon probleme est que l'add on de caisse SORA caisse fait correctement le taff est décrémente correctement le stock physique , réel et utilisable , dans tous les cas je ne procède a aucune réservation sur mon site .

 

Sauf que les commande s’enchaîne et je m’aperçois que les stock physique ne se décrémente parfois pas et parfois il décrémente uniquement le stock utilisable , celui-ci n'est pas pris en compte pour les marketplace de plus .

 

depuis 3 jours je fais le tours du forum , je ne trouve pas de réponse , de plus je me retrouve a faire la gestion de stock a la main depuis ce changement . 

 

j'ai fais un tour dans le code pour voir si dans order.php y avais quelque chose intéressant j'ai vu la méthode ci dessous je suis sur prestashop 1.6.1.17 chez OVH 

 

  /**
     *
     * This method allow to add stock information on a product detail
     *
     * If advanced stock management is active, get physical stock of this product in the warehouse associated to the ptoduct for the current order
     * Else get the available quantity of the product in fucntion of the shop associated to the order
     *
     * @param array &$product
     */
    protected function setProductCurrentStock(&$product)
    {
        if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')
            && (int)$product['advanced_stock_management'] == 1
            && (int)$product['id_warehouse'] > 0) {
            $product['current_stock'] = StockManagerFactory::getManager()->getProductPhysicalQuantities($product['product_id'], $product['product_attribute_id'], (int)$product['id_warehouse'], true);
        } else {
            $product['current_stock'] = StockAvailable::getQuantityAvailableByProduct($product['product_id'], $product['product_attribute_id'], (int)$this->id_shop);
        }
    }

 

dans le if je ne comprends pas cela ressemble a une table mais j'ai aucune table qui s'appelle ps_advanced_stock_management .

la suite du code me semble bon , sur le coups j'ai l'impression que je rentre pas dans le if a cause de la première condition et on pas au else qui effectivement me baisse la quantité en stock utilisable . 

 

j'ai vraiment besoin d'une lanterne , je me perd facilement dans le code j'ai l'impression qui suffit de changer la premier condition mais mon site est en prod et pas  de possibilité de faire de teste x( 

 

mais je sais pas vraiment ou prestashop décrémente le stock en fonction de la commande .

 

Cordialement merci par avance de toutes réponse 

 

Link to comment
Share on other sites

après quelque recherche j'ai trouver toujours dans le code , cette fonctionnalité dans orderdétail.php qui semble enlever suivant la quantité du panier dans le stock .

 

    /**
     * Check the order status
     * @param array $product
     * @param int $id_order_state
     */
    protected function checkProductStock($product, $id_order_state)
    {
        if ($id_order_state != Configuration::get('PS_OS_CANCELED') && $id_order_state != Configuration::get('PS_OS_ERROR')) {
            $update_quantity = true;
            if (!StockAvailable::dependsOnStock($product['id_product'])) {
                $update_quantity = StockAvailable::updateQuantity($product['id_product'], $product['id_product_attribute'], -(int)$product['cart_quantity']);
            }

            if ($update_quantity) {
                $product['stock_quantity'] -= $product['cart_quantity'];
            }

            if ($product['stock_quantity'] < 0 && Configuration::get('PS_STOCK_MANAGEMENT')) {
                $this->outOfStock = true;
            }
            Product::updateDefaultAttribute($product['id_product']);
        }
    }

mais je ne parvient pas encore a faire la liason entre les stock en gestion de stock .

je me suis retrouver dans stockmanager.php et j'ai trouver ca 

       // Gets {physical OR usable}_qty
        $qty = $this->getProductPhysicalQuantities($id_product, $id_product_attribute, $ids_warehouse, $usable);

surement que en modifiante ce bout de code je ne vais plus toucher a la quantité utilisable mais seulement a la quantité physique . quelqu'un a deja fais ce genre de manipulation ? 

Link to comment
Share on other sites

sur coups pour me dépatouillé et comprendre j'ai fais plusieurs test sur mon wamp avec prestashop 1.6.1.18 même si celui en prod est un 1.6.1.17

 

Il semble que lorsque la gestion de stock est avancer, benh c'est un peut comme les commandes fournisseur il faut passer pas un succession de statu dans un ordre précis afin que la fonctionnalité ce fasse correctement en natif , 

 

lorsque on passe des statue suivant en 'cours de préparation' -> 'expédié' ca diminue  bien le stock physique et utilisable et aussi réel par la même occasion

 

j'ai verifié ca avec sur plusieurs commande et mon shema sera sur le coups 'paiement accepté ' _=-> en cours de préparation -> expédié fonctionne a chaque fois . 

 

par contre je ne l'ai vu écris null part en peux dégoûté a ce sujet surtout que sora caisse f'ait le taff et n'utilise qu' un seul statut et modifié les option dans les statuts na rien changé pour moi , j'ai voulus calqué les même option sur 'en cours préparation' et 'expédié' sur paiement accepté , ca ne fonctionne pas .

 

afin de considéré dès le statut paiement accepter que la commande est expédié mais rien a faire .

 

Est ce que quelqu'un de confirmer peux me dire si c'est bien ca ? 

 

cordialement 

Link to comment
Share on other sites

de fil en aiguille j'avance il semble que tous ce joue sur le statut de commande expédié , ainsi lorsque la gestion de stock avancer est utilisé il faut utilisé les 14 premier status . donc on final avant la gestion de stock avancer j'utilisé un statut avec id 24 qui etait personalisé . or dans la gestion de stock avancer il faut pour diminué le stock suivant le panier basculé la commande en statut expédié soit id 4 dans les statuts cela semble résoudre mon problème . 

 

j'en dirai plus courant des prochaines semaines .

Dommage de n 'avoir pas vu ce petit détail dans le code ni dans le manuel , j'ai du peut être passer a coté voila .

Link to comment
Share on other sites

je fais un retours sur mon problème , je m’aperçois que malgré la bonne présence de mes produit dans les entrepôts lors de la commande je ne vois pas l’entrepôt en question sur le site en production. voir image ci dessous .

 image.png.d8ca4745eb902ae02207183841d6d367.png

 

sur le coups malgré le fais de passer la commande en expédié ça ne diminue pas le stock une idée ? 

Link to comment
Share on other sites

arpès quelques tests , je me suis rendu  compte que lorsque je crée une commande tout va bien , les entrepôts sont sélectionné dans le order détail correctement . comme ci-dessous .

 

image.png.8dfd03ab6da48c9e6046eba26031e1b8.png

 

mais lorsque mes commande descende des marketplace aucun entrepôts est sélectionné comme si la gestion de stock avancé n'était pas activé .

 

pourtant j'ai vu ce genre de code .

    /**
     *
     * This method allow to add stock information on a product detail
     *
     * If advanced stock management is active, get physical stock of this product in the warehouse associated to the ptoduct for the current order
     * Else get the available quantity of the product in fucntion of the shop associated to the order
     *
     * @param array &$product
     */
    protected function setProductCurrentStock(&$product)
    {
        if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')
            && (int)$product['advanced_stock_management'] == 1
            && (int)$product['id_warehouse'] > 0) {
            $product['current_stock'] = StockManagerFactory::getManager()->getProductPhysicalQuantities($product['product_id'], $product['product_attribute_id'], (int)$product['id_warehouse'], true);
        } else {
            $product['current_stock'] = StockAvailable::getQuantityAvailableByProduct($product['product_id'], $product['product_attribute_id'], (int)$this->id_shop);
        }
    }

 

sur le coups j'ai contacté mon intégrateur pour voir ce qu'il en pense , dommage que personne ai une idée sur le forum ? 

Edited by [email protected] (see edit history)
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...