¿Hay algún evento o lugar de complemento para cuando la regla del carrito ya no sea válida?

13

¿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\CouponManagementque 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_aftertambié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_afterevento 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 ...

Patas desaliñadas
fuente
Puede usted explicar en pocas palabras, es muy compleja
Anas Mansuri

Respuestas:

0

Lo haría con un complemento redondo para

\ Magento \ SalesRule \ Model \ RulesApplier :: applyRules

Allí tiene el parámetro $ rules, que sería una matriz que contiene identificadores de regla aplicados antiguos, y el resultado de la llamada $ continue () será una matriz de identificadores aplicados. Tal vez se podría encontrar un lugar mejor si revela lo que pretende hacer con él.

Zivorad
fuente