Как сгруппировать скидки в Magento?

Кто-нибудь знает, как сгруппировать скидки в Magento? Как установить максимальную общую скидку на группу? А как установить максимальную суммарную скидку? Например:

Discount Group 1:
a. Early Bird Discount = 10%
b. Member of ABC Organization = 8%
c. Member of BCD Organization = 5%
-----Total Maximum discount for this discount group = 15%

Discount Group 2:
a. Buy more than 5 items = 10%
b. Member of DFG Organization = 5%
c. Member of ASD Organization = 5%
-----Total Maximum discount for this discount group = 15%

-----Total Maximum discount for ALL discount group = 25%

1 ответ

К сожалению, нет никакой возможности достичь точно такой же функциональности, которая вам нужна, через стандартную функциональность Magento. Но вы можете создать настройку со своими группами скидок и проверить суммы скидок, наблюдая за событием salesrule_validator_process,

Итак, несколько пошаговых советов по разработке:

  1. Создайте новую модель с 2 пользовательскими таблицами, которые будут иметь такие поля:
    • Таблица группы:
      • group_id - первичный ключ
      • имя - название группы
      • max_discount - максимальная сумма скидки
      • is_percent - Тип (фиксированный или процент)
    • Таблица для группы правил
      • group_id - primary_key
      • rule_id - внешний ключ к первичному ключу таблицы продаж / правил 2. Реализовать интерфейс администратора для него
  2. Создайте поле конфигурации для максимальной скидки для всех групп.
  3. Создать наблюдателя на событие salesrule_validator_process где вы получаете такое событие с данными:
    • $observer->getEvent()->getRule() - модель действующего правила
    • $observer->getEvent()->getItem() - текущий элемент цитаты, к которому применяется это правило
    • $observer->getEvent()->getAddress() - текущий адрес котировки, к которому применяется это правило
    • $observer->getEvent()->getQuote() - текущая цитата клиента
    • $observer->getEvent()->getQty() - количество товаров, используемых для расчета скидок: фиксированная скидка на товар, процент от цены товара, в процентах от цены товара
    • $observer->getEvent()->getResult() - Varien_Object с данными, которые применяются в качестве скидки, на данный момент есть два свойства.
      • getDiscountAmount() - сумма скидки в текущей отображаемой валюте
      • getBaseDiscountAmount() - сумма скидки в базовой валюте сайта
  4. Реализуйте свою логику в модели наблюдателя. Вы можете отслеживать примененные правила, сохраняя их в своем объекте, и с помощью следующего правила применить процесс - проверить максимумы групп и изменить суммы примененных скидок.
Другие вопросы по тегам