Gibt es ein Ereignis oder einen Plugin-Spot, wenn die Warenkorbregel nicht mehr gültig ist?


13

Gibt es ein Ereignis oder einen Ort, für den ich ein Plugin erstellen kann, wenn eine Warenkorb-Preisregel nicht mehr gültig ist (z. B. wenn sie abläuft oder wenn Sie die Menge anderer Produkte ändern, für die sie nicht mehr gilt)? Ich weiß, dass es automatisch aus dem Warenkorb entfernt wird, aber ich kann den Ort, an dem dies geschieht, nicht im Code finden.

Ich schreibe ein Modul, das ein kostenloses Produkt für einen Gutschein in den Warenkorb legt, bei dem die Zwischensumme mehr als X beträgt. Es funktioniert alles, außer wenn die Anzahl der Artikel im Warenkorb reduziert wird, bei denen die Zwischensumme unter X fällt. Der Gutschein wird entfernt, aber mein Produkt bleibt im Warenkorb.

Bisher habe ich die folgenden Ereignisse genutzt, um das zu tun, was ich bisher brauche ...

salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before

Ich fand , Magento\Quote\Model\CouponManagementdas viel versprechend schien , da sie hat set()und remove()Methoden, aber sie scheinen nicht aufgerufen werden , wird , wenn der Wagen aktualisiert wird.

In der checkout_cart_update_items_afterscheint es auch ein logischer Ort zu sein, den ich überprüfen kann, aber es scheint, dass die Regel immer noch gemäß festgelegt ist$cart->getQuote()->getAppliedRuleIds()


UPDATE: Am Ende habe ich einen Beobachter für das checkout_cart_save_afterEreignis hinzugefügt, das danach ausgeführt wird, collectTotals()damit ich weiß, ob die Regel noch im Warenkorb liegt oder nicht. Dann vergleiche ich im Grunde $quote->getAppliedRuleIds()mit, um $quote->getOrigData('applied_rule_ids')zu sehen, ob die Regel entfernt wurde. Ich denke, es gibt einen besseren Weg, dies zu tun, aber es funktioniert im Moment. Ich habe immer noch das Problem mit Gutscheinen, die jedoch ablaufen ...


können Sie bitte kurz erklären, es ist sehr komplex
Anas Mansuri

Antworten:


0

Ich würde es mit einem Around-Plugin für machen

\ Magento \ SalesRule \ Model \ RulesApplier :: applyRules

Dort haben Sie den Parameter $ rules, der ein Array mit alten angewendeten Regel-IDs wäre, und das Ergebnis des Aufrufs von $ continue () ist ein Array angewendeter IDs. Vielleicht könnte ein besserer Ort gefunden werden, wenn Sie offenlegen, was Sie damit vorhaben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.