Arrondi des prix (à 0 ou 5 centimes)

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

Je continue mes tests. ;)
Si dans le fichier "administrator/components/com_hikashop/classes/cart.php" je neutralise le trigger ligne 1508 pour le copier ligne 1539, le code de mon plugin s'applique bien sur le total général sans impacter les autres montants :

$before_additional = !empty($cart->additional);

//$dispatcher->trigger('onAfterCartShippingLoad', array( &$cart ) );

if(!$before_additional && !empty($cart->additional)) {
if(isset($cart->full_total->prices[0]->taxes)) unset($cart->full_total->prices[0]->taxes);
	}
$dispatcher->trigger('onAfterCartShippingLoad', array( &$cart ) );
}

if($additionalInfos){
Ma question est donc : y a-t-il une raison qui m'échappe pour que ce trigger soit en ligne 1508, avant l'ajout des frais de paiement, et sinon, vous est-il possible de le déplacer ou encore de placer un trigger d'un autre nom en ligne 1539 ? Et y aurait-il une raison pour que ce ne soit pas réalisable (impact sur autre chose dont je n'ai pas idée, par exemple) ?
Merci par avance de votre réponse !
Robert

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 #217829

Bonjour,

Pas de réponse ? :(
Je continue. ;)
J'ai donc, sur la version Hikashop Essential, ajouté à la ligne 1540 du fichier "administrator/components/com_hikashop/classes/cart.php" l'instruction

$dispatcher->trigger('onAfterCartAdditionalLoad', array( &$cart ) );

et modifié en conséquence mon plugin pour réagir à ce déclencheur.
Tout fonctionne, l'arrondi ne se fait que pour le total général, ce qui était mon but.
Reste LE gros problème : le plugin ne pourra être proposé aux autres utilisateurs qu'à condiition que ce trigger soit présent dans le fichier cart.php, ce qui n'est possible que si cette ligne est intégrée au core par l'équipe de développement.

Merci par avance de votre réponse.
Au fait, désolé que cette discussion soit dans "Install &Update" qui ne correspond pas au sujet.

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

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 5 months ago #219192

Bonjour,
Toujours pas de réponse ?
Je demande simplement (ici et dans un mail envoyé il y a deux semaines, en tant que client ayant acheté la version Essentiel, resté lui aussi sans réponse) s'il est possible ou non d'avoir un trigger au "bon" endroit pour que ce plugin fasse l'arrondi à la toute fin des calculs.
N'est-il pas possible de me répondre tout aussi simplement "oui" ou "non" ?
Merci par avance !

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

  • Posts: 26226
  • Thank you received: 4035
  • MODERATOR
9 years 5 months ago #219596

Bonjour,

Nicolas est actuellement très occupé et sachant que ce thread lui est attribué (tout ce qui touche aux taxes), personne d'autre du support ne vient le regarder.
M'occupant actuellement du refactoring de différentes parties d'HikaShop pour HikaShop 3 ; l'ajout du trigger est actuellement de mon ressort, surtout si cela touche au panier ou au checkout.

Le trigger "onAfterCartShippingLoad" a été mis en place afin de permettre à des plugins de pouvoir modifier les "additionnals" avant leur processing.
Il fait donc également office de "onBeforeCartAdditionnalLoad".

Ajouter un "onAfterCartAdditionalLoad" serait possible mais ferait duplication avec le trigger ajouté dans HikaShop 2.6.0 : "onAfterProcessPayments".
Le trigger se trouve dans la class currency et va être modifié dans la prochaine release d'HikaShop afin d'être en symbiose avec le trigger "onAfterProcessShippings" et ainsi proposer les même paramètres:

$dispatcher->trigger('onAfterProcessPayments', array(&$usable_rates, &$cart));

Maintenant, dans le refactoring pour HikaShop 3 ; le processPayment de la classe currency n'est pas appelé lorsqu'il n'y a pas de méthode de paiement pour le panier.
Dans ce cas là, je serais plus d'avis d'ajouter un trigger final pour le chargement panier, qui soit appelé juste avant le retour de la fonction :
$dispatcher->trigger('onAfterFullCartLoad', array( &$cart ) );

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 5 months ago #219599

Merci Jérôme pour cette réponse !
Nous n'allons pas rentrer dans les détails, mais ce qui me gêne actuellement, c'est que générer l'arrondi avec le trigger cité par Nicolas le déclenche trop tôt.
Mon essai d'en ajouter un autre quelques lignes plus bas n'a aucun impact (à mon niveau de connaissances) sur d'autres paramètres, tout en étant effectif sur l'affichage du panier et sur le montant transmis à PayPal par exemple.
J'ai placé pour mes tests ce trigger supplémentaire

$dispatcher->trigger('onAfterCartAdditionalLoad', array( &$cart ) );

ligne 1540 du fichier parce qu'il m'a semblé qu'il n'y avait plus d'autre calcul sur le panier et que c'était donc là qu'il me semblait pouvoir calculer et afficher correctement.
Son rôle ne serait que de permettre d'activer ce plugin d'arrondi que Nicolas m'avait conseillé de créer.
'onAfterProcessPayments' pourrait-il s'utiliser pour cette fonctionnalité tout en affichant la bonne valeur sur la page du panier ? L'important est que ce plugin d'arrondi puisse donner la bonne valeur du total du panier à l'écran et dans la commande à régler. (j'espère me faire comprendre)
Cordialement,
Robert

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

  • Posts: 26226
  • Thank you received: 4035
  • MODERATOR
9 years 5 months ago #219600

Bonjour,

'onAfterProcessPayments' pourrait-il s'utiliser pour cette fonctionnalité tout en affichant la bonne valeur sur la page du panier ?

Une fois modifié afin qu'il passe également le panier en arguments ; oui, tout à fait.

Son rôle ne serait que de permettre d'activer ce plugin d'arrondi que Nicolas m'avait conseillé de créer.

Oui, je le comprends bien ; c'est pourquoi j'ai conseiller l'ajout d'un trigger qui soit plus à même d'être accepté dans HikaShop.
Je vois pourquoi vous avez voulu ajouter le trigger "onAfterCartAdditionalLoad" mais avec le système de paiement, dès lorsqu'une méthode de paiement aura un prix ; votre trigger ne servira plus à rien.
C'est pourquoi, le trigger "onAfterFullCartLoad", placé à la fin de la fonction, est nettement mieux pour vous et le reste de la communauté.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 5 months ago #219672

Merci Jérôme,
C'est justement en m'apercevant que le trigger dont avait parlé Nicolas ($dispatcher->trigger('onAfterCartShippingLoad', array( &$cart ) );) se trouve juste avant la prise en compte des surcoûts liés aux modes de paiement que j'ai testé son déplacement, puis son remplacement par un autre, après la prise en compte des frais additionnels, et juste avant

}

if($additionalInfos){

Le code 'if($additionalInfos){' me semblant ne pas concerner les prix, pour mes tests ça fonctionnait correctement.
Le seul point sur lequel j'ai un doute est le fait qu'il y a ensuite '$this->calculateWeightAndVolume($cart);' dont je ne sais pas s'il peut modifier les prix.
Cordialement,
Robert

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

  • Posts: 26226
  • Thank you received: 4035
  • MODERATOR
9 years 5 months ago #219716

Bonjour,

Encore une fois ; Le prix peut être modifié après le trigger que vous avez proposé : d'ou mon refus de l'ajouter dans HikaShop.
Les "cart additional" peuvent modifier le prix ; il est par exemple utilisé par les "user points" ou d'autre plugins permettant de créer des réductions ou surcoûts dans une commande.
De la même façon, et encore une fois, les plugins de paiement peuvent modifier le prix ; d'ou le fait que votre trigger n'apporte aucune solution viable et peut ne pas fonctionner dans un très grand nombre de cas.

Pour votre culture personnelle, au niveau de la fonction "calculateWeightAndVolume", le prix n'est aucunement touché. Elle va seulement faire un calcul du poids et de la taille/volume du panier.

Pour résumer, encore une fois ; Votre proposition de trigger "onAfterCartAdditionalLoad" n'est pas recevable/fonctionnelle/acceptable/etc ; donc il ne sera pas ajouté. Point.
Le seul trigger que je suis prêt à ajouter est "onAfterFullCartLoad" et se trouvera à la toute fin de la fonction, juste avant le "return $cart;".
Il n'y a aucun débat à avoir ou autre ; vous avez demandé l'ajout du trigger, je vous ai fait une réponse qui répondra à votre besoin dans toutes les configurations et situations possible ; donc avec un avantage pour l'ensemble de la communauté.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 5 months ago #219781

Merci de ce complément d'information, Jérôme !
Mais je rappelle que ma question initiale était "est-ce possible ou pas ?".
Je ne connais pas suffisamment le code Hikashop pour comprendre où, après la ligne où j'ai testé ce trigger supplémentaire, d'autres modifications de prix interviennent, d'où mon essai à cet endroit-là.
J'attendrai donc que celui que vous proposez soit disponible.
Cordialement,
Robert

Complément : j'ai oublié de préciser que lorsque j'ai essayé de mettre plus bas dans la fonction (au-delà de la ligne 1540 du fichier de classe cart.php), ce trigger de test, j'ai systématiquement obtenu une erreur fatale

Fatal error: Call to a member function trigger() on a non-object

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

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

  • Posts: 26226
  • Thank you received: 4035
  • MODERATOR
9 years 5 months ago #219808

Bonjour,

Oui, c'est tout à fait logique dans HikaShop 2.6.0 puisque si vous chargez un panier qui est vide (sans produits), le "dispatcher" n'est pas initialisé.

			$this->calculateWeightAndVolume($cart);
		}

		if(!empty($cart->products) && isset($dispatcher))
				$dispatcher->trigger('onAfterFullCartLoad', array( &$cart ) );

		return $cart;
	}

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
9 years 5 months ago #219868

Merci beaucoup Jérôme !

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

Time to create page: 0.075 seconds
Powered by Kunena Forum