Jump to content

batZpk

Members
  • Posts

    16
  • Joined

  • Last visited

Profile Information

  • First Name
    Baptiste
  • Last Name
    RZEPKA

Recent Profile Visitors

157 profile views

batZpk's Achievements

Newbie

Newbie (1/14)

0

Reputation

1

Community Answers

  1. Hy community ! I'm Baptiste, web developer in France. I have a little problem on my Orders Controller and i need your help to resolve it. Since a few days I encountered a problem in the display of commands in Prestashop. I noticed two orders that are not present in the back office > Orders. I switch from order 50000 to 50002. But, the 50001 still present in the database, the customer's view, etc. Somebody encountred the same problem ? Thanks Baptiste Version : 1.6.1.4 Host: OVH
  2. Bonjour la communauté, Je suis à la recherche d'informations concernant un petit soucis que nous rencontrons actuellement: Nous recevons des commandes tout les jours sans problèmes. Depuis la semaine dernière, dans l'affichage des commandes coté Back Office, certaine ne s'affiche pas ( 50000 > 50002 > 50003). J'ai commencé à étudier le problème: - La commande est invisible dans l'affichage des commandes - Je retrouve toutes les infos de la commande concernée dans la BDD - Je peux accéder à la commande via la fiche client - Aucune erreur rencontrée dans le tunnel de commande - l'etude de la BDD montre que la commande est valide (orders, order_payment, order_details, etc...) Certains d'entre vous ont-ils déjà eu ce soucis ? Je remercie d'avance ceux qui pourrons me consacrer un peu de temps. Cordialement, Baptiste, Développeur Version : 1.6.1.4 Hébergement: OVH
  3. Hello Je reviens vers vous pour vous dire que j'ai réussi la modification . A présent j'aimerais que la date de validité apparaisse sur l'image générée. Je vais travailler dessus , si quelqu'un a des pistes, je suis preneur. J’ajouterai ce soir un post avec mes modifications pour ceux que çà intéresse Bonne journée PS: batreseau est aussi un de mes comptes .
  4. Thanks for your reply I post my hookActionPaymentConfirmation because when i try to change the state's order, the state still "Payement accepted" and there are no insert in ps_order_history table. public function hookActionPaymentConfirmation($params) { //var_dump($params);die; //récuperer commande $order = new Order($params['id_order']); //recuperer produits $products = OrderDetailCore::getList($order->id); //check entrepots $detailsStocks = array(); foreach ($products as $product){ if($product['split'] == '1'){ $warehouse_list = Warehouse::getWarehousesByProductId($product['product_id'],$product['product_attribute_id']); $warehouseProduct = array(); $warehouseProduct['id_order_detail'] = $product['id_order_detail']; $warehouseProduct['id_order'] = $product['id_order']; $warehouseProduct['id_product'] = $product['product_id']; $warehouseProduct['id_product_attribute'] = $product['product_attribute_id']; $warehouseProduct['quantity'] = $product['product_quantity']; $warehouseProduct['warehouse_final'] = $product['id_warehouse']; $temp = array(); foreach ($warehouse_list as $warehouse){ $warehouseStock = array(); $stock = new StockManager(); $stock = $stock->getProductRealQuantities( $product['product_id'],$product['product_attribute_id'], $warehouse['id_warehouse']); $warehouseStock['id'] = $warehouse['id_warehouse']; $warehouseStock['quantity'] = $stock; array_push($temp, $warehouseStock); } $warehouseProduct['stock']=$temp; array_push($detailsStocks, $warehouseProduct); } } //add transits foreach ($detailsStocks as $product){ $w = 0; $x = 0; foreach ($product['stock'] as $p){ if($p['quantity'] > $x){ $x = $p['quantity']; $w = $p['id']; } } $sql = 'SELECT * FROM '._DB_PREFIX_.'transit WHERE id_product = '.$product['id_product'].' AND id_product_attribute = '.$product['id_product_attribute'].' AND source = '.$product['id_order'].';'; if(!$row = Db::getInstance()->executeS($sql)){ $sql = 'INSERT INTO '._DB_PREFIX_.'transit(id_warehouse_import, id_warehouse_export, id_product, id_product_attribute, quantity, source) VALUES('.$product['warehouse_final'].','.$w.','.$product['id_product'].','.$product['id_product_attribute'].','.$product['quantity'].','.$product['id_order'].');'; if(!$row2 = Db::getInstance()->execute($sql)){ return false; } }; } //changeState $history = new OrderHistory(); $history->id_order = (int)$order->id; $history->changeIdOrderState((int)31, (int)($order->id)); } Why i can't change state's order ? Thanks
  5. Hello Bellini13 , According your older post : Can you help me with the hookActionPaymentConfirmation ? Because $params no receive $objOrder . Can i try to do that ? $objOrder = new Order($order_id); $current_state = $objOrder>getCurrentState(); $history = new OrderHistory(); $history->id_order = (int)$objOrder->id; $history->changeIdOrderState((int)31), (int)($objOrder->id)); Thanks
  6. Hello bellini13 i'm glad to see your reply and spend time with me about this subject. So i change anything in the core PaymentModule Class . I prefer to override classes as desired by the Prestashop coding convention. I wanted to be able to work separately on this process in order to make it available later. Following our last message: I created a module WHAT I WANT : When an order is update to the "Payment accepted" state, i need to check a param(bool) saved in the DB to know if is a splitted order or not . If yes, i need to check if this state (Payement accepted) is the last state saved and if yes, i need to change to my state (31). The state 31 is for "wait warehouse transfer": I created a module to act on the hooks (also to group other functions to avoid splitted orders with ASM): class splittedorders extends Module { public function __construct() { $this->name = 'splittedorders'; $this->version = '0.1'; $this->displayName = 'Splitted Orders'; $this->author = 'R Baptiste'; parent::__construct(); $this->description = $this->l('Analyse et traite les processus concernant les commandes scindées'); $this->confirmUninstall = $this->l('certain ?'); } public function install() { if ( !parent::install() OR !$this->registerHook('actionOrderStatusPostUpdate') ) return false; return true; } public function uninstall() { if ( !parent::uninstall() ) return false; return true; } //Hook tested separatly public function hookActionPaymentConfirmation($params) { } public function hookDisplayOrderConfirmation($params) { if($params['newStateOrder'] == 2){ $objOrder = $params['objOrder']; $history = new OrderHistory(); $history->id_order = (int)$objOrder->id; $history->changeIdOrderState((int)31), (int)($objOrder->id)); } } public function hookActionOrderStatusPostUpdate($params) { } } When i try them, i can't update the state of my order for 2 reasons : No update of the state OR the state was saved before the "Payment accepted" state . So i don't know what i need to do
  7. Hello guys ! Happy christmas !! So , i use this: to find a solution for my problem. I learn a lot about hook in prestashop and i try to use many of them to change my order's state but when i try it and obtain a result, my new state is not the last state saved in the order ... someone can help me ? Thanks
  8. Thanks for you reply You mean i need to check the orderConfirmation or the paymentReturn function present in the Payment Module ? Because i don't know how to use hook in a class PS: This modification is not for a module payment but for all payment Thanks you again
  9. Hello, I'm a french developer and i actually work on prestoshop for my boss I have a little problem with my validateOrder function ans i hope find some help on the forum So, I override the valideOrder function because i have some warehouses and won't receive splitted orders. No problems for that ... BUT , when i try to change order state , i have an error on the "front" side : ("We found problems with your order , please contact support") In my backoffice, the order is OK and no problems appears (the pink is the good state) So i don't know why and search in many topics but nothing work :/ I tried to change state whith php code in PayementModule class at the end of file : if($changestate == true){ $mystate = '31'; $new_history = new OrderHistory(); $new_history->id_order = (int)$order->id; $new_history->changeIdOrderState((int)$mystate, $order, true); } But always the error. So for simple, i just want to change the state of my order when appear in the BO , after the confirmation . Can someone help me ? Thanks
  10. Bonjour à tous, Je reviens vers vous ayant réussi à résoudre en partie mon souci . Il ne me reste plus qu'a changer le statut de la commande vers un de mon choix après paiement. J'ai essayé tout d'abord de le faire au travers de la class PaymentModule en rajoutant ce bout de code: if($changestate == true){ $mystate = '31'; $new_history = new OrderHistory(); $new_history->id_order = (int)$order->id; $new_history->changeIdOrderState((int)$mystate, $order, true); } Mais malgré que tout le processus se déroule bien , et que le statut de la commande à bien changé : le client obtient en fin de commande ce résultat: Avez vous des idées ? Bonnes fêtes par avance PS: Je regarde actuellement pour developper un module avec une fonction : public function hookActionValidateOrder($params) { }
  11. 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 statut if($changeState){ $history = new OrderHistory(); $history->id_order = $order->id; $history->changeIdOrderState(31, $order->id); //order status=31 //Actualisation Db::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
  12. Bon ba je pense clore le sujet , n'ayant reçu aucune réponse de la communauté ... Merci quand meme ...
  13. Bonsoir, Je viens étoffer ce post en détaillant mes différentes étapes : 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.prestashop.com/forums/topic/343569-shipping-cost-with-multi-warehouses/?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 statut if($changeState){ $history = new OrderHistory(); $history->id_order = $order->id; $history->changeIdOrderState(31, $order->id); //order status=31 //Actualisation Db::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
  14. Hello, After 15 days of research, I turn to the forum. I have an online shop and stores to sell my products. Each store has a warehouse in Prestashop. I use advanced inventory management to manage both my quantities and my stock movements. My goal is to get a single order and invoice, no matter if the basket includes products from multiple warehouses. Basically, we have a basket, which we transform into a single order (unrelated) but in which we find in BO, the list of products with their respective warehouse. I tried today to override the Class Cart and PayementModule, but nothing do. The best result I obtained is obtaining a single order without the product lines for each warehouse. Moreover, it seems to me that the advanced management of stocks finished inactive because when I went on the order in BO, the stocks consulted were those of the ta ps_stock_available and not ps_stock. If someone can help me or has already worked on this Thank you
×
×
  • Create New...