Jump to content

Commandes Liées -> Une commande / Une facture


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.

 

Si quelqu'un peut m'aider ou a déjà travaillé sur ce point

 

Merci ;)

 

Link to comment
Share on other sites

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 ;)

Link to comment
Share on other sites

  • 2 weeks later...

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é :

 

844824cap1.jpg

 

le client obtient en fin de commande ce résultat:

 

210886cap2.jpg

 

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)
{

}
Edited by batZpk (see edit history)
Link to comment
Share on other sites

Franchement déçu de ce forum ...

 

Il faut quand même que vous reconnaissiez que votre problème était à la fois très spécifique et assez technique.

 

Personnellement en lisant votre question je me suis quand même demandé s'il n'aurait pas suffit que vous modifiiez le template de la facture PDF pour réunir toutes les lignes dans un seul tableau.

 

Après il est possible que je n'ai pas compris tous les tenants et les aboutissants de votre question.

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