Система скидок для Commerce на базе модуля управления таблицами webixTable (https://github.com/webber12/webixtable)
Компонент состоит из аддона для модуля webixTable (модуль "Скидки"), плагина для Commerce (CommerceDiscounts) и вспомогательного сниппета для вывода информации о скидке товара в корзине CommerceDiscounts.
- система скидок формируется в модуле
- доступны 3 вида скидок: скидка для списка товаров, скидка для категорий товаров и общая скидка для корзины
- название скидки
- дата начала и окончания срока применения скидки. Скидка может быть бессрочной, причем не задавать можно как начальную или конечную дату, так и обе сразу
- группа веб-пользователей, для которых применяется скидка (по-умолчанию - для всех)
- размер скидки: может задаваться в процентах (приоритет) либо в твердой сумме. Если заданы обе скидки, то применяется процентная. Скидка в твердой сумме не может быть больше итоговой суммы, к которой она применяется
- параметр "активен" - можно временно отключать либо включать скидку в период действия согласно указанным датам
Для каждого товара применяется максимальная скидка из всех, чьи условия данный товар соблюдает (список, родительская категория)
- позволяет задать скидку для определенного списка товаров. Данный список формируется в модуле. Отбор в список идет по id шаблона товара (задается в настройках модуля, может быть задано несколько через запятую)
- для формирования списка товаров необходимо: в левой панели ввести часть названия товара, после фильтрации появится список доступных товаров. Нужные перетянуть в правую панель. Сохранить.
- удаление товара из списка - перетянуть удаляемый товар из правой части списка в левую, сохранить
- скидки применяются к текущему товару в момент добавления и на предыдущие товары не распространяются
- для всех скидок данного вида можно сформировать дополнительные условия:
- применять скидку "начиная с" определенного количества данного товара (во всех модификациях) в корзине - например, "купи 4 и на все последующие получи скидку 20%"
- применять скидку "для каждого n-го" товара данного id в корзине (например вариант "каждый третий - за полцены")
- применять скидку "начиная с" определенной суммы данного товара в корзине - "купи на спичек на 100 рублей и получи скидку на дополнительные спички 10 рублей"
- применять скидку "при достижении (beta)" определенного количества или суммы товара в корзине. В отличие от условия "начиная с", при котором скидка применяется только к вновь добавляемым товарам, скидка "при достижении" распространяется на все подходящие в корзине товары. Пример - при покупке 3 и более пачек - цена за пачку -5%
- позволяет задавать скидку для групп товаров, сформированных по определенному признаку
- родительскую категорию для формирования дерева категорий необходимо задать в настройках модуля (можно задать несколько через запятую, например категория "каталог" и категория "бренды")
- порядок расчета родителей: сначала для товара пытаемся найти родителей по иерархии сверху,
- если таковых среди доступных не оказалось - ведется поиск по значению родителей, заданных в tv (список tv, в которых могут хранится id родителей задается в настройках плагина - например category, brand)
- как и для списка товаров, для скидок с учетом категорий можно задать 3 варианта условий: "начиная с n штук", "начиная с n рублей", "для каждой n-й штуки"
- скидки применяются к текущему товару в момент добавления и на предыдущие товары не распространяются
Это означает, что действует общий принцип - к каждому товару применяется максимальная из всех возможных скидок
- применяется после применения всех скидок к товарам к общей сумме корзины
- для подсчета скидок возможны два варианта условий: "начиная с n штук в корзине любых товаров" либо "начиная с общей суммы корзины в n рублей"
- в случае, если скидка считается от суммы, то для идентификации условий подходящих скидок используется итоговая сумма корзины
- для скидок в корзине доступна дополнительная настройка "Исключать акционные товары" - при активации данной настройки из суммы корзины для расчета итоговой скидки отнимается сумма по всем товарам, к которым уже применена скидка
- используется для показа дополнительной информации в строке корзины о примененной к товару скидке
- пример вызова [!CommerceDiscounts? &row=
[+row+]
&tpl=@CODE:[+amount+] [+unit+]
!] - параметр tpl задается по правилам DLTemplate- доступны варианты: чанк, @CODOE:, @B_FILE и т.п.
- доступные плейсхолдеры - summ (сумма скидки), formatSumm(отформатированная величина скидки), amount (примененная величина скидки), unit (ед.изм.скидки), name (название скидки), id (id скидки), originalPrice (исходная цена до применения скидки)
- для корректной работы пересчета в корзине необходимо заменить атрибут поля ввода количества data-commerce-action="recount" на data-commerce-action-discount="recount", атрибут элемента для удаления из корзины data-commerce-action="remove" на data-commerce-action-discount="remove"
- после пересчета корзины дополнительно вызываются 2 js-события: commerce-discounts-recount-discount-ok (после пересчета количества) и commerce-discounts-remove-discount-ok (после удаления строки) для дополнительного функционала (уведомлений и т.п.)
- требуется версия MySQL >=5.6