svitlo1
Постоялец
- Регистрация
- 17 Фев 2009
- Сообщения
- 559
- Реакции
- 120
- Автор темы
- #1
Модуль IMDiscount (OC 3) Стратегия скидок позволяет организовать систему скидок с трехуровневым подсчетом для разных вариаций учета. Так же поддерживается массовая генерация стандартных скидок и акций OpenCart.
Демо-админки (demo/demo) - Для просмотра ссылки Войди
Статьи про модуль
1. Для просмотра ссылки Войди
2. Для просмотра ссылки Войди
Возможности
1. Накопительные скидки и Скидки в текущем заказе
2. Массовая генерация стандартных скидок и акций OpenCart для товаров.
3. Возможность задания условий сразу для количества и суммы, что облегчает процесс создания правил формирования скидок.
4. Три режима аккумуляции (большая, меньшая скидка и сумма), доступные как на глобальном уровне, так и в рамках расчета по таблице стратегии скидок.
5. Поддержка процента и фиксированной суммы, которые можно указывать одновременно (выбирается максимум для каждой строки таблицы стратегии скидок).
6. Возможность для накопительных скидок указывать фильтры клиентов, периоды действия, статусы заказов, учитываемую сумму (итоговая (total), промежуточная сумма (sub_total), без учета доставки (shipping)) и количество дней.
7. Возможность для текущих заказов указывать разные варианты подсчета сумм и количества товаров в корзине. Так же можно задавать фильтры по клиентам и учитываемым товарам (подробнее ниже в описании). Текущий заказ можно применять как для зарегистрированных клиентов, так и для всех.
8. Поддерживается фильтрация по группам и пользователям в текущем заказе и накопительной скидке (в случае текущего заказа игнорируется для случая, когда выбрано для всех пользователей).
9. Три варианта подсчета подсчета процента: в порядке следования, от суммы товаров без скидок и по всем товарам. В текущем заказе так же есть возможность задавать каждый N-товар (подробнее ниже в описании).
10. Практически все сделано с использованием ajax. В теории, модуль после установки можно вообще не перезагружать.
11. Только стандартный функционал OpenCart. Ничего не перезаписывается в ядре. Это позволяет не зависеть и не конфликтовать с другими модулями и шаблонами, что в OpenCart порой вызывает еще «те красочные воспоминания».
12. Название скидки в строчке с Итого находится в локализационном файле внутри папки catalog, так что если у вас несколько языков, то их поддержка дело пяти минут.
13. Можно отключать применение скидок, если используется купон (глобально — смотрите подробности)
14. Можно настраивать округление для результирующей скидки (расчет стратегий). Так же округление можно задавать для массовой генерации стандартных скидок и акций OpenCart.
15. И другие приятные вещи.
Порядок создания стратегий
В общем и целом, порядок создания стратегий похож на обычное представление OpenCart, но с учетом того, что в модуле практически все сделано с использование ajax (без необходимости перегружать страницу).
1. Открываете вкладку «Все стратегии» и создаете стратегию нужного типа и названия (с прочими полями).
2. Находите в списке нужную стратегию и нажимаете на кнопку слева (редактировать). Или же открываете вкладку с соответствующим типом стратегий, находите нужную в верхнем выпадающем списке, после чего нажимаете рядом кнопку «Загрузить».
3. Заполняете дополнительные параметры подсчета и учета, а так же таблицу скидок и нажимаете кнопку «Сохранить».
ВАЖНО! - Все корректировки применяются сразу!
С версии 1.4.0 можно создавать стратегии или их копии в соответствующих вкладках, без обязательного создания через вкладку «Все стратегии». Для этого нужно нажимать кнопку «Добавить» вместо «Сохранить».
Как осуществляется подсчет
Подсчет осуществляется в три этапа, что позволяет строить весьма гибкие стратегии скидок (пример расчета чуть ниже).
Первый этап. Вначале загружаются все действующие стратегии скидок (критерий - включены и подходят по дате, а так же специфические параметры в ходе расчетов). Смотрится таблица скидок каждой стратегии. И для каждой строчки вычисляется процент и фиксированная сумма. Из этих двух чисел выбирается максимальное.
Второй этап. Внутри каждой стратегии определено каким образом выбирать «Тип формирования процента» (большее значение, меньшее или суммарное по всем значениям таблицы скидок с первого этапа). Соответственно, из ранее вычисленных скидок в таблице формируется результирующая скидка стратегии (в соответствии с выбранной настройкой).
Третий этап. Когда получены все скидки по действующим стратегиям, смотрится глобальный параметр в настройках - «Тип аккумуляции (Глобально)». И, соответственно, вычисляется итоговая скидка (большее, меньшее или сумма скидок).
Пример расчета
Допустим, вам нужно учитывать два варианта скидок. Первый, те скидки, что формируются по накопленным заказам и применяются для суммы всех товаров заказа (за каждые 1000 рублей 1%, до 10%). Второй, дополнительная скидка в рамках текущего заказа только для товаров без акций и скидок (с каждой 1000 так же по 1%, до 5%). При этом нужно, чтобы скидки суммировались.
Соответственно, в модуле выставляются следующие настройки. Тип аккумуляции (Глобально) — суммирование. Создается и заполняется две стратегии — одна в «Накопительная скидка», вторая в «Текущий заказ». Для каждой стратегии так же заполняется таблица скидок с указанием процента и фиксированной суммы (в примере последнее равно 0, так как задача этого не требует).
Покупатель совершает заказ на 3456 рублей, из которых 1000 рублей это товары со скидкой. Так же покупатель уже совершил несколько заказов на общую сумму 7000 рублей.
Происходит следующий расчет.
Первый этап. Так как применяются только проценты, то всегда будет выбираться процент для каждой строки таблицы стратегии скидок.
Второй этап. Исходя из данных, в таблице первой стратегии подходят все пункты от 1% до 7%. Выбирается максимум т.е. 7%. Во второй стратегии скидок учитываются только обычные товары (2456 руб), т.е. подходят только скидки из таблицы 1% и 2%. Соответственно, выбирается максимум 2%.
Третий этап. Смотрится глобальный параметр — суммирование. Получается 7% от 3456 + 2 % от 2456 = 241,92 + 49,12 = 291,04.
Как видите, сложная схема расчетов легко реализуется модулем.
Как формируется процент
Существует три типа сумм, в общем случае (для N-товар см. ниже).
1. Промежуточная сумма с учетом порядка применения модуля. Таким образом, если в процент нужно включать доставку, бонусы и прочее, то стоит использовать этот тип скидки и указывать нужный порядок следования модуля.
2. Процент от суммы товаров без скидок. Если у вас существуют специальные предложения (стандартные скидки) или же действующие акции для товара, то этот вариант позволяет их не учитывать.
3. Процент от суммы всех товаров. Если вам нужно учитывать только весь товар, без методов доставки и прочего.
Соответственно, в зависимости от выбранного варианта вычисляется процент.
Текущий заказ — расчет процента — Каждый N-товар (скидка от самых дорогих или от самых дешевых)
Если вам необходимо организовать скидки для каждого N-товара в сортировке от самых дорогих к более дешевым или наоборот от самых дешевых, то это возможно сделать.
Например, для каждой второй пары перчаток предоставлять скидку в 50%. В таком случае, если вы купили 20 простых перчаток и 8 перчаток с узором (т.е. скидка для 14 = 28 / 2), то скидка будет предоставлена как = 0,5 * стоимость 8 перчаток с узором + 0,5 * стоимость 6 простых перчаток (так как перчаток с узором всего 8).
В рамках данного расчета, так же учитывается тип подсчета количества товаров, чтобы можно было исключить акционные товары. Плюс сохраняется весь алгоритм расчета по таблице скидок и прочих механизмов.
Фильтрация продуктов в текущем заказе
Фильтрация осуществляется по следующему правилу. Продукт подходит в том случаях:
1. Если товар есть в указанных категориях И указанных производителях И в диапазоне цен
2. ИЛИ - Если товар указан отдельно
Если для какого-то из пунктов не указаны настройки (например, не заданы продукты), то критерием отбора становится только один пункт (в котором заданы настройки). Если же настроек вообще не задано, то фильтрация не осуществляется - иными словами, считается, что все товары подходят
Для цен. Если значение фильтра стоимости равно или меньше нуля, то считается, что ограничений по данному фильтру цены нет. Например, стоимость ОТ равная 10 и стоимость ДО равная 0 означает, что стоимость товара должна быть больше или равна 10. Учтите, что цены задаются в базовой валюте.
Эффективная цена означает, что для проверки используется та цена, которая отображается в корзине. Например, если товар с ценой 100 после стандартных скидок и применения опций стал стоить 120, то при фильтрации будет использовано значение 120.
Стоит учитывать, что фильтрация применяется для всех настроек, которые зависят от продуктов. Это означает, что при подсчете сумм и количества (как для оценки в таблице строк, так и для формирования процента) единственным, что не пересчитывается, является опция «Полученная сумма до применения IMDiscount».
Например, в корзине было два товара А за 500 и Б за 200. После фильтра остался только товар Б за 200. В настройках выставлено, что процент применяется ко всем товарам. Это означает, что при подсчете сумм из таблицы скидок, будет учитываться только товар Б. Допустим, если в таблице скидок задано 10%, то будет не (500 + 200) * 0,1 = 70, а (200 * 0,1) = 20.
Массовая генерация стандартных скидок и акций OpenCart для товаров
Модуль поддерживает возможность массовой генерации стандартных скидок и акций для OpenCart - это вкладки «Скидки (опенкарт)» и «Акции (опенкарт)».
Обратите внимание, что массовая генерация это не стратегии, поэтому они создаются прямо во вкладке и не отображаются в общем списке.
Фильтрация осуществляется по следующему правилу. Продукт подходит в том случаях:
1. Если товар есть в указанных категориях И указанных производителях И в диапазоне цен И с соответствующим статусом
2. ИЛИ - Если товар указан отдельно
Учтите, что если требуется генерация ТОЛЬКО для отдельных товаров, то необходимо убедиться, что фильтры для первого пункта пусты (не выставлены цены в фильтрах, не заданы производители и категории, а так же не задан статус).
Для цен. Если значение фильтра стоимости равно или меньше нуля, то считается, что ограничений по данному фильтру цены нет. Например, стоимость ОТ равная 10 и стоимость ДО равная 0 означает, что стоимость товара должна быть больше или равна 10. Учтите, что цены задаются в базовой валюте.
ВАЖНО! Учтите, что если вообще все фильтры будут пустыми, то генерация и очистка применяется ко всем товарам (по сути, отсутствие фильтров = не проверять товары)!
Соответственно, например, при очистке по кнопке (или как части генерации) будут удалены стандартные скидки или акции для всех товаров (в зависимости от того, для чего используется массовая генерация)! Аналогично, при генерации скидки или акции из таблицы (в зависимости от того, для чего используется массовая генерация) будут добавлены для всех товаров.
Массовая генерация стандартных скидок и акций - как происходит расчет цен для типов и модификаторов
Первый этап. Существует два типа представления числа: фиксированное число (отображается как «.») и процент (отображается как «%»).
На основании этих данных формируется [значение для корректировки]. В случае фиксированного числа — это просто число, а в случае процента — это цена умноженная на процент и деленная на 100.
Например, число 50 для «.» это будет 50. А в случае «%» это будет [price] * 50 / 100.
Второй этап. Существует 5 арифметических модификаторов: равно («=»), вычесть («-»), прибавить («+»), умножить («*»), разделить («/»). Тут как в арифметике.
Модификатор «=». Формула [next_price] = [значение для корректировки]
Модификатор «-». Формула [next_price] = [price] - [значение для корректировки]
Модификатор «+». Формула [next_price] = [price] + [значение для корректировки]
Модификатор «*». Формула [next_price] = [price] * [значение для корректировки]
Модификатор «/». Формула [next_price] = [price] / [значение для корректировки]
ВАЖНО! Аккуратно заполняйте типы и модификаторы. Суть в примере. Например, умножить на 50% это значит, что [next_price] = [price] * [значение для корректировки] = [price] * ( [price] * 50 / 100 ). Иными словами, половина от цены в квадрате!
Так же этот момент касается отрицательных цен. Подобное стандартный механизм опенкарта считает вполне корректным во многих версиях (как минимум, в 2.x, 3.0). Для понимания: вы можете установить как цену товара, так и скидок с акциями отрицательными, и они будут использоваться при расчете, включая корзину и оформление заказа.
Поэтому в модуле не производится дополнительных проверок для цен, в плане отрицательного значения. Мало ли вы, как клиент, используете данную особенность. Поэтому будьте внимательны и аккуратны!
Логирование
Логирование включается во вкладке «Настройки»
Файлы лога располагаются в каталоге «/system/IMDiscount/Log/» (от корня сайта).
Несколько существенных моментов:
1. ВАЖНО!!! Лог формирует достаточно много данных (один клиент за минуту легко формирует 1МБ и более). Поэтому не стоит постоянно держать его включенным. Лучше подходить к логу следующим образом: включили лог, выполнили нужные действия и тут же отключили лог.
2. Учтите, что во время формирования лога в файлах сохраняется масса «деликатной» информации. Поэтому после того, как вы скачаете лог, файлы внутри каталога стоит удалить.
Обратите внимание, что лог содержит массу технической информации и предназначена для сложных ситуаций, при которых вы не можете самостоятельно найти ошибку в настройках.
Тем не менее, даже обычные пользователи могут воспользоваться им. В файле лога необходимо искать фразу «After calculateDiscounts». Чуть выше ее отображается идентификаторы пользователя и его группы, а так же ФИО. Чуть ниже ее отображается сводная информация по вычисленным скидкам действующих стратегий для текущей корзины (до применения глобальной настройки выбора скидки).
Не применять скидки в случае наличия купона
В настройках модуля можно отключать применение скидки, в случае, если указан купон. Однако, для этого купон должен применяться ДО применения модуля. Другими словами порядок сортировки модуля IMDiscount должен быть больше сортировки купона.
Настройка действует глобально, то есть для всех скидок сразу.
Особенности и ограничения
1. Накопительные скидки применяются только для зарегистрированных пользователей. Для текущего можно указывать видимость.
2. Подсчет суммы предыдущих заказов в накопительной стратегии осуществляется в зависимости от настроек: от итоговой суммы (total), промежуточной сумма (sub_total) или без учета доставки (shipping).
3. Если статусы заказа не указаны, то суммируются все заказы.
4. Фильтр по группам и клиентам осуществляется по правилу ИЛИ. То есть или в списке групп или в списке пользователей.
5. (с версии 1.4.0 не актуально, так как перенесено в соответствии со стандартной схемой опенкарт) Для русского языка переводы находятся в system/IMDiscount/Lang
6. По умолчанию, сумма скидки (результирующая) округляется до 2-х знаков (задается во вкладке «Настройки»). При отрицательных значениях округляется целая часть числа. Например, при значении (-2) число (125) будет (100), а при значении (-1) число (125) будет (130). Учитывайте, что при округлении до (-3) число (125) будет (0) (так как 1 меньше 5).
7. Принцип действия округления чисел при массовой генерации стандартных скидок и акций аналогичен.
8. Приобретаемые подарочные сертификаты не являются полноценными товарами (в рамках OpenCart), поэтому скидка от них возможна только в том случае, если она вычисляется от «Суммы до применения IMDiscount», в которую входит сумма приобретаемых сертифкатов. Например, в стратегии «текущий заказ» скидка для «Процент от товаров без скидки» (или всех товаров) будет вычисляться только для товаров, но не сертификатов.
9. При расчете накопительной скидки приобретенные подарочные сертификаты учитываются во всех трех вариантах: итоговая сумма — это сумма заказа, сумма товаров / промежуточный итог — это товары с купленными сертификатами (sub_total), без доставки — это сумма заказа за вычетом цены доставки. Так как эти суммы включают стоимость сертификатов.
10. По умолчанию, в списках с ajax подгрузкой клиентов отображается 10 клиентов, а время задержки между запросами 500 мс.
11. Учтите, что все цены задаются и учитываются в базовой валюте.
12. Требуется, чтобы в настройках сайта было выставлено mbstring.func_overload 0. Если вы не знаете как это сделать , то уточните в вашем хостинге. В большинстве случаев по умолчанию это значение 0 (вам, как клиенту, ничего не нужно делать), но в некоторых хостингах выставляют значение 2. Это актуально в тех случаях, если у вас возникли проблемы с ключами и активацией модуля.
Установка и следующие версии
1. Распакуйте архив. Скопируйте в корень сайта каталоги «admin», «catalog», «system». Не волнуйтесь, никакие файлы не будут заменены, кроме случая, если у вас уже стоят мои модули (у них есть общие файлы, которые не меняются).
2. Откройте админку и установите модуль. Если же это следующая версия, то переустановите модуль.
3. Почистите кэш твига
4. Откройте в админке «Учет заказов» (редактирование) и для активации скидок во вкладке «Настройки» укажите статус «Включено», а так же порядок следования (подобно тому, как и в других модулях учета в заказе).
Лицензия и использование
Сделано для версий OpenCart 3.0.1.1, 3.0.2.0, 3.0.3.0, 3.0.3.1-3.0.3.8, ocStore 3.0.2.0, 3.0.3.7
Лицензия распространяется только для одного сайта. Т.е. 1 домен + все поддомены = 1 оплата.
Купив модуль вы автоматически соглашаетесь с текстом лицензии.
Модуль имеет принцип распространения "as is" ("Как есть").
Ввод лицензионного ключа необходимо осуществить в течение 5 дней после установки модуля. Лицензионный ключ состоит из двух частей. Ключи необходимо вводить так, как они были присланы, без лишних пробелов и символов.
Запрещается несанкционированное использование, копирование, перепродажа, передача модуля третьим лицам, а также иные способы распространения, в том числе в ознакомительных целях.
Если вы приобрели модуль до введения лицензирования, то вам необходимо написать мне и указать при этом доменное имя сайта и тестовый домен, если таковой имеется (учтите, что тестовый домен должен быть тестовым, то есть поддоменом какого-либо сайта).
Если у вас русский домен, то необходимо указывать то имя, которое указано в config.php в корне сайта.
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.