Modification prix produit

  • Posts: 497
  • Thank you received: 35
  • Hikamarket Multivendor Hikashop Business
1 week 4 days ago #367293

Bonjour,

je ne sais pas quel serait le trigger le plus opti pour mon plugin, je cherche à combiner les tranches de prix, ex :
product A :
price A1 : min_qty 1: 5€
price A2 : min_qty 10 : 1€

product B
price B1 : min_qty 1 : 10€
price B2 : min_qty 20 : 2€

ces deux produits sont du même vendeur, il décide donc que le total des produits achetés chez lui sera le chiffre pris en compte pour toutes les tranches de prix, donc, si je le panier contient 5A et 5B, il y a 10 produits de ce vendeur, donc les tranches de prix à 10 en min_qty s'activent, le product A sera vendu 1€ et le product B sera vendu 10€

j'ai besoin bien sur de l'actualisation aux quantités du panier, j'ai pensé à onBeforeCalculateProductPriceForQuantity ou onBeforeCartSave (ou en after), mais je sais qu'il y a pas mal de vérifications d'éligibilité des produits durant le reste du process de la commande, mes modifications seront donc perdues ?

je cherche le trigger le plus propre pour mettre mon code, assez tôt pour que ce soit visible au panier pour l'utilisateur (y compris si il change les quantités dans le panier), mais aussi durable pour passer les épreuves de recalcul dans le process de la commande, avez vous une idée svp ?

Merci beaucoup

Last edit: 1 week 4 days ago by Minie.

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

  • Posts: 83932
  • Thank you received: 13588
  • MODERATOR
1 week 4 days ago #367294

Bonjour,

Vous êtes sur la bonne piste. Je pense que le mieux est d'utiliser onBeforeCalculateProductPriceForQuantity(&$product)

Cela devrait même être assez simple car HikaShop dispose déjà d'un mécanisme similaire pour les variantes d'un produit. En effet, si vous configurez des prix avec un min quantity sur le produit principal et pas de prix sur les variantes du produit, HikaShop va utiliser la somme des quantités des produits dans le panier pour vérifier le "min quantity" et sélectionner le prix du produit principal à utiliser pour toutes les variantes dans le panier.

Dans $product fourni dans onBeforeCalculateProductPriceForQuantity, vous avez les attributs:
- product_vendor_id qui contient l'id du vendeur
- cart_product_quantity qui contient la quantité du produit (ou de la variante si le produits a des variantes) dans le panier
- cart_product_total_quantity qui contient la quantité totale du produit dans le panier. Si le produit n'a pas de variantes, c'est égal à cart_product_quantity. Si le produit a des variantes, c'est égal à la somme des cart_product_quantity des variantes du produit principal.

Et, après l'appel à onBeforeCalculateProductPriceForQuantity HikaShop va prendre en compte cart_product_total_quantity pour sélectionner le prix à utiliser.
Ce même système est également utiliser quand un utilisateur ajoute un produit au panier avec différentes valeurs dans les champs personnalisés "item", ou différentes options sélectionnées.

Donc, dans votre cas, vous voulez :
- implémenter onAfterCheckCartQuantities(&$cart, $parent_products, &$ret) et stocker une référence de $cart dans le $this de votre plugin. Cela vous permettra d'avoir accès à $cart->products dans onBeforeCalculateProductPriceForQuantity car onAfterCheckCartQuantities est aussi appelé lors du chargement du panier, après la requête pour récupérer les informations des produits dans le panier, mais avant le calcul des prix.
- implémenter onBeforeCalculateProductPriceForQuantity. Dedans, vous voulez d'abord loop sur $cart->products et comparer le product_vendor_id de chaque produit dans le panier avec celui du produit courant dans $product et additionner cart_product_quantity de tous les produits du même vendeur.
- stocker ce total dans $product->cart_product_total_quantity

Ainsi, HikaShop utilisera le prix en fonction de la quantité total des produits du même vendeur dans le panier.
HikaShop se base ensuite toujours sur ce qui a été calculé durant le chargement du panier pour créer la commande, la facture, les emails, etc.
Et comme le panier est chargé sur chaque page, même si l'utilisateur change les quantités, ce sera automatiquement pris en compte.
Donc vous n'aurez rien d'autre à gérer.

Last edit: 1 week 4 days ago by nicolas.

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

  • Posts: 497
  • Thank you received: 35
  • Hikamarket Multivendor Hikashop Business
1 week 4 days ago #367302

Bonjour,

mille mercis pour cette réponse hyper complète ! Toujours opé :)

Je suis contente car j'avais commencé comme ca, j'ai bouclé cart_products dans onBeforeCartSave pour ajouter mas donnée producteur_id (j'ai dis vendeur par reflex mais c'est encore un peu plus complexe)

Puis dans onAfterCartSave j'ai calculé la sommes des cart_product_quantity de chaque producteur pour l'insérer dans un champ perso avec lequel je m'apprêtais à haker les différentes étapes de order process

Du coup c'est génial, je n'ai plus qu'à mettre cette donnée dans cart_product_total_quantity pour que ca se fasse automatiquement tout le long c'est super ! Merci beaucoup, ca ne me serait pas venu à l'idée de modifier cette donnée, je pensais que ca influerait sur la quantité du produit :cheer:

J'ignorais l'existence de onAfterCheckCartQuantities, il n'est pas dans la doc

Encore merci beaucoup ! Comme toujours, j'adore hikashop, facile et rapide, mais une grosse capacité de surcharge de dev, avec d'excellents conseils, merci :P

Last edit: 1 week 4 days ago by Minie.

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

  • Posts: 83932
  • Thank you received: 13588
  • MODERATOR
1 week 3 days ago #367303

Bonjour,

Merci du retour. J'ai mis à jour la documentation développeur pour inclure tous les évènements de l'API cart qui étaient manquants.

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

Time to create page: 0.060 seconds
Powered by Kunena Forum