jakchan Posted October 4, 2012 Share Posted October 4, 2012 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now