К содержанию

ms3Remains - Остатки товаров по комбинациям опций для MiniShop3

Расскажу про ms3Remains: дополнение для MiniShop3, которое считает остатки по комбинациям опций, а не только одной цифрой на весь товар. Кому нужны отдельные количества по цвету и размеру, по вариантам из ms3Variants или по базовой строке без опций, тот сценарий как раз здесь.

Остаток на комбинацию опций


Каждая строка в базе отвечает на вопрос, сколько единиц лежит на остатке при заданном наборе опций. Вы задаёте, какие опции участвуют в комбинации, через настройку ms3remains_option_keys. Если ключ пустой, в расчёт попадут все опции, которые покупатель передаёт с товаром.

Остатки в manager


На странице товара появляется вкладка «Остатки». В ней базовая строка, варианты ms3Variants с артикулом в подписи и сочетания значений отслеживаемых опций, которые реально заполнены у товара. Сверху вкладка пишет итог: поле «Остаток» в свойствах товара равно сумме всех строк. Каждую строку сохраняете отдельно, а общее сохранение останавливается на первой ошибке, и уже записанные строки не откатываются.

Вкладка Остатки на карточке товара: базовая строка и варианты с количеством

Пока вы не сохранили ни одной строки, товар не отслеживается и продаётся без ограничения, даже если в полях уже стоят числа. Ноль в сохранённой строке означает «нет в наличии», и такую комбинацию в корзину добавить нельзя. Если значений опций слишком много, сетка обрезается после 200 комбинаций. Тогда сузьте список ключей или правьте остаток через CSV.

Раздел «Остатки» собирает все товары в один список: товар, артикул варианта, опции, количество и статус «В наличии» или «Нет в наличии». Список фильтруется по наличию и ищется по товару. Количество правится прямо из списка, диалогом «Изменить остаток»: выбираете товар и вариант, задаёте новое количество и комментарий.

Массовая загрузка идёт через импорт CSV в том же разделе. Файлу нужны колонки remain_id и quantity. Сначала файл проверяется, и применить импорт можно только после проверки без ошибок. Рядом есть экспорт CSV и сервисный API для своего скрипта.

Диалог импорта CSV: колонки remain_id и quantity, проверка файла перед применением

История правок внутри компонента не ведётся. Когда меняли число, видно по полю updatedon строки, а кто менял, пишется своим плагином на событие ms3remainsOnAfterRemainChange. Плагин может и отменить изменение: достаточно вернуть непустую строку, и запись откатится.

Заказы: корзина, списание, возврат


Корзина проверяет выбранные опции и хватает ли остатка ещё до оформления. Списание срабатывает, когда заказ переходит в один из статусов из ms3remains_deduct_statuses. Возврат на остаток идёт при статусе из ms3remains_refund_statuses или при удалении заказа. Повторный перевод в тот же статус списания не дублирует операцию. Если остатка меньше, чем количество в строке заказа, смена статуса откатывается.

Статусы задаются в разделе «Настройки». Там же включается сам компонент, перечисляются отслеживаемые опции и остаток по умолчанию. От него зависит кнопка «Заполнить пустые по умолчанию» на вкладке товара: она появляется, когда значение больше нуля. Отдельными переключателями включаются проверка остатка в корзине, проверка перед созданием заказа и требование выбрать все опции из списка ключей.
Раздел Настройки: компонент включён, отслеживаемые опции, статусы списания и возврата, проверки корзины

Менять статус заказа для проверки нужно штатными средствами MiniShop3, не через сохранение объекта заказа вручную. Пока не заданы статусы списания, остатки по заказам не уменьшаются, и раздел «Настройки» об этом предупреждает.

Витрина, проекция и каталог


Компонент суммирует остатки в поле stock товара и при включённой синхронизации пишет остаток варианта в count таблицы ms3Variants. Витрина и mFilter читают готовое поле, а не пересчитывают остаток на каждом запросе. Фильтр «только в наличии» в mFilter строится по проекции stock, отдельный тип фильтра пакет не поставляет.

Сниппет ms3Remains показывает число, подписи «В наличии / Нет в наличии», порог «Много», JSON для скриптов или остатки по значениям опций. Точное число от покупателя прячется настройкой ms3remains_hide_quantity, а порог «Много» задаёт ms3remains_moreless_count. На витрине сниппет вызывают некэшируемым вызовом, иначе кэш шаблона держит старое число. Счётчики комбинаций в mFilter компонент не переписывает.

Проекция включается и перестраивается там же, в «Настройках»: отдельно для stock товара и для count вариантов. Кнопка «Перестроить» пересчитывает оба поля для всех товаров с остатками. Товар без сохранённых строк обычная проекция не обнуляет, а перестроение при включённой синхронизации stock пишет таким товарам 0.
Настройки витрины и проекции: скрыть точное количество, порог Много, синхронизация stock и count, кнопка Перестроить

Требования и ограничения


  • Нужны MODX Revolution 3.0.0 и новее,
  • PHP 8.2+,
  • MiniShop3 1.13.0+,
  • VueTools 1.2.0+,
  • pdoTools 3.0.0+.
Складов, резервов, перемещений и журнала движений в пакете нет. Для полноценного WMS он не предназначен.
Пока работает ms3Remains, встроенный inventory MiniShop3 держите выключенным: настройка ms3_inventory_enabled в нуле, иначе резерв по суммарному stock конфликтует с остатками по комбинациям. Не включайте одновременно списание здесь и ms3variants_deduct_stock_status в ms3Variants, иначе остаток спишется дважды. В «Настройках» есть предупреждение и кнопка отключить списание в ms3Variants. После установки компонент выключен, таблицы пустые.

Что дальше


Иван Бочкарев
Иван Бочкарев
8 минут назад
modx.pro
3
Реклама

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0