Jump to content

Module de transport sans grille tarifaire


Recommended Posts

Ma boutique est en phase de développement. Je voudrais avoir un module UPS (vu que j'ai un compte chez eux et qu'un module a été fait pour la 1.4) qui se connecte à leur web service et retourne les prix directement sur mon site. Cependant le développeur avec qui je travaille (je suis pas un expert en dev) me dit qu'avec la version actuelle de Presta ce sera impossible. Je m'explique :

 

1) Pour ma future boutique j'ai défini 2 transporteurs : retrait au magasin (nommé Retrait gratuit) et UPS (prix en fonction du web service - pas de grille tarifaire)

2) On a bien réussi à afficher les prix de l'UPS (web service) et du Retrait gratuit sur la page de commande (OPC).

3) Maintenant quand je clique sur l'offre UPS en question, il me retourne le prix 0 - et ce prix correspond au tarif du Retrait gratuit.Impossible donc de passer cette étape. De ce fait, "Transport:" dans le résumé de commande a la mentiont "Livraison gratuite!".

 

Maintenant mon développeur a essayé de voir où peut se trouver le problème en sachant que l'identifiant du transporteur sélectionné est bien transmis dans les variables POST comme ici :

Array ( [ajax] => true [method] => updateCarrierAndGetPayments [delivery_option] => Array ( [5] => 5, ) [recyclable] => 0 [gift] => 0 [gift_message] => [token] => aad5e82bd4908e2cc1bd78622499ee07 )

(5 correspond à l'identifiant d'UPS dans la table presta_carrier)

 

Il m'a donc montré ce qui se passe dans le système pendant la récupération du prix de livraison en OPC :

OrderOpeController->init : case updateCarrierAndGetPayments

ParentOrderController -> _assignWrappingAndTOS called

Cart.php -> getDeliveryOptionList called

Cart.php -> don't return $cache

Cart.php -> looked for $package_list at getPackageList()

Cart.php -> getPackageList called with $flush = 0

Cart.php -> getPackageList doesn't return $cache

Cart.php -> before getProducts call

Cart.php -> getProducts called

Cart.php -> getPackageList after getProducts call - getting products

Cart.php -> getPackageList : checking if products are available

Cart.php -> getPackageList : checking finished

Cart.php -> getPackageList grouping prodcts by warehouse

Carrier;php => getAvailableCarrierList called

Carrier : getAvailableCarrierList => $carriers are empty, look for available carriers for warehouse

Carrier : getAvailableCarrierList => $carrier_list are empty, look for all available carriers

Carrier : before getCarriersForOrder call with params $id_zone=1 $customer->getGroups()=Array

Carrier -> getCarriersForOrder called

Carrier -> getCarriersForOrder - $groups is array and not empty

Carrier->getCarriers called with $id_lang = 4 , $active = 1, $delete = 0 , $id_zone = 1, $modules_filters = 4

Carrier -> getCarriers $ids_group is not null

Carrier -> getCarriers : SQL query is SELECT c.*, cl.delay FROM `presta_carrier` c LEFT JOIN `presta_carrier_lang` cl ON (c.`id_carrier` = cl.`id_carrier` AND cl.`id_lang` = 4 AND cl.id_shop = 1 ) LEFT JOIN `presta_carrier_zone` cz ON (cz.`id_carrier` = c.`id_carrier`)LEFT JOIN `presta_zone` z ON (z.`id_zone` = 1) INNER JOIN presta_carrier_shop carrier_shop ON (carrier_shop.id_carrier = c.id_carrier AND carrier_shop.id_shop = 1) WHERE c.`deleted` = 0 AND c.`active` = 1 AND cz.`id_zone` = 1 AND z.`active` = 1 AND (c.is_module = 0 OR c.need_range = 1) AND c.id_carrier IN (SELECT id_carrier FROM presta_carrier_group WHERE id_group IN (3)) GROUP BY c.`id_carrier` ORDER BY c.`position` ASC

Carrier -> getCarriers : carrier is array

Carrier -> getCarrier : got carrier's name :0

Carrier -> getCarrier : got carrier's name :Retrait gratuit

Got carriers 2

Cart.php -> getProducts called

 

Après avoir debuggé la requête, on a constaté que le fragment posant un problème est la condition (c.is_module = 0 OR c.need_range = 1) . Je ne vois pas comment un transporteur "module" (donc peut-être qui utilise un web service) peut avoir besoin d'une grille tarifaire ?

 

On a aussi essayé de mettre un transporteur "module" en "need_range = 1" pour lui faire resortir après la sélection. Mais cela a empiré la situation - sur la page de commande UPS était affiché dans 2 endroits : au tout début en tant que "Gratuit!" (je suppose que c'est le coeur Prestashop qui l'a récupéré) et un peu plus loin avec le prix retourné par le web service du transporteur.

 

J'ai aussi essayé de contourner le problème. J'ai vu que Prestashop cherche d'abord si un produit a des transporteurs associés. J'ai donc rajouté tous les UPS à ce produit. Cependant, là aussi, le prix de transport était "Gratuit!" et apparaissant dans les 2 endroits.

 

Si quelqu'un parmi vous sait comment résoudre (ou au moins contourner) ce problème, je vous serai reconaissant. Vu que je souhaiterais sortir ma boutique pour le point de novembre (1-2 novembre), la situation est très urgente.

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