Esiste un punto evento o plugin per quando la regola del carrello non è più valida?


13

Esiste un evento o un luogo per cui posso effettuare il plug-in quando una regola del prezzo del carrello non è più valida (ad esempio quando scade o se si modifica la quantità di altri prodotti dove non è più applicabile)? So che viene rimosso automaticamente dal carrello, ma non riesco a trovare il posto in cui questo sta accadendo nel codice.

Sto scrivendo un modulo che aggiunge un prodotto gratuito al carrello per un coupon in cui il totale parziale è superiore a X. Funziona tutto tranne quando si riduce la quantità di articoli nel carrello in cui il totale parziale scende al di sotto di X. Il coupon viene rimosso, ma il mio prodotto rimane nel carrello.

Finora ho sfruttato i seguenti eventi per fare ciò di cui ho bisogno finora ...

salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before

Ho trovato ciò Magento\Quote\Model\CouponManagementche sembrava promettente dal momento che ha set()e remove()metodi, ma non sembrano essere chiamati quando il carrello viene aggiornato.

Nella checkout_cart_update_items_aftersembra anche come un luogo logico posso controllare, ma sembra la regola è ancora impostato in base al$cart->getQuote()->getAppliedRuleIds()


AGGIORNAMENTO: Ho finito per aggiungere un osservatore per l' checkout_cart_save_afterevento che viene eseguito dopo, collectTotals()quindi so se la regola è ancora nel carrello o meno. Quindi fondamentalmente confronto $quote->getAppliedRuleIds()con $quote->getOrigData('applied_rule_ids')per vedere se la regola è stata rimossa. Sento che esiste un modo migliore per farlo, ma per il momento funziona. Ho ancora il problema con i coupon che scadono però ...


puoi per favore spiegare in breve, è molto complesso
Anas Mansuri il

Risposte:


0

Lo farei con un plugin around per

\ Magento \ SalesRule \ modello \ RulesApplier :: applyRules

Lì hai un parametro $ rules che sarebbe un array contenente vecchi ID di regole applicati, e il risultato della chiamata $ continue () sarà un array di ID applicati. Forse si potrebbe trovare un posto migliore se si rivela ciò che si intende fare con esso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.