batZpk Posted December 15, 2016 Share Posted December 15, 2016 Bonjour, après 15 jours de recherches, je me tourne vers le forum . Je dispose d'une boutique en ligne et de magasins pour vendre mes produits. Chaque magasin dispose d'un entrepôt dans Prestashop . Je me sers de la gestion avancée des stocks pour gérer a la fois mes quantités mais aussi mes mouvements de stocks. Mon objectif est d'obtenir une seule commande et facture , peu importe si le panier comporte des produits de plusieurs entrepôts. En gros, nous avons un panier, que l'on transforme en une seule commande (non liées) mais dans laquelle on retrouve en BO , la liste des produits avec leur entrepôt respectifs. J'ai tenté aujourd'hui d'override les class Cart et PayementModule, mais rien y fais. Le meilleur résultat que j'ai obtenu est l'obtention d'une commande unique sans les lignes produits pour chaque entrepôt. De plus, il me semble que la gestion avancée des stocks finissais inactive car quand je me rendais sur la commande en BO, les stocks consultés étaient ceux de la ta ps_stock_available et non ps_stock. Je mets ci dessous mes différents éssais. Etape 1 : Frais de ports Selon mon plan marketing, je fais une gratuité des frais de ports en fonction de es transporteurs dès 50 ou 80 euros d'achats. J'ai donc pour le moment overridé la classe Cart.php selon le post ci dessous: https://www.prestash...uses/?p=2370955 Malheureusement, cette technique ne permet que de contrôler les premiers frais de ports du premier produit ... Je reste actuellement bloqué sur ce point. Etape 2: Modification du flux panier Afin de ne conserver qu'une seule commande/facture j'ai décidé de modifier le flux reçu dans la fonction validateOrder() afin de le faire ressembler à mon besoin en ajoutant quelques bouts de code: Arrivée du flux: // For each package, generate an order $delivery_option_list = $this->context->cart->getDeliveryOptionList(); //$package_list = $this->context->cart->getPackageList(); $tmp_package_list = $this->context->cart->getPackageList(); $cart_delivery_option = $this->context->cart->getDeliveryOption(); Traitement: //CHANGES $package_list = array(); foreach ($tmp_package_list as $tmp_id_address => $tmp_packageByAddress) { if(count($tmp_packageByAddress) > 1){ for ($i=1; $i < count($tmp_packageByAddress); $i++){ //GROUP PRODUCTS for ($j = 0; $j < count($tmp_packageByAddress[$i]['product_list']); $j++) array_push($tmp_packageByAddress[0]['product_list'],$tmp_packageByAddress[$i]['product_list'][$j]); unset($tmp_packageByAddress[$i]); //CHANGE WAREHOUSE } //var_dump($tmp_packageByAddress); $package_list[$tmp_id_address]= $tmp_packageByAddress; $changeState = true; } } Etape 3 : Changement de statut Afin de distinguer les commandes scindées j'ai créé un statut "En attente de transfert de stock" dans le backoffice. J'ai donc rajouté les lignes suivantes pour modifier le statut de la commande en conséquence. //CL - Change statutif($changeState){$history = new OrderHistory();$history->id_order = $order->id;$history->changeIdOrderState(31, $order->id); //order status=31//ActualisationDb::getInstance()->insert('order_history', array('id_employee' => 0,'id_order' => $order->id,'id_order_state' => 31,'dateAdd' => date("Y-m-d H:i:s")));} Voila je ne sais plus ou aller ou encore je pense de plus en plus au fait qu'il doit y avoir une maniere plus simple de gerer ce probleme de double commande ... Merci d'avance 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