mercredi 27 juin 2012

Prestashop : enregistrer une commande sans passer par prestashop

Bon.

Tordue, comme idée, hein ?
Mais bon, il se peut que vous avez envie de développer des opérations bien personnalisées qui ne nécessitent pas le processus complet de commande d'un presta : genre, une page produit qui enregistre directement une commande à partir des données saisies sur cette page.

C'est parti.
Volontairement, à l'arrache avec des requêtes basiques et simples, que tout le monde comprenne bien le processus. Adaptez à votre sauce après...

Je traiterai juste des requêtes, pas de la construction du controller spécifique et de sa page tpl qui va avec : si ce sujet vous intéresse, c'est que vous avez déjà un niveau technique suffisant...

Une commande, c'est d'abord un panier. Un panier, c'est d'abord un produit.

$id_product=$_POST['id_product'];
   $req = "INSERT INTO ps_cart (id_cart, id_carrier,id_lang,id_address_delivery,id_address_invoice,id_currency,id_customer,id_guest,date_add) VALUES('','0','2','0','0','1','".$_POST['id_customer']."','','".$nowtime."')";
  mysql_query($req);

   $idcart = mysql_insert_id();

   $req2 = "INSERT INTO ps_cart_product (id_cart,id_product,id_product_attribute,quantity,date_add) VALUES('".$idcart."','".$id_product."','".$attribu."','".$_POST['qty']."','".$nowtime."')";
  mysql_query($req2);

Allez, on rend les choses plus complexes : y'a une eprsonnalisation !!!

           $req3 = "INSERT INTO ps_customization (id_customization,id_product_attribute, id_cart,id_product,quantity) VALUES('','".$attribu."', '".$idcart."','".$id_product."','".$_POST['qty']."')";
  mysql_query($req3);
$idcusto = mysql_insert_id();
 
 
       $req4 = "INSERT INTO ps_customized_data (`id_customization`,`type`,`index`,`value`) VALUES ('".$idcusto."','1','1','".$_POST['textField1']."')";
  mysql_query($req4);

  $totprdoducts= $_POST['prixx']*$_POST['qty'];
  $totprdoductswt= ($_POST['prixx']*$_POST['qty'])*1.196;

//tarif livraison
 $ship='11.96'; 


 $adddr = "SELECT `id_address` FROM `ps_address` WHERE `id_customer`='".$_POST['id_customer']."' LIMIT 0,1";
 $reqadd = mysql_query($adddr);
 $adresse = mysql_fetch_assoc($reqadd);


 $totpaid= $totprdoductswt+$ship;

         $req5 = "INSERT INTO ps_orders (`id_order`,`id_carrier`,`id_lang`,`id_customer`,`id_cart`,`id_currency`,`id_address_delivery`,`id_address_invoice`,`payment`,`module`,`total_paid`,`total_paid_real`,`total_products`,`total_products_wt`,`total_shipping`,`carrier_tax_rate`,`delivery_date`,`valid`,`date_add`,`date_upd`) VALUES ('','4','2','".$_POST['id_customer']."','".$idcart."','1','".$adresse['id_address']."','".$adresse['id_address']."','Comptant à la livraison','cashondelivery','".$totpaid."','0','".$totprdoducts."','".$totprdoductswt."','".$ship."','19.600','".$nowtime."','1','".$nowtime."','".$nowtime."')";
  mysql_query($req5);
  $idord = mysql_insert_id();

  //on recupere la ref produit
$refere = $_POST['reff'];

           $req6 = "INSERT INTO ps_order_detail (`id_order_detail`,`id_order`,`product_id`,`product_attribute_id`,`product_name`,`product_quantity`,`product_price`,`product_reference`,`product_weight`,`tax_name`,`tax_rate`) VALUES ('','". $idord."','".$id_product."','".$attribu."', '".$this->product->name."','".$_POST['qty']."','".$_POST['prixx']."','".$refere."','".$wei."','TVA FR 19.6%','19.600')";
  mysql_query($req6);

             $req7 = "INSERT INTO ps_order_history (`id_order_history`,`id_employee`,`id_order`,`id_order_state`,`date_add`) VALUES ('','0','".$idord."','11','".$nowtime."')";
  mysql_query($req7);

         Et voilà, la commande est dans le manager de prestashop. Sans passer par prestashop.