Arrondi des prix (à 0 ou 5 centimes)

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 7 months ago #214818

-- HikaShop version -- : 2.5.0
-- Joomla version -- : 3.4.4
-- PHP version -- : 5.5
-- Browser(s) name and version -- : Firefox 40.0.3
-- Error-message(debug-mod must be tuned on) -- : Aucun

Bonjour à tous,

Dans les boutiques suisses, il est nécessaire de calculer un arrondi à 0 ou 5 centimes (Rappenrundung) pour les prix des produits dans le panier.
Par exemple, pour un prix HT de 10.03 CHF, avec la taxe de 8%, le prix calculé est de 10.83 CHF : dans le panier, pour 1 produit, il faut arrondir à 10.85 CHF et pour 2 à 21.65 CHF.
Je n'ai pas trouvé d'info sur cet arrondi dans HikaShop.
Existe-t-il une fonctionnalité, ou un plugin complémentaire susceptible de faire ce calcul ?
Merci de vos réponses !
Robert

Please Log in or Create an account to join the conversation.

  • Posts: 83671
  • Thank you received: 13545
  • MODERATOR
9 years 7 months ago #214823

Bonjour,

Allez dans le menu Système>Devises, éditez votre devise et entrez 0.05 dans le champs "Incrément d'arrondi". Cela devrait fonctionner ensuite comme vous le souhaitez.

The following user(s) said Thank You: RG-Consultant

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 7 months ago #214886

Un grand merci, Nicolas !

Edit : après tests, ça me semble incorrect ! Sur la page vignette du produit (dans la liste des produits de la catégorie), le montant affiché est de 10.83 CHF. Lorsque j'ouvre la fiche produit, il passe à 10.85 CHF, ce qui fait que pour deux, l'arrondi donne 21.70 alors qu'il devrait être à 10.65 (2 x 10.83 = 20.66 arrondi au plus proche).

Last edit: 9 years 7 months ago by RG-Consultant. Reason: complément après tests

Please Log in or Create an account to join the conversation.

  • Posts: 83671
  • Thank you received: 13545
  • MODERATOR
9 years 7 months ago #215097

Bonjour,

Cela dépend simplement de la façon de calculer. Les deux façons sont correctes, juste différentes.
Cela est changeable avec l'option "Arrondir les prix durant le calcul" de la configuration.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 7 months ago #215100

Merci Nicolas, mais cette option est déjà activée, ce qui n'empêche pas le produit d'être affiché à 10.83 (simple arrondi à 2 décimales) dans la liste des produits de la catégorie et à 10.85 (arrondi correct pour la Suisse) dans la fiche du produit. Vis à vis de l'acheteur, il faudrait aussi que ça s'applique dans la liste de catégorie.

Please Log in or Create an account to join the conversation.

  • Posts: 83671
  • Thank you received: 13545
  • MODERATOR
9 years 7 months ago #215104

Bonjour,

Je répondais à votre autre soucis concernant le calcul durant le passage en caisse pour 2 produits. Si vous avez cette option activée, il est normal d'avoir 10.70 et non 10.65

Concernant le problème d'affichage sur le listing, pourriez vous fournir une capture des options HikaShop de votre menu pour que nous puissions reproduire le problème de notre coté ?

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 7 months ago #215195

Bonjour,
Non, je ne trouve pas que ce soit normal.
La logique comptable est celle-ci : arrondi ou pas, la TVA doit être calculée dans le panier, sur le montant HT de la totalité des produits, taux par taux, et donc l'arrondi se faire une fois ce calcul fait. Si je prends 2 produits à 10.03 pièce, soit 20.06 et que j'ajoute la TVA à 8%, le prix TTC est de 21.66, qu'il faut donc arrondir au plus proche, soit 21.65
Appliquer les taxes sur l'unité n'est fait que pour information, le prix n'étant valable tel quel que si on n'achète qu'une unité de ce produit et rien d'autre.
Ceci dit, la plupart du temps, l'arrondi gommera la différence et on peut considérer que je pinaille...
Cependant, il n'est pas normal que cet arrondi à 0 ou 5 centimes lié à la monnaie n'apparaisse pas dans la liste des produits d'une catégorie, mais seulement à partir de la fiche du produit.
Mon produit ne devrait donc pas s'afficher à 10.83 dans la liste, mais déjà à 10.85

Please Log in or Create an account to join the conversation.

  • Posts: 83671
  • Thank you received: 13545
  • MODERATOR
9 years 7 months ago #215272

Bonjour,

Vous vous méprennez sur mes propos. Ce n'est pas une question de pinaillage, juste de suivre ce que je vous dit et de désactiver cette option pour avoir les calculs comme vous le souhaitez.
HikaShop arrondi les prix dans tous les cas, peu importe comment vous configurez l'option "Arrondir les prix durant le calcul" de la configuration. Cette option change uniquement la façon dont sont fait les calculs pour soit ne pas faire d'arrondi entre les calculs (et du coup l'arrondi se fait à la fin sur le total HT, comme vous le souhaitez), soit pour les faire entre chaque étape (ce que vous ne voulez pas, et qui est en effet incorrect comptablement en France mais qui est pourtant quelque chose de très commun en ecommerce, voir dans certains pays).
C'est pourquoi il y a une option qui gère les deux modes de calculs, et donc, comme expliqué précédemment, il faut que vous changiez l'option "Arrondir les prix durant le calcul" pour que cela fonctionne comme vous le voulez....

Maintenant, concernant le listing des produits, il est bizarre que cela fasse cela. C'est pourquoi je vous demandais de fournir une capture des options HikaShop de votre menu pour que nous puissions reproduire le problème de notre coté.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 7 months ago #215291

Bonjour,
Non, je me méprends pas, et si je parle de pinaillage, c'est à mon niveau parce que cette situation n'a probablement pas, le plus souvent, de conséquences pratiques.
Donc avec l'incrément d'arrondi spécifique à la Suisse et l'arrondi activé dans la configuration générale, j'ai cette discordance entre le prix TTC dans la liste de catégorie et dans la fiche du produit, et le panier se base sur le prix déjà arrondi de la fiche produit.
Le prix HT est de 10.03, le taux de TVA de 8% et donc le prix TTC de 10.83
Je viens de désactiver l'arrondi dans la configuration générale, onglet "Principale", cadre "Taxes", en laissant le paramètre d'arrondi 0.05 pour le Franc Suisse ("incrément d'arrondi") dans la gestion des devises.
Dans la liste des produits de la catégorie, j'ai bien comme prix TTC 10.83, ainsi que dans la fiche du produit. A ce niveau donc, c'est plus "homogène". Je précise que dans la fiche du produit, le prix est affiché TTC, sans mention du prix HT et de la TVA.
Mais du coup, dans le panier, si le calcul est correct (21.66 pour deux exemplaires), et que je n'ai pas de frais de port, le total reste à 21.66 sans que l'arrondi soit passé à 21.65 donc (pas plus d'arrondi s'il y a des frias de port).
Ce qui semble vouloir dire que si l'arrondi n'est pas activé dans la configuration générale, cet incrément d'arrondi spécifique à la devise n'est pas pris en compte dans le panier.

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 83671
  • Thank you received: 13545
  • MODERATOR
9 years 6 months ago #216075

Bonjour,

Ok, je vois ce que vous voulez dire.
Merci d'avoir pris le temps d'expliquer en détails le soucis.

Ajoutez le code:

if(!$config->get('round_calculations', 0) && !empty($locale['rounding_increment']) && $locale['rounding_increment'] > 0.00001){
			$number = $this->roundByIncrement($number, (float)$locale['rounding_increment']);
		}
avant la ligne:
preg_match_all('/%((?:[\^!\-]|\+|\(|\=.)*)([0-9]+)?(?:#([0-9]+))?(?:\.([0-9]+))?([in%][in]?)/', $format, $matches, PREG_SET_ORDER);
dans le fichier administrator/components/com_hikashop/classes/currency.php et cela permettra d'arrondir les prix affichés avec la prise en compte de l'incrément même lorsque l'option "arrondir les prix durant les calculs" est désactivée.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 6 months ago #216081

Merci Nicolas, mais ces lignes provoquent une erreur fatale :

Fatal error: Call to a member function get() on a non-object in /home/www/sitestests/*********/administrator/components/com_hikashop/classes/currency.php on line 2246

Impossible d'utiliser $config->get('round_calculations', 0) à cet endroit alors que c'est possible ailleurs dans ce même fichier ? Je ne comprends pas.
En fait, $config n'est plus valable ici.

Last edit: 9 years 6 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 6 months ago #216083

Après ajout de $config =& hikashop_config(); juste avant la ligne en question, les choses rentrent dans l'ordre (plus d'erreur fatale), mais le prix est arrondi au niveau du produit lui-même dans sa fiche et dans le panier, à 10.85 au lieu de 10.83, et pour 2 par exemple, j'ai dans le panier le pri unitaire à 10.85, le nombre d'unité à 2 et le total à 21.65
Il serait mieux que le premier prix ne soit pas encore arrondi.

Attachments:
Last edit: 9 years 6 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 83671
  • Thank you received: 13545
  • MODERATOR
9 years 6 months ago #216086

Bonjour,

Oui, j'avais en effet oublié de vous donner le $config = hikashop_config(); just avant. Désolé.

Pour le prix du produit, c'est normal qu'il soit arrondi dès la page produit.
Justement cette modification permet de prendre en compte l'incrément d'arrondi à l'affichage du prix au lieu de le prendre en compte durant les calculs lorsque l'option "arrondir les prix durant les calculs" est activée.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 6 months ago #216174

Pour moi non, Nicolas, il n'est pas normal que l'arrondi soit déjà présent dans la fiche du produt comme prix unitaire, d'autant que la demande d'arrondi ne porte que sur celui final lié à la monnaie, au moment du paiement.
Dans la fiche, on devrait conserver 10.83 pour cet exemple et pas déjà se retrouver à 10.85, l'arrondi à 0 ou 5 centimes spécifique à la Suisse ne devrait intervenir que sur la toute dernière ligne de total du panier.

Please Log in or Create an account to join the conversation.

  • Posts: 83671
  • Thank you received: 13545
  • MODERATOR
9 years 6 months ago #216181

Bonjour,

Je vois ce que vous voulez dire, mais ce n'est pas comme cela que le système fonctionne.
Dans ce cas, ne mettez pas d'incrément d'arrondi à votre monnaie, et éditez la fonction loadFullCart du fichier administrator/components/com_hikashop/classes/cart.php pour rajouter l'arrondi par incrément sur le total final du panier à la fin de la fonction.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 6 months ago #216194

Bonjour,
Donc il ne fonctionne pas comme il devrait ! ;)
Si je vous suis, un gestionnaire de boutique qui veut s'arranger pour avoir des prix à 99 centimes par exemple, prix "psychologique" comme chacun sait, il ne pourra donc pas les avoir (en interdisant l'arrondi au franc supérieur) ET avoir l'arrondi à 5 centimes au niveau du panier lui-même.
Je rappelle que dans mon test, seul l'arrondi spécifique à la Suisse est activé, pas celui dans la configuration des prix des produits.
Et si je mets du code dans un fichier système d'Hikashop, il faudra que le client le fasse à nouveau lui-même lors de chaque mise à jour, ou aors il sera contraint de faire appel à moi à chaque fois, ces modifications ne me semblant pas la meilleure solution (depuis 9 ans que j'utilise Joomla!, j'ai appris à ne jamais toucher au core).

Please Log in or Create an account to join the conversation.

  • Posts: 83671
  • Thank you received: 13545
  • MODERATOR
9 years 6 months ago #216207

Bonjour,

Je ne comprends pas la logique de mettre un prix à .99 pour finalement faire payer 1.00 au client.
Nous n'avons pas d'arrondi à 5cents en France, donc c'est peut être pour cela que je ne comprends pas la logique.
Personnellement si je vois un produit à 0.99 et qu'au final on me fait payé 1.00 au lieu de 0.99 à la caisse, je considère cela comme de la publicité mensongère.
Vous voulez dire qu'il est commun en Suisse de mettre des prix à 0.99 et de faire payer 1.00 aux clients ?

Aussi je parlais de modifier le fichier administrator/components/com_hikashop/classes/cart.php car c'est le plus simple, mais vous pouvez faire exactement la même chose en créant un petit plugin HikaShop implémentant le trigger onAfterCartShippingLoad(&$cart). En ce cas, même après mise à jour d'HikaShop vous garderez la modification en place. C'est juste un peu plus compliqué à mettre en place si vous n'êtes pas un développeur confirmé car il faut savoir créer un plugin Joomla, mais cela ne change pas grand chose au final du point de vue de l'implémentation de l'arrondi.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 6 months ago #216230

Merci Nicolas,

Oui, on peut très bien attirer le client avec des prix au-dessous de l'unité, en Suisse comme ailleurs (je ne suis pas suisse).
En faisant une recherche sur cet arrondi, j'ai vu un titre de discussion à propos justement de magasins qui affichent de tels prix, ce qui semblait étonner l'auteur, comme vous l'êtes.
En Suisse, comme il n'y a pas de pièces au-dessous de 5 centimes, l'arrondi va se faire sur le total de l'achat, et non pas article par article.
Or actuellement (et Hikashop n'est pas le seul à calculer ainsi), l'arrondi est géré dès l'application de la taxe, ce qui est alors une sur- ou sous-évaluation du prix réel.
La logique veut donc que dans sa page produit, pour reprendre mon exemple, l'article HT à 10.03 soit à 10.83 TTC, avec la taxe de 8%, et en utilisant un arrondi classique au centime.
S'il est seul dans le panier, le client le paiera 10.85 ; par contre, s'il y en a 2, le total sera de (10.03 x 2) x 1.08 = 21.66 arrondi à 21.65, et pas 21.70.

En ce qui concerne la création d'un plugin, même si je mets un peu le nez dans le code pour certaines modifications, j'en serais bien incapable.
Est-ce si difficile, au niveau d'Hikashop, que cet arrondi prévu dans la gestion des devises elles-mêmes ne s'applique que sur le total que le client paie ?

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 6 months ago #217510

Bonjour,

Créer un plugin, pas de problème en soi, mais quel code y mettre ?
J'ai galéré pour trouver la bonne variable à arrondir : confirmez-moi, s'il vous plaît, que c'est bien ça :

<?php
// no direct access
defined( '_JEXEC' ) or die;
class plgHikashopRappenrundung extends JPlugin {
	/**
	 * Plugin method with the same name as the event will be called automatically. */
	function __construct(&$subject, $config) {
		parent::__construct($subject, $config);
	}
	 function Rappenrundung($cart)
	 {
	 }
		/*
		 * Plugin code goes here.
		 * You can access database and application objects and parameters via $this->db,
		 * $this->app and $this->params respectively
		 */
	function onAfterCartShippingLoad(&$cart) {
		$cart->full_total->prices[0]->price_value_with_tax = round($cart->full_total->prices[0]->price_value_with_tax / 0.05, 0) * 0.05;
		return $cart;
	}
}
?>
Si ma méthode de calcul est juste, je butte sur un problème : il faut que je n'applique cet arrondi qu'au franc suisse, si le site doit être multidevises, ce qui veut dire vérifier la monnaie dans le plugin, ce que je ne sais pas faire :(
Par quelle méthode puis-je retrouver la monnaie du panier pour conditionner cet arrondi à elle seule ?
Merci d'avance de votre aide !
Robert

Complément : hélas, l'appel à la fonction onAfterCartShippingLoad se faisant dans cart.php avant l'ajout des frais complémentaires, le plugin ne fonctionne que s'il n'y en a pas, et ne donne alors pas un arrondi sur le total général. :(

Last edit: 9 years 6 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 6 months ago #217588

Il semble que j'aie trouvé la méthode pour la monnaie. Merci de bien vouloir me le confirmer. Reste à trouver comment faire pour que les frais de paiement puissent être inclus avant d'appeler la méthode d'arrondi : dans la mesure où il n'y a aucun trigger après leur ajout dans le prix total, je ne vois pas de solution et le plugin ne fait pas ce que j'en espère.

<?php
// no direct access
defined( '_JEXEC' ) or die;
 
class plgHikashopRappenrundung extends JPlugin {

	function __construct(&$subject, $config) {
		parent::__construct($subject, $config);
	}
	 function Rappenrundung($cart)
	 {
	 }

	function onAfterCartShippingLoad(&$cart) {
		$currencyClass = hikashop_get('class.currency');
		$currency_id = hikashop_getCurrency();
		if ($currency_id == 151) {
		$cart->full_total->prices[0]->price_value_with_tax = round($cart->full_total->prices[0]->price_value_with_tax / 0.05, 0) * 0.05;
		return $cart;
		}
	}
}
?>
Merci de votre aide !
Robert

Please Log in or Create an account to join the conversation.

Time to create page: 0.086 seconds
Powered by Kunena Forum