Как сгруппировать скидки в 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
,
Итак, несколько пошаговых советов по разработке:
- Создайте новую модель с 2 пользовательскими таблицами, которые будут иметь такие поля:
- Таблица группы:
- group_id - первичный ключ
- имя - название группы
- max_discount - максимальная сумма скидки
- is_percent - Тип (фиксированный или процент)
- Таблица для группы правил
- group_id - primary_key
- rule_id - внешний ключ к первичному ключу таблицы продаж / правил 2. Реализовать интерфейс администратора для него
- Таблица группы:
- Создайте поле конфигурации для максимальной скидки для всех групп.
- Создать наблюдателя на событие
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()
- сумма скидки в базовой валюте сайта
- Реализуйте свою логику в модели наблюдателя. Вы можете отслеживать примененные правила, сохраняя их в своем объекте, и с помощью следующего правила применить процесс - проверить максимумы групп и изменить суммы примененных скидок.