Skip to content

webber12/CommerceDiscounts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

CommerceDiscounts

Система скидок для 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-й штуки"
  • скидки применяются к текущему товару в момент добавления и на предыдущие товары не распространяются

скидки для товаров и для родительских категорий равноправные

Это означает, что действует общий принцип - к каждому товару применяется максимальная из всех возможных скидок

Cкидка для корзины

  • применяется после применения всех скидок к товарам к общей сумме корзины
  • для подсчета скидок возможны два варианта условий: "начиная с n штук в корзине любых товаров" либо "начиная с общей суммы корзины в n рублей"
  • в случае, если скидка считается от суммы, то для идентификации условий подходящих скидок используется итоговая сумма корзины
  • для скидок в корзине доступна дополнительная настройка "Исключать акционные товары" - при активации данной настройки из суммы корзины для расчета итоговой скидки отнимается сумма по всем товарам, к которым уже применена скидка

Сниппет CommerceDiscounts

  • используется для показа дополнительной информации в строке корзины о примененной к товару скидке
  • пример вызова [!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