Y a-t-il un événement ou un lieu pour lequel je peux me connecter lorsqu'une règle de prix du panier n'est plus valide (par exemple lorsqu'elle expire ou si vous modifiez la quantité d'autres produits là où elle ne s'applique plus)? Je sais qu'il est automatiquement supprimé du panier, mais je n'arrive pas à trouver l'endroit où cela se produit dans le code.
J'écris un module qui ajoute un produit gratuit au panier pour un coupon où le sous-total est supérieur à X montant. Tout fonctionne, sauf pour réduire la quantité d'articles dans le panier où le sous-total passe en dessous de X. Le coupon est supprimé, mais mon produit reste dans le panier.
Jusqu'à présent, j'ai exploité les événements suivants pour faire ce dont j'ai besoin jusqu'à présent ...
salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before
J'ai trouvé Magento\Quote\Model\CouponManagement
ce qui semblait prometteur car il l'a set()
et les remove()
méthodes, mais ils ne semblent pas être appelés lorsque le panier est mis à jour.
Dans checkout_cart_update_items_after
cela, cela semble également être un endroit logique que je peux vérifier, mais il semble que la règle soit toujours définie en fonction de$cart->getQuote()->getAppliedRuleIds()
MISE À JOUR: J'ai fini par ajouter un observateur pour l' checkout_cart_save_after
événement qui se déroule après collectTotals()
si sait si la règle est toujours dans le panier ou non. Ensuite, je compare essentiellement $quote->getAppliedRuleIds()
avec $quote->getOrigData('applied_rule_ids')
pour voir si la règle a été supprimée. J'ai l'impression qu'il existe une meilleure façon de procéder, mais cela fonctionne pour le moment. J'ai toujours le problème avec les coupons qui expirent cependant ...
la source
Réponses:
Je le ferais avec un plugin around pour
Là, vous avez le paramètre $ rules qui serait un tableau contenant les anciens ID de règle appliquée, et le résultat de l'appel de $ procéder () sera un tableau d'ID appliqués. Peut-être qu'un meilleur endroit pourrait être trouvé si vous divulguez ce que vous avez l'intention d'en faire.
la source