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.