¿Hay algún evento o lugar para el que pueda realizar un complemento cuando una regla de precio del carrito de compras ya no es válida (como cuando caduca o si cambia la cantidad de otros productos donde ya no se aplica)? Sé que se elimina automáticamente del carrito, pero parece que no puedo encontrar el lugar en el código.
Estoy escribiendo un módulo que agrega un producto gratuito al carrito para un cupón donde el subtotal es más de X cantidad. Todo funciona, excepto cuando se reduce la cantidad de artículos en el carrito donde el subtotal va por debajo de X. El cupón se está eliminando, pero mi producto permanece en el carrito.
Hasta ahora he aprovechado los siguientes eventos para hacer lo que necesito hasta ahora ...
salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before
Encontré lo Magento\Quote\Model\CouponManagement
que parecía prometedor ya que tiene métodos set()
y remove()
métodos, pero no parece que se les llame cuando se actualiza el carrito.
En el checkout_cart_update_items_after
también parece un lugar lógico que puedo consultar, pero parece que la regla todavía se establece de acuerdo con$cart->getQuote()->getAppliedRuleIds()
ACTUALIZACIÓN: terminé agregando un observador para el checkout_cart_save_after
evento que se ejecuta después, collectTotals()
así que sé si la regla todavía está en el carrito o no. Entonces, básicamente, lo comparo $quote->getAppliedRuleIds()
con $quote->getOrigData('applied_rule_ids')
para ver si la regla se ha eliminado. Siento que hay una mejor manera de hacer esto, pero funciona por el momento. Sin embargo, todavía tengo el problema con los cupones que caducan ...