THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Est-il possible de modifier la valeur du panier avant paiement afin de proposer un paiement partiel ou acompte. L'idée est de :
1/ récupérer le montant total du panier
2/ calculer le nouveau montant du panier (xx% tu total)
3/ définir le nouveau montant du panier qui sera utilisé par tous les moyen de paiements disponibles dans la boutique

Quels sont les events Thelia à intercepter pour pouvoir définir une nouvelle valeur pour le montant du panier ?

Offline


Tu ne peux pas directement modifier le montant du panier: ce total est toujours calculé en faisant la somme des articles qui sont dedans.


OpenStudio Toulouse

Offline


Hummm cela se tient.
Je suppose qu'il faut dans ce cas plutôt intervenir au moment de la creation de de la commande (orderBeforePayment par exemple) non ?

Offline


Le total de la commande est lui aussi calculé à partir de la somme des prix des articles : \Thelia\Model\Order::getTotalAmount(). C'est cette méthode que les modules de paiement utilisent en général pour déterminer ce que le client doit payer.

Si tu veux que ton client ne payent qu'une fraction du total de la commande, tu peux éventuellement utiliser une remise, qui sera finalement le reste à payer.


OpenStudio Toulouse

Offline


L'utilisation d'un coupon pour appliquer un remise ne semble pas correspondre à la notion comptable d'acompte.
Du point de vue de l'acheteur l'utilisation d'un coupon peut semer la confusion et ne correspond pas à l'idée de paiement partiel avec un reste à payer lors du retrait en boutique ou à la livraison par exemple.

Offline


Tu peux ajouter une remise à une commande (e.g. retirer une somme du total de la commande) via un module sans que le client aie à entrer un coupon. Tu peux alors présenter la remise comme un reste à payer dans les templates (pdf, mail, front)

C'est la seule solution qui satisfasse ton critère "montant utilisé par tous les moyen de paiements disponibles dans la boutique".

Tu peux aussi modifier les modules de paiement pour qu'ils ne prennent en compte qu'une fraction du total.


OpenStudio Toulouse

Offline


Merci Roadster pour toutes ces informations.

Je pense opter pour la remise sur une commande (via un module de sorte que le client n'ai pas de code à saisir). Saurais-tu quels sont les event Thelia à intercepter ?  CouponConsumeEvent ?

"Tu peux aussi modifier les modules de paiement pour qu'ils ne prennent en compte qu'une fraction du total."

Cette approche est-elle pérenne ? Que se passe-t-il en cas de mise à jour d'un module de paiement que aurait été modifier ?

Offline


Les remise n'ont pas de lien direct avec un coupon. Tu peux utiliser la méthode setDiscount() de la classe Model\Order pour ajouter une remise (en TTC) à la commande.

A la réflexion, je me rappelle que tu peux aussi ajouter une remise en Euros TTC sur le Cart (méthode Cart::setDiscount()), qui sera automatiquement reportée sur l'Order au moment de la création de la commande.
Du coup, tu peux mettre à jour ta "remise" dans le Cart avec un event listener qui écoute les events du cart (CART_ADDITEM, CART_DELETEITEM CART_UPDATEITEM, CART_DUPLICATE) avec une priorité plus basse que 128 (celle du core de Thelia) et recalcule la "remise" à chaque modification du cart. Çe me semble être une bonne méthode.

Si tu modifie un module de paiement, tes modifs seront bien sûr écrasées à la prochaine mise à jour du module. Tu peux par contre créer un module de paiement qui extends un autre module de paiement, et surcharge la méthode qui utilise le total de la commande.


OpenStudio Toulouse

Offline


Décisions, décisions, décisions....

Je vais adopter l'approche via l'approche de la remise en euros sur le panier avec les listeners qui vont bien.

Merci encore pour les pistes.