Чи є подія чи місце, на яке я можу підключитися, коли правило ціни цін у кошику більше не діє (наприклад, коли термін його дії закінчується, або якщо ви змінюєте кількість інших товарів, коли це більше не застосовується)? Я знаю, що він автоматично видаляється з кошика, але я не можу знайти місце, що це відбувається в коді.
Я пишу модуль, який додає безкоштовний товар у кошик за купоном, де підсумковий показник перевищує суму X. Це все працює за винятком випадків, коли зменшується кількість предметів у кошику, де підсумковий показник опускається нижче X. Купон видаляється, але мій товар залишається у кошику.
Поки я брав участь у наступних заходах, щоб зробити те, що мені потрібно досі ...
salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before
Я знайшов, Magento\Quote\Model\CouponManagement
що здавалося перспективним, оскільки він має set()
і remove()
методи, але, схоже, їх не викликають, коли кошик оновлюється.
В checkout_cart_update_items_after
цей же схоже на логічне місце , де я можу перевірити, але, схоже , правило все ще встановлена в відповідно до$cart->getQuote()->getAppliedRuleIds()
ОНОВЛЕННЯ: Я в кінцевому підсумку додав спостерігача за checkout_cart_save_after
подією, яка запускається після collectTotals()
цього, знає, чи все ще правило знаходиться у кошику чи ні. Тоді я в основному порівняти $quote->getAppliedRuleIds()
з , $quote->getOrigData('applied_rule_ids')
щоб побачити , якщо правило було видалено. Я відчуваю, що є кращий спосіб зробити це, але це працює на даний момент. У мене все ще є проблема з купонами, які закінчуються, хоча ...