Jump to content

Forcer la devise en fonction du pays


godichef

Recommended Posts

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

  • 4 weeks later...

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

  • 4 weeks later...

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

  • 10 years later...

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

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