Discontrol

Контроль скидок магазина.
Автор дополнения
Володя Володин
Пакетов
46
Закачек
22 795
Обычно отвечает в течение суток
Автор дополнения
Пакетов
46
Закачек
22 795
Обычно отвечает в течение суток
Версия 1.2.5-beta
Дата выпуска 08.06.2019
Загрузки 443
Просмотры 12 723
Внимание, этот компонент требует версию MODX не ниже 2.4 !
Система скидок для магазинов* на MODX Revolution


* Система скидок позволяет работать с любым магазином на MODX Revolution. Действующая версия содержит обработчики только для магазина [miniShop2].


Скидки на продукт

Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт».


Панель управления скидками на продукт.

Доступно:


  • сортировка по группе пользователя
  • сортировка по классу опций продукта
  • поиск по описанию, классу, ключу, значению


Окно редактирования скидки на продукт.
  • группа пользователя
  • класс опции продукта
  • ключ опции продукта
  • значение опции продукта
  • сравнение
  • скидка продукта
  • условие
  • описание


Расчет скидки на продукт.

В зависимости от условий задания скидки, полученных опций продукта, для каждого продукта по группе пользователя
формируется массив скидок вида:


[msProductData] = array(
	0 => 10,
	1 => 35,
	2 => 20
	)
	[msVendor] = array(
	0 => 16
	)
	[msProductOption] = array(
	0 => 50,
	1 => 10
	)

Где ключ массива — класс опции продукта, а значения — возможные скидки на продукт.


Для расчета скидки используется настройка product_option_expression вида:


max~$msProductOption + max~$msProductData + max~$msVendor

в данном случае результат общей скидки по группе пользователя на продукт представляет из себя сумму максимальных
скидок. Записывается в переменную groups и для расчета итоговой скидки используется настройка
product_group_expression вида:


max~$groups

Итоговая скидка на продукт равна максимальной скидке на продукт по группам пользователя.


Пример задания скидки на продукт.

Постановка на скидку оптовикам:


  • дать скидку на продукты бренда «adidas» 10%


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс msVendor


    [x] ключ name


    [x] значение adidas


    [x] скидка 10%


    [x] сравнение (string) — Равно


  • дать скидку на все продукты нового поступления скидку 5%


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс msProductData


    [x] ключ new


    [x] значение 1


    [x] скидка 5%


    [x] сравнение (integer) — Равно


  • дать скидку на все продукты стоимостью более «3 000 руб.» 10%


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс msProductData


    [x] ключ price


    [x] значение 3000


    [x] скидка 10%


    [x] сравнение (float) — Больше


  • дать скидку на все продукты c цветом «белый» 5%


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс msProductOption


    [x] ключ value


    [x] значение белый


    [x] скидка 5%


    [x] сравнение (string) — Равно


    [x] условие {«key»:«color»}


  • дать скидку на продукты категории «ботинки», «штиблеты» 100 у.е.


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс modResource


    [x] ключ parent


    [x] значение [11,12] — где 11,12 id нужных нам категорий


    [x] скидка 100


    [x] сравнение (mixed) — Присутствует


Скидки на заказ

Приложения >> Контроль скидок >> Вкладка «Скидки на Заказ».


Панель управления скидками на заказ.

Доступно:


  • сортировка по группе пользователя
  • сортировка по классу опций заказа
  • поиск по описанию, классу, ключу, значению


Окно редактирования скидки на заказ.
  • группа пользователя
  • класс опции заказа
  • ключ опции заказа
  • значение опции заказа
  • сравнение
  • скидка заказа
  • условие
  • описание


Расчет скидки на заказ.

В зависимости от условий задания скидки, полученных опций заказа, для каждого заказа по группе пользователя
формируется массив скидок вида:


[msSessionCart] = array(
	0 => 100,
	1 => 350,
	2 => 200
	)
	[msCustomerProfile] = array(
	0 => 160
	)
	[msOrder] = array(
	0 => 500,
	1 => 100
	)

Где ключ массива — класс опции заказа, а значения — возможные скидки на заказ.


Для расчета скидки используется настройка order_option_expression вида:


max~$msSessionCart + max~$msCustomerProfile + max~$msOrder

в данном случае рузультат общей скидки по группе пользователя на заказ представляет из себя сумму максимальных
скидок. Записывается в переменную groups и для расчета итоговой скидки используется настройка
order_group_expression вида:


max~$groups

Итоговая скидка на заказ равна максимальной скидке на заказ по группам пользователя.


Пример задания скидки на заказ.

Постановка на скидку оптовикам:


  • дать скидку на заказ при сумме в корзине больше «20 000 руб.» 10%


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс msSessionCart


    [x] ключ total_cost


    [x] значение 20000


    [x] скидка 10%


    [x] сравнение (float) — Больше


  • дать скидку на заказ при кол-ве в корзине товаров больше «20 шт.» 10%


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс msSessionCart


    [x] ключ total_count


    [x] значение 20


    [x] скидка 10%


    [x] сравнение (float) — Больше


  • дать скидку на заказ при наличии ранее покупок на сумму свыше «50 000 руб.» 20%


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс msCustomerProfile


    [x] ключ spent


    [x] значение 50000


    [x] скидка 20%


    [x] сравнение (float) — Больше


  • дать скидку на заказ при наличии заказов оплаченных ранее через «Яндекс Кассу» 5%


    Создаем скидку с параметрами:


    [x] группа Оптовики


    [x] класс msOrder


    [x] ключ delivery


    [x] значение 2


    [x] скидка 5%


    [x] сравнение (integer) — Равно


    [x] условие {«status»:2}


Сравнение

Приложения >> Контроль скидок >> Вкладка «Сравнение».


Панель управления сравнениями опций.

Доступно:


  • поиск по описанию, названию


Окно редактирования сравнения опций.
  • имя сравнения
  • тип значений сравнения
  • выражения сравнения
  • переменные
  • описание


Расчет сравнения опций.

Для сравнения применяется заданное выражение. Доступные переменные:


  • c — значение полученной опции
  • v — значение заданное для сравнения

Сравнение истинно при результате вычисления отличного от нуля — результат вычисления скидки помещается в массив
скидок или же сравнение ложно — скидка не вычисляется.


При сравнении учитывается заданный тип данных, доступны string, integer, float.


Так же вы можете составить свое собственное сравнение с использованием дополнительных переменных заданных через
параметр переменные (json строка)*.


Операторы сравнения.

Доступные операторы:


  • + сложение
  • - вычитание
  • * умножение
  • / деление
  • = равно
  • != не равно
  • < меньше
  • > больше
  • in присутствует в массиве
  • !in не присутствует в массиве
  • min~ наименьшее значение
  • max~ наибольшее значение
  • sum~ сумма значений
  • shift~ первое значение
  • pop~ последнее значение
  • rand~ рандомное значение
Настройка

Системные настройки >> discontrol


Раздел «Основные» настройки.


  • product_classes классы продукта


    Список классов продукта через запятую.


    По умолчанию доступно modResource,msProductData,msVendor,msProductOption,msSessionCar


  • order_classes классы заказа


    Список классов заказ через запятую.


    По умолчанию доступно msCustomerProfile,msOrder,msSessionCart


Раздел «Скидка» настройки.


  • allow_zero_price разрешить нулевую стоимость продукта


    Разрешить нулевую стоимость продукта в результате скидки.


  • allow_zero_cost разрешить нулевую стоимость заказа


    Разрешить нулевую стоимость заказа в результате скидки.


  • product_option_expression выражение расчета скидки по опциям продукта


    Результат скидки будет помещен в массив groups.


    По умолчанию max~$msProductOption + max~$msProductData + max~$msVendor — сумма максимальных скидок.


  • product_group_expression выражение расчета скидки по группе пользователя


    Результат скидки является окончательным.


    По умолчанию max~$groups — максимальное значение из возможных.


  • order_option_expression выражение расчета скидки по опциям заказа


    Результат скидки будет помещен в массив groups.


    По умолчанию max~$msSessionCart + max~$msCustomerProfile + max~$msOrder — сумма максимальных скидок.


  • order_group_expression выражение расчета скидки по группе пользователя


    Результат скидки является окончательным.


    По умолчанию max~$groups — максимальное значение из возможных.


Проверка

Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт» >> Вкладка «Проверка»


Приложения >> Контроль скидок >> Вкладка «Скидки на Продукт» >> Вкладка «Проверка»


Проверка скидок.

Для продуктов и заказав реализована панель проверки скидок.






Доступно:

  • выбор пользователя
  • выбор продукта
  • выбор магазина
  • переменные
* выражение расчета скидки по опции

	* выражение расчета скидки по группе

	* дополнительные переменные

	Можно указать в виде json строки с указанием класса скидки, ключа и значения
Пример проверки скидки на продукт.

Проверить величину скидки незарегистрированного пользователя на «продукт 1»


Задаем следующие параметры:


[x] пользователь Нет


[x] продукт «продукт 1»


В окне расчета появится лог расчета скидки на продукт.


[user:groups] [0]
	[discounts] [{"msProductData":["5"]}]
	[option:expression] max~$modResource + max~$msProductOption + max~$msProductData + max~$msVendor +
	max~$msSessionCart
	[group:discounts] [5]
	[group:expression] max~$groups
	[price:evaluate] 50
	[discount:evaluate] 5
	[newprice:evaluate] 45

Расшифровка лога расчета:


  • [user:groups] группы пользователя


    [user:groups] [0]

    получена группа 0


  • [discounts] скидки продукта по опциям


    [discounts] [{"msProductData":["5"]}]

    для данного продукта действует скидка 5 у.е. по классу msProductData


  • [option:expression] выражение для расчета скидки по опциям


    [option:expression] max~$modResource + max~$msProductOption + max~$msProductData + max~$msVendor +
    			max~$msSessionCart

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


  • [group:discounts] скидки продукта по группам


    [group:discounts] [5]

    получена скидка 5 у.е.


  • [group:expression] выражение для расчета скидки по группам


    [group:expression] max~$groups

    максимальное значение из возможных


  • [price:evaluate] стоимость продукта


    price:evaluate] 50

    получена стоимость продукта 50 у.е.


  • [discount:evaluate] скидка продукта


    [discount:evaluate] 5

    получена скидка продукта 5 у.е.


  • [newprice:evaluate] новая стоимость продукта


    [newprice:evaluate] 45

    получена новая стоимость продукта 45 у.е.


Пример проверки скидки на заказ.

Проверить величину скидки незарегистрированного пользователя на «заказ» при сумме покупок 5500 у.е.


Задаем следующие параметры:


[x] пользователь Нет


[x] магазин «miniShop2»


[x] переменные


{"msSessionCart":{"total_cost":5500},"cost":5500}

В окне расчета появится лог расчета скидки на заказ.


[user:groups] [0]
	[discounts] [{"msSessionCart":["60"]}]
	[option:expression] max~$msCustomerProfile + max~$msOrder + max~$msSessionCart
	[group:discounts] [60]
	[group:expression] max~$groups
	[cost:evaluate] 5500
	[discount:evaluate] 60
	[newcost:evaluate] 5440

Расшифровка лога расчета:


  • [user:groups] группы пользователя


    [user:groups] [0]

    получена группа 0


  • [discounts] скидки продукта по опциям


    [discounts] [{"msSessionCart":["60"]}]

    для данного заказа действует скидка 60 у.е. по классу msSessionCart


  • [option:expression] выражение для расчета скидки по опциям


    [option:expression] max~$msCustomerProfile + max~$msOrder + max~$msSessionCart

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


  • [group:discounts] скидки продукта по группам


    [group:discounts] [60]

    получена скидка 60 у.е.


  • [group:expression] выражение для расчета скидки по группам


    [group:expression] max~$groups

    максимальное значение из возможных


  • [cost:evaluate] 5500 стоимость заказа


    [cost:evaluate] 5500

    получена стоимость заказа 5500 у.е.


  • [discount:evaluate] скидка заказа


    [discount:evaluate] 60

    получена скидка заказа 60 у.е.


  • [newcost:evaluate] новая стоимость заказа


    [newcost:evaluate] 5440

    получена новая стоимость заказа 5440 у.е.



Скидки — Сниппет dcDiscounts

Сниппет dcDiscounts для информирования покупателей о полученных и возможных скидках.




Параметры сниппета:
  • object — объект получения информации о скидке


    доступно msProduct и msOrder


    по умолчанию msOrder


  • class — класс получения информации о скидке


    по умолчанию msSessionCart


  • key — ключ получения информации о скидке


    по умолчанию total_cost


  • comparison — сравнение


    вывод либо полученных скидок (true), либо возможных (false)


    по умолчанию true


  • type — тип данных расчета


    доступно string, integer, float, mixed


    по умолчанию float


  • expression — выражение подсчета


    в сниппете доступны следующие переменные:


    * v - значение указанное в скидке
    
    			* c - значение полученное по указанному ключу
    
    			* p - значение стоимости (продукта/ заказа)
    
    			* d - значение скидки (продукта/ заказа)

    по умолчанию $c — $v


  • tplRow — чанк вывода информации о скидке


    по умолчанию


    @INLINE
    			<div class="[[+comparison]]">[[+data.discount]] - [[+data.calc]]</div>
  • tplOuter — чанк обертки


    по умолчанию


    @INLINE
    			<div>[[%discontrol_[[+object]]]] [[%discontrol_comparison_[[+comparison]]]]:
    				<div class="discontrol-discounts [[+selector]]" data-propkey="[[+propkey]]">[[+output]]</div>
    			</div>
  • tplEmpty — чанк вывода информации об отсутствии скидок


    по умолчанию


    @INLINE
    			<div>No discounts</div>
  • frontendCss — Файл с css стилями для подключения на фронтенд


  • frontendJs — Файл с javascript для подключения на фронтенде


  • selector — Имя CSS класса, который будет использован как jQuery селектор для инициализации


  • limit — Лимит выборки результатов


  • showLog — Вывод информации о работе сниппета в лог MODX


Пример вызова сниппета.

Постановка на скидку:


  • скидка на продукт 4% при общей сумме заказа более 4000 у.е
  • скидка на продукт 7% при общей сумме заказа более 20000 у.е
Вывод информации о полученных скидках на странице продукта
[[!dcDiscounts?
	&object=`msProduct`
	&comparison=`1`
	&expression=`$d`
	]]
Вывод информации о возможных скидках на странице продукта
[[!dcDiscounts?
	&object=`msProduct`
	&comparison=`0`
	&expression=`$v - $c`
	]]

1.2.5-beta (08.06.2019)

  • Change "dcDiscounts" [snippet]

1.2.4-beta (05.06.2019)

  • Fix "initializeUser" [discontrol]

1.2.3-beta (24.05.2019)

  • Add "sortDirDiscount" [dcDiscounts]

1.2.2-beta (17.05.2019)

  • Change "discontrol.grid.OrderDiscounts", "discontrol.grid.ProductDiscounts" js

1.2.1-beta (05.04.2018)

  • Change "recalculateMiniShop2Cart" [discontrolTools]

1.2.0-beta (03.04.2018)

  • Improvement "discontrolTools" handler
  • Add "discontrolMath" handler

1.1.30-beta (17.03.2018)

  • Change "dcDiscounts" snippet

1.1.29-beta (17.03.2018)

  • Improvement "default.js"

1.1.28-beta (05.03.2018)

  • Change "prepareVariables" [discontrolTools]

1.1.27-beta (22.01.2018)

  • Add "dcDatamsProductMsCategoryMember" getData

1.1.25-beta - 1.1.26-beta (17.01.2018)

  • Change "prepareVariables" [discontrolTools]

1.1.24-beta (14.09.2017)

  • Change "initialize,runProcessor" [discontrol]

1.1.23-beta (25.07.2017)

  • Add "Mod" [MathParser]

1.1.22-beta (23.02.2017)

  • Improvement "getData" [dcData]

1.1.21-beta (14.02.2017)

  • Add "dcDataMsProductGeoLocationRealRegion", "dcDataMsProductGeoLocationRealCity" getData

1.1.20-beta (09.02.2017)

  • Improvement "msOptionPrice" [discontrolToolsInterface]

1.1.19-beta (20.12.2016)

  • Fix "create, update" discount processor
  • Improvement "comparison" grid [js]

1.1.18-beta (15.12.2016)

  • Improvement "condition" [dcData]

1.1.17-beta (18.11.2016)

  • Fix "getPrice" method

1.1.16-beta (08.11.2016)

  • Add "number_format" setting
  • Add "formatNumber" method

1.1.15-beta (08.11.2016)

  • Add "invokeEvent" method
  • Add "dcOnBeforeGetData", "dcOnAfterGetData" event

1.1.14-beta (07.11.2016)

  • Add "arrayCondition" method
  • Add dcdataminishop2mssessioncart" condition
  • Add dcdataminishop2mssessionorder" condition
  • Add dcdatamsproductmssessioncart" condition

1.1.13-beta (18.10.2016)

  • Add "discount_order_with_cost" setting

1.1.12-beta (17.10.2016)

  • Improvement "dcDataMsProductMsProductOption" class

1.1.11-beta (11.10.2016)

  • Fix "initialize Discontrol"

1.1.10-beta (07.10.2016)

  • Fix "combo"
  • Improvement "modUser", "modUserProfile" class

1.1.9-beta (10.09.2016)

  • Add "modUser" class
  • Add "modUserProfile" class
  • Improvement "Math" class

1.1.8-beta (09.09.2016)

  • Improvement "Order" discount

1.1.7-beta (02.09.2016)

  • Add "msOptionPrice" compatibility with version > 2.0

1.1.6-beta (26.07.2016)

  • Change "tables" (value)
  • Change "description"

1.1.5-beta (26.07.2016)

  • Improvement "discount" window

1.1.4-beta (22.07.2016)

  • Fix "format" discount
  • Add "All" group

1.1.3-beta (21.07.2016)

  • Fix "loadClass"
  • Add "customClass"
  • Add "example" custom class

1.1.2-beta (20.07.2016)

  • Fix "dcProductDiscount" snippet
  • Fix "remove" discount
  • Add "copy" discount

1.1.1-beta (20.07.2016)

  • Add "dcProductDiscount" snippet

1.1.0-beta (19.07.2016)

  • Fix "tools" class
  • Add miniShop2 compatibility with version > 2.4

1.0.12-beta (28.06.2016)

  • Add "price increase"

1.0.11-beta (08.06.2016)

  • Fix "check" discounts
  • Fix "Math"
  • Fix "dcDataMiniShop2MsCustomerProfile", "dcDataMiniShop2MsOrder" getData

1.0.10-beta (29.05.2016)

  • Improvement "dcDataMiniShop2MsSessionOrder" getData
  • Improvement "default.js"

1.0.9-beta (26.05.2016)

  • Add "properties" lexicons
  • Add "docs"
  • Change "formatPrice"
  • Change "dcDiscounts"
  • Add "msSessionOrder" class
  • Add "dcDataMiniShop2MsSessionOrder" getData

1.0.8-beta (25.05.2016)

  • Refactoring code
  • Fix "check" data
  • Fix "formatPrice"
  • Fix "getPrice","getCost"
  • Add "docs"

1.0.7-beta (24.05.2016)

  • Add "formatPrice"
  • Add "recalculate miniShop2 cart"

1.0.6-beta (23.05.2016)

  • Add "dcDiscounts"

1.0.6-beta (22.05.2016)

  • Fix "check" data

1.0.5-beta (21.05.2016)

  • Add "in", "!in" operator
  • Add getData "modResource"

1.0.4-beta (20.05.2016)

  • Reformat code

1.0.3-beta (19.05.2016)

  • Add "check" panel for orders

1.0.1-beta-1.0.2-beta (19.05.2016)

  • Add "check" panel for goods

1.0.0-beta

  • Initial

Последние обсуждения в сообществе MODX.pro