msRevaluation

Проведение переоценки товаров для MODX с гибкими настройками.
Автор дополнения
Александр Филимонов
Пакетов
7
Закачек
1 311
Обычно отвечает более недели
Автор дополнения
Пакетов
7
Закачек
1 311
Обычно отвечает более недели
Версия 1.1.3-beta
Дата выпуска 21.10.2020
Загрузки 254
Просмотры 9 350
Внимание, этот компонент требует версию 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