Existe um local de evento ou plug-in para quando a regra do carrinho não é mais válida?

13

Existe um evento ou local para o qual eu possa fazer o plug-in quando uma regra de preço do carrinho de compras não for mais válida (como quando ela expira ou se você altera a quantidade de outros produtos onde ela não se aplica mais)? Eu sei que ele é removido automaticamente do carrinho, mas não consigo encontrar o local em que isso está acontecendo no código.

Estou escrevendo um módulo que adiciona um produto gratuito ao carrinho para um cupom em que o subtotal é superior a X. Está tudo funcionando, exceto quando reduz a quantidade de itens no carrinho, onde o subtotal fica abaixo de X. O cupom está sendo removido, mas meu produto está no carrinho.

Até agora, participei dos seguintes eventos para fazer o que preciso até agora ...

salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before

Descobri o Magento\Quote\Model\CouponManagementque parecia promissor, uma vez que possui métodos set()e remove()métodos, mas eles não parecem ser chamados quando o carrinho é atualizado.

No checkout_cart_update_items_afterele também parece ser um lugar lógico posso verificar, mas parece que a regra ainda é definido de acordo com$cart->getQuote()->getAppliedRuleIds()


ATUALIZAÇÃO: Acabei adicionando um observador para o checkout_cart_save_afterevento que é executado depois, collectTotals()para saber se a regra ainda está no carrinho ou não. Então eu basicamente comparo $quote->getAppliedRuleIds()com $quote->getOrigData('applied_rule_ids')para ver se a regra foi removida. Sinto que há uma maneira melhor de fazer isso, mas funciona no momento. Ainda tenho o problema com cupons que expiram ...

Patas Desalinhadas
fonte
você pode explicar em suma, é muito complexo
Anas Mansuri

Respostas:

0

Eu faria isso com um plugin ao redor para

\ Magento \ SalesRule \ Model \ RulesApplier :: applyRules

Lá você tem o parâmetro $ rules que seria uma matriz contendo os antigos IDs de regra aplicada, e o resultado da chamada $ continue () será uma matriz de IDs aplicados. Talvez um lugar melhor possa ser encontrado se você divulgar o que pretende fazer com ele.

Zivorad
fonte