Jump to content

1.6 - Commandes Scindées


Recommended Posts

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:

  1. // For each package, generate an order
  2. $delivery_option_list = $this->context->cart->getDeliveryOptionList();
  3. //$package_list = $this->context->cart->getPackageList();
  4. $tmp_package_list = $this->context->cart->getPackageList();
  5.     $cart_delivery_option = $this->context->cart->getDeliveryOption();

Traitement:

  1. //CHANGES
  2. $package_list = array();
  3.  
  4. foreach ($tmp_package_list as $tmp_id_address => $tmp_packageByAddress) {
  5. if(count($tmp_packageByAddress) > 1){
  6. for ($i=1; $i < count($tmp_packageByAddress); $i++){
  7. //GROUP PRODUCTS
  8. for ($j = 0; $j < count($tmp_packageByAddress[$i]['product_list']); $j++)
  9. array_push($tmp_packageByAddress[0]['product_list'],$tmp_packageByAddress[$i]['product_list'][$j]);
  10. unset($tmp_packageByAddress[$i]);
  11. //CHANGE WAREHOUSE
  12. }
  13. //var_dump($tmp_packageByAddress);
  14. $package_list[$tmp_id_address]= $tmp_packageByAddress;
  15. $changeState = true;
  16.  
  17. }
  18. }
  • 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  ;)

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