godichef Posted August 30, 2011 Share Posted August 30, 2011 Bonjour, J'ai un site qui tourne sous Prestashop 1.4.4.1 et a deux devises: l'Euro et le Franc Suisse (devise par défaut). Je voudrais empêcher les clients ayant une résidence en France de commander en Francs Suisse et également les clients résidents en Suisse de commander en Euros les prix étant différents. J'ai remarqué que cette demande a déjà été faite plusieurs fois dans le forum mais aucune réponse concluante n'a été apportée si ce n'est le fait de sélectionner, dans la partie transport, l'Euro par défaut pour la France et le Franc Suisse par défaut pour la Suisse, chose que je n'avais pas faite. Hélas, trois fois hélas, cela n'a strictement eu aucun effet (si cela en a un j'aimerais savoir lequel car je n'ai vu aucune différence ;-) ). Bref, j'ai tous les jours des clients qui se plantent et commandent dans la mauvaise devise (parfois volontairement, surtout en ce moment en Suisse vu le prix de l'Euros), c'est une vraie galère... Puisque la fonctionnalité est apparemment prévue (sinon pourquoi indiquer une devise par défaut dans la partie transport?), est-ce qu'il s'agit d'un bug ou est-ce que je dois faire autre chose au niveau config? Merci d'avance pour vos réponses. Link to comment Share on other sites More sharing options...
etlomb77 Posted September 23, 2011 Share Posted September 23, 2011 Up. Si quelqu'un a une réponse, ce serait avec plaisir ! Merci ! Link to comment Share on other sites More sharing options...
Anne DP Posted September 24, 2011 Share Posted September 24, 2011 Bonjour, J'ai trouvé sur le site de Webbax un module qui affiche la devise qu'on veut selon le pays. voir ici http://www.webbax.ch/shop/modules/37-module-money-for-country.html . Maintenant, il faudrait essayer de lui demander si c'est possible de bloquer la devise pour que le client ne puisse pas la changer par la suite. C'est vrai qu'avec la version 1.4 normalement on devrait pouvoir forcer une devise selon le pays mais ça ne fonctionnait pas non plus chez moi. Bonne journée Anne Link to comment Share on other sites More sharing options...
godichef Posted October 21, 2011 Author Share Posted October 21, 2011 Merci Anne, j'ai contacté Webbax mais leur module ne répond pas du tout à mon besoin. Leur module se contente de sélectionner une devise par défaut en fonction d'une géolocalisation dont on sait qu'elle est très perfectible. J'ai donc mis au point une "rustine". Je dit que c'est une rustine parce que j'ai tout à fait conscience de ne pas être un "pro" de la programmation d'une part, et que d'autre part la modification étant faite dans le code "générique" il faudra la refaire à chaque mise à jour de prestashop ce qui n'est pas top. Je vous la livre cependant, elle marche chez moi avec Prestashop 1.4.4.1. Les modifs sont à faire dans le fichier OrderController.php dans le répertoire "Controllers": J'ai implanté la même modif à deux endroits différents (fonction "_assignAddress" et fonction "_assignCarrier" afin que la devise soit forcée lorsque le client arrive sur la page de sélection du transporteur et que même une fois arrivé sur cette page, si il sélectionne le bouton de changement de devise, la devise soit reforcée dans la devise correspondant à l'adresse de livraison). Voilà, si vous avez des propositions d'amélioration je suis preneur. /* Address step */ protected function _assignAddress() { global $cookie; // ajout pour la Rustine parent::_assignAddress(); /* ajout pour la Rustine */ $cart = Db::getInstance()->getRow(' SELECT id_address_delivery FROM '._DB_PREFIX_.'cart WHERE id_cart = '.(int)$cookie->id_cart); $address=Db::getInstance()->getRow(' SELECT id_country FROM '._DB_PREFIX_.'address WHERE id_address = '.(int)$cart['id_address_delivery']); switch ($address['id_country']) { case 8: // France $cookie->id_currency = 1; //assigne la devise correspondant au pays Tools::setCurrency(); break; case 19: //Suisse $cookie->id_currency = 4; // et ainsi de suite pour chaque pays. Tools::setCurrency(); break; } /* Fin de l'ajout pour la Rustine */ self::$smarty->assign('cart', self::$cart); if (self::$cookie->is_guest) Tools::redirect('order.php?step=2'); } /* Carrier step */ protected function _assignCarrier() { global $cookie; // ajout pour la Rustine global $defaultCountry; /* ajout pour la Rustine */ $cart = Db::getInstance()->getRow(' SELECT id_address_delivery FROM '._DB_PREFIX_.'cart WHERE id_cart = '.(int)$cookie->id_cart); $address=Db::getInstance()->getRow(' SELECT id_country FROM '._DB_PREFIX_.'address WHERE id_address = '.(int)$cart['id_address_delivery']); switch ($address['id_country']) { case 8: // France $cookie->id_currency = 1; //assigne la devise correspondant au pays Tools::setCurrency(); break; case 19: //Suisse $cookie->id_currency = 4; // à répéter pour chaque pays. Tools::setCurrency(); break; } /* Fin de l'ajout pour la Rustine */ if (isset(self::$cookie->id_customer)) $customer = new Customer((int)(self::$cookie->id_customer)); else die(Tools::displayError('Fatal error: No customer')); // Assign carrier parent::_assignCarrier(); // Assign wrapping and TOS $this->_assignWrappingAndTOS(); self::$smarty->assign('is_guest' ,(isset(self::$cookie->is_guest) ? self::$cookie->is_guest : 0)); } Voilà, en espérant que cela puisse servir à d'autres... Link to comment Share on other sites More sharing options...
TatieDanielle Posted February 1, 2022 Share Posted February 1, 2022 Bonjour, J'exhume ce sujet des abysses du temps. Y'a-t-il du nouveau à ce propos avec les nouvelles versions de PS ? J'aimerais éviter de me hasarder dans une rustine datant de 2011 selon ce post et qu'il faudrait refaire à chaque mise à jour... Comment forcer une devise sans avoir recours à un module hors de prix ? Par avance, merci. 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