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\CouponManagement
que 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_after
ele 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_after
evento 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 ...
fonte
Respostas:
Eu faria isso com um plugin ao redor para
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.
fonte