Есть ли событие или место для плагина, когда правило корзины больше не действует?

13

Есть ли событие или место, к которому я могу подключиться, когда правило цены корзины покупок больше не действует (например, когда оно истекает или если вы изменили количество других продуктов, где оно больше не применяется)? Я знаю, что он автоматически удаляется из корзины, но не могу найти место, где это происходит в коде.

Я пишу модуль, который добавляет бесплатный продукт в корзину для купона, в котором промежуточный итог превышает сумму 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')чтобы увидеть, было ли удалено правило. Я чувствую, что есть лучший способ сделать это, но это работает на данный момент. У меня все еще есть проблема с купонами, которые истекают, хотя ...

Неряшливые лапы
источник
не могли бы вы объяснить вкратце, это очень сложно
Anas

Ответы:

0

Я бы сделал это с плагином вокруг

\ Magento \ SalesRule \ Model \ RulesApplier :: applyRules

Там у вас есть параметр $ rules, который будет массивом, содержащим старые идентификаторы применяемых правил, а результатом вызова $ progress () будет массив примененных идентификаторов. Возможно, можно найти лучшее место, если вы раскроете, что вы собираетесь с ним делать.

Синиса колика
источник