msRevaluation

Проведение переоценки товаров для MODX с гибкими настройками.
Автор дополнения
Александр Филимонов
Пакетов
7
Закачек
1 333
Обычно отвечает более недели
Автор дополнения
Пакетов
7
Закачек
1 333
Обычно отвечает более недели
Версия 1.1.3-beta
Дата выпуска 21.10.2020
Загрузки 257
Просмотры 10 026
Внимание, этот компонент требует версию PHP 5.5 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.

Возможности




  • Изменение цены на указанный процент
  • Возможность как увеличить, так и снизить цену
  • Формирование цен кратных указанному значению
  • К операциям можно добавлять комментарии, которые будут отображаться в истории
  • Изменение цен товаров в категории, во всех подкатегориях категории, во всех категориях вообще
  • Можно запретить проведение переоценки в определенных категориях и их подкатегориях, а также (если категории являются дочерними ресурсами обычных ресурсов MODX) во всех категориях, которые являются дочерними для определенных ресурсов.
  • Цены изменяются с учетом дополнительных категорий Minishop2
  • Отмена переоценки в любое время
  • Возможность описать логику определения нужно ли выполнять переоценку для каждого товара
  • Возможность описать свою логику формирования новой цены как для всех товаров, так и для отдельных

Как происходит переоценка


Для выполнения переоценки нужно нажать на кнопку «Новая переоценка» или кликнуть правой кнопкой мышки на таблице со списком переоценок и выбрать в контекстном меню соответствующий пункт. В появившемся окне выбрать категорию из выпадающего списка, указать процент, на который хотите изменить цены, опционально указать кратность цены, чтобы легче было ориентироваться в истории, добавить комментарий. В процессе переоценки будут изменены цены на товары в выбранной категории и во всех её подкатегориях, а так же модификаций этих товаров, созданных с помощью msOptionsPrice2 у которых установлена логика "=" (можно дополнительно реализовать собственную логику как для определения новой цены на товар, так и для проверки необходимости переоценки для конкретного товара, об этом ниже).

Например, если увеличить цену на товар с ценой 600руб. на 10% и указать коэффициент 100, то в итоге выйдет цена 700руб., а если при тех же условиях коэффициент будет 50, то в итоге цена составит 650руб. Если коэффициент указан не будет, цены округлятся до 1 копейки.

После переоценки вся информация об изменении цен сохраняется в файле истории и создается соответствующая запись в базе данных. В случае возникновения ошибки компонент попытается сразу откатить все изменения. Записи об ошибках делаются в журнал ошибок MODX и в файл лога (/core/components/msevaluation/log.txt).
Чтобы исключить категории из переоценки можно указать их id через запятую в настройках системы, точно также можно поступить и с ресурсами, категории в которых не должны участвовать в переоценке (список ресурсов, и список категорий указываются отдельно).




Возможности для более гибкой настройки процесса переоценки


  1. В системной настройке msr_must_revaluation_snippet можно указать название сниппета, который будет вызываться перед переоценкой каждого товара и от результатов работы которого будет зависеть выполница переоценка или нет для него (товара)
  2. В системной настройке msr_get_price_snippet можно указать название сниппета, который будет вызываться перед переоценкой каждого товара и должен будет вернуть новую цену
Эти настройки работают одинаково как для цен товаров, так и для модификаций созданных при помощи компонента msOptionsPrice2.

msr_must_revaluation_snippet
Если указано название сниппета, то он будет запускаться для дополнительной проверки, нужна ли переоценка каждого из товаров подходящих по параметрам. В сниппет будут передаваться все поля товара, основные поля модификации с префиксом «msop2_» (в случае переоценки модификации msOptionsPrice2), режим ($mode со значением «product» для товара или «msop2» для модификации) а так-же настройки переоценки (параметр $config, содержащий json со всеми настройками) в качестве параметров. Если сниппет вернет 0 (или любое значение, которое будет приведено к 0 функцией intval), то переоценка товара выполнена не будет, во всех других случаях — будет.
К примеру необходимо снизить цену в какой-то категории, но Вы не хотите чтоб переоценка коснулась популярных товаров, и без того их хорошо покупают ;-). Для этого достаточно создать сниппет с примерно таким кодом:
<?php
if($popular == 1)
    return 0;
else
    return 1;
И указать название этого сниппета в системной настойке msr_must_revaluation_snippet.

msr_get_price_snippet
Если указано название сниппета, то он будет запускать вместо стандартного метода для определения новой цены. В сниппет будут передаваться все поля товара, основные поля модификации с префиксом «msop2_» (в случае переоценки модификации msOptionsPrice2), режим (product для товара или msop2 для модификации) а так-же настройки переоценки (параметр $config, содержащий json со всеми настройками) в качестве параметров. Если сниппет вернет любое значение кроме пустой строки (включая 0 или строку «false»), то это значение будет преобразовано функцией floatval и установлено для товара.
К примеру необходимо снизить цену в какой-то категории на 10%, но для модификаций, которые дешевле 1000р. цену нужно снизить на 5%. Для этого создаем такой сниппет:
<?php
if($mode == 'msop2' && $msop2_price < 1000)
    return $msop2_price * 0,95;
else
    return '';
И указать название этого сниппета в системной настойке msr_get_price_snippet. Естественно подразумевается что основной процент изменения (10%) цены устанавливается перед запуском переоценки.

Изменение поля «Старая цена»


Так как старая цена используется больше в маркетинговых целях, то и её формирование нельзя привязывать к строгой логике переоценки. Потому я сделал возможность каждому определять собственную логику для установки этого свойства во время переоценки.
  1. В системной настройке msr_get_old_price_snippet можно указать название сниппета, который будет вызываться перед переоценкой каждого товара и должен будет вернуть новое значение для старой цены
  2. В системной настройке msr_restore_old_price_snippet можно указать название сниппета, который будет вызываться перед отменой переоценки каждого товара и должен будет вернуть новое значение для старой цены
Эти настройки работают только для цен товаров.

msr_get_old_price_snippet
Если указано название сниппета, то он будет запускаться в процессе переоценки для каждого товара. В сниппет будут передаваться все поля товара и настройки переоценки (параметр $config, содержащий json со всеми настройками). Сниппет должен вернуть число, во всех других случаях старая цена будет установлена в 0.

msr_restore_old_price_snippet
Если указано название сниппета, то он будет запускаться в процессе переоценки для каждого товара. В сниппет будут передаваться все поля товара и настройки переоценки (параметр $config, содержащий json со всеми настройками). Сниппет должен вернуть число, во всех других случаях старая цена будет установлена в 0.

К примеру необходимо сделать чтоб старая цена в процессе переоценки станавливалась на 10% выше цены. Для этого создаем такой сниппет:
<?php
$k = 1.1; // во сколько раз увеличить цену
$dev = 10; // до какого значения округлять
$old_price = round(($price * $k)/$dev, 0) * $dev;
return $old_price;
И указать название этого сниппета в системных настойках msr_get_old_price_snippet и msr_restore_old_price_snippet. Конечно же можно использовать и разные сниппеты для переоценки и её отмены.

Отмена переоценки


В список истории выводятся записи произведенных переоценках. Чтобы произвести откат изменений цен, кликните правой кнопкой мыши по строке с нужной записью и выберите «Отмена переоценки». Цены будут изменены только у тех товаров, которые участвовали в отменяемой переоценке на величину обратную изменению цены во время переоценки. То есть во время отмены цены изменяются не на процент, а на абсолютную разницу цен до и после переоценки.


К примеру:
  • в понедельник перестал работать Ваш поставщик, у нового цены на 5% выше, соответственно выполнена переоценка на +5%, на аксессуары
  • в среду увеличился какой-нибудь налог, что отразилось на стоимости товаров. Их стоимость увеличилась еще на 8% (сейчас можно ожидать и такого). Выполнена еще одна переоценка, но теперь уже всех товаров.
  • в конце следующей недели, снова возобновил работу старый поставщик. Нужно отменить первую переоценку
Но если использовать для этого «обратный процент» (-5%), то изменения будут происходить с ценами, увеличенными еще на 8% в результате второй переоценки, плюс к этому возможна значительная погрешность на округлении. Потому цены меняются на абсолютную величину изменения в результате переоценки (если у товара цена увеличилачь на 120руб., то она будет уменьшина у этого товара на 120руб.).

Если же нужно сделать откат именно на процент, с учетом всех последующих изменений цен, то всегда можно просто сделать еще одну переоценку, только в поле «Действие» указать обратную операцию.
После отмены переоценки и файл с историей о ней, и запись в базе данных удаляются.

revaluation 1.1.3 (21.10.2020)

Добавлена возможность изменять старую цену товаров

revaluation 1.1.2 (30.03.2020)

Значительно увеличена производительность

revaluation 1.1.1 (06.08.2018)

Добавлена поддержка дополнительных категорий miniShop2

revaluation 1.1.0-beta (12.07.2018)

Добавлена поддержка msOptionPrice2 Добавлена возможность реализовать свою логику изменения цены для каждого товара с помощью сниппета Добавлена возможность пропускать переоценку люых товаров (по отдельности) с помощью сниппета Исправлены мелкие недочёты, которые не влияли на логику работы компонента

revaluation 1.0.4-beta (27.03.2017)

Исправлена ошибка, кторая возникала при попытке отмены переоценки удаленного товара

revaluation 1.0.3-beta (17.04.2016)

Убрал несколько мелких багов

revaluation 1.0.2-beta (17.04.2016)

Компонент обновлен для корректной работы с характеристиками товаров

revaluation 1.0.1-beta (12.04.2015)

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

revaluation 1.0.0

Выпуск компонента

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