Jump to content

Une seule devise de paiement pour plusieurs devises sur la boutique


Mediacom87

Recommended Posts

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

1560275513_bugpanierchangementdevise.thumb.png.8de449c161ba4e994060b079db59708b.png

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

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

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

J'ai trouvé un truc, dans validateOrder() le panier est instancier à nouveau

729477839_Capturedecran2019-11-2019_52_18.jpg.73278e3502674b454afb53431f964700.jpg

Donc impossible d'avoir le bon id_currency dans le Cart.

Il faut alors forcer la bonne id_currency dans le context :

136169814_Capturedecran2019-11-2019_54_10.jpg.d3dffd640a84a091db3e17bae6c2eb12.jpg

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

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

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