Mediacom87 Posted November 20, 2019 Share Posted November 20, 2019 Salut, en développement un module de paiement qui n'accepte que les paiements en Euros, j'ai découvert un énorme bug dans la solution. Le traitement d'un panier pour le transformer en commande ne récupère pas le bon montant pour les frais de port mais transforme juste la devise. En gros, si vous avez des frais de port à 5€ mais que vous affichez le site en Dollar le taux de change s'applique et propose les frais de port à 6,5$ (c'est un exemple, je n'ai pas fais de conversion officielle). Lors du passage au paiement en Euro obligatoirement, PrestaShop va considérer les frais de port à 6,5€. j'ai donc ouvert un rapport sur Github : https://github.com/PrestaShop/PrestaShop/issues/16476 Si quelqu'un pouvait effectuer un test Paypal en forçant l'usage de la devise Euro cela aiderais bien le schilblick Link to comment Share on other sites More sharing options...
Eolia Posted November 20, 2019 Share Posted November 20, 2019 Ajouter l'id de la currency dans le cache_id de Cart.php (vu que celui-ci a converti le prix dans l'enregistrement précédent), fonction getPackageShippingCost() $cache_id = 'getPackageShippingCost_'.(int)$this->id.'_'.(int)$address_id.'_'.(int)$id_carrier.'_'.(int)$use_tax.'_'.(int)$default_country->id.'_'.(int)$id_zone; A remplacer par $cache_id = 'getPackageShippingCost_'.(int)$this->id.'_'.(int)$address_id.'_'.(int)$id_carrier.'_'.(int)$use_tax.'_'.(int)$default_country->id.'_'.(int)$id_zone.'_'.(int)$this->id_currency; Link to comment Share on other sites More sharing options...
Eolia Posted November 20, 2019 Share Posted November 20, 2019 PS: Ton titre fait un peu dyslexique Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 20, 2019 Author Share Posted November 20, 2019 Je viens d'essayer ta solution mais rien n'y fait. Link to comment Share on other sites More sharing options...
Eolia Posted November 20, 2019 Share Posted November 20, 2019 juste avant la ligne concernée, si tu mets un d($this->id_currency); ca te renvoie le bon ID de la monnaie en cours ? Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 20, 2019 Author Share Posted November 20, 2019 compliqué de tester car lorsque j'effectue mes tests avec la fonction getOrderTotal(true, Cart::BOTH) alors la fonction () ne semble pas appelée. Je test avec getOrderTotal(true, Cart::BOTH) car cela me retourne le même résultat que sur le ValidateOrder() et permets d'éviter de faire des commandes à tout va dans tous les sens. ce n'est peut être pas la meilleure solution mais c'ets un début. Link to comment Share on other sites More sharing options...
Eolia Posted November 20, 2019 Share Posted November 20, 2019 elle est appelée à chaque modif du panier donc normalement, en page de résumé panier si tu changes une quantité par exemple. (je parle pour les 1.5/1.6) Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 20, 2019 Author Share Posted November 20, 2019 J'ai trouvé un truc, dans validateOrder() le panier est instancier à nouveau Donc impossible d'avoir le bon id_currency dans le Cart. Il faut alors forcer la bonne id_currency dans le context : Cela n'intervenant que sur validateOrder() , on peut supposer que cela n'aura pas d'impact sur le reste. Par contre, pour corriger le calcul des frais de port par getOrderTotal(true, Cart::BOTH) j'ai du intervenir sur getTotalShippingCost() et forcer le flush sur l'appel de la focntion : $delivery_option_list = $this->getDeliveryOptionList($default_country, true); le soucis sur un truc aussi touchy, c'est qu'il faudrait reprendre tellement de truc pour vérifier tous les effets de bord, c'est dingue. Link to comment Share on other sites More sharing options...
Eolia Posted November 20, 2019 Share Posted November 20, 2019 On instancie le cart envoyé comme paramètre de la fonction. Ces paramètres sont assignés par le module de paiement donc tu peux forcer/récupérer l'id_currency et l'assigner au cart avant de lancer le validateOrder() Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 20, 2019 Author Share Posted November 20, 2019 Il y a 1 heure, Eolia a dit : On instancie le cart envoyé comme paramètre de la fonction. Ces paramètres sont assignés par le module de paiement donc tu peux forcer/récupérer l'id_currency et l'assigner au cart avant de lancer le validateOrder() Dans un monde parfait, je serais d'accord avec toi, mais dans ce cas cela ne fonctionne pas donc j'ai du forcer. J'ai l'impression que cela est bon maintenant. 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