Тема: Резервирование товара

Здравствуйте. Есть ли у вас в планах реализация функционала резервирования товара? Не совсем понятно в каких таблицах у вас хранятся данные, а в каких агрегируются.

Повысить оценку Понизить оценку

Re: Резервирование товара

Здравствуйте. Есть ли у вас в планах реализация функционала резервирования товара?

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

Какую задачу Вы хотите реализовать и как работаете с БД. Просто у нас все данные можно подгружать через ORM запрос или ORM объект. Может я Вам могу подсказать.

Re: Резервирование товара

Тогда объясните пожалуйста, в какой именно таблице у вас хранятся остатки? Возьмем например таблицу product_offers в которой есть поле num и доп. поле stock_num. Я так понял это и есть остатки, только что за что отвечает? Так же есть таблица product_x_stock. За что она отвечает и как связана с таблицей product_offers?

Повысить оценку Понизить оценку

4

Re: Резервирование товара

По таблицам:
product (num - здесь общий остаток товара, кэш поле)
product_offers (num - здесь общий остаток комплектации на всех складах, кэш поле)
product_x_stock (stock - остаток комплектации на конкретном складе)

В момент когда происходит изменение остатка в product_x_stock должны пересчитываться все поля вверх по дереву.

Повысить оценку Понизить оценку

Re: Резервирование товара

Всё достаточно просто.
Все данные по остаткам на складам они хранятся в таблице product_x_stock и содержит информацию по наличию и складу где лежит товар.

У комплектаций(объект \Catalog\Model\Orm\Offer) есть поле num, оно хранит общее количество наличия по всем складам для данной одной комлектации. По сути это сводная информация по всем складам для данной комплектации
У товара есть поле num оно хранит общее наличие по всем комплектациям и складам для данного товара.

У комлектаций есть поле stock_num, которого на самом деле не существует. Оно является виртуальным. Это возможно за счёт того, что все записи в БД представленны в виде ORM класса Offer, куда собственно можно дописать и просто виртуальное поле.

ORM объект в свою очередь хранит одну запись из БД обёрнутую в соответствующий класс.
Это поле используется для того, чтобы передать массив с остатками по складам для данной комплектации. А при сохранении комплектации срабатывает код, который разносит по таблице product_x_stock все остатки, которые вы указали у комплектации.
Это возможно благодаря тому, что у каждого товара, можно вызвать функцию beforeWrite и afterWrite. Как понятно из названия одна срабатывает перед записью, вторая после.
Посмотреть на функцию afterWrite Вы можете в /modules/catalog/model/orm/offer.inc.php

Но мне больше интересен вопрос как Вы работаете с БД, при помощи ORM запросов или нет?

Re: Резервирование товара

Вы если укажите какие данные хотите получить, мы можем подсказать как это сделать программно более корректно, если Вы недавно работаете с движком. Поэтому обращайтесь.

Re: Резервирование товара

Благодарю за ответ. Пока использую конструктор запросов.
Возникла такая ситуация, что мне нужно знать сколько товара в резерве лежит и у кого. Так же нужна возможность уходить остатками в минус т.к. некоторые товары производятся по заказу.
Пока реализовал движения по складам в отдельный справочник и пересмотрел код, когда учитываются остатки. Получается нам нужен справочник резервов для каждой комплектации и обновление в нем записей при изменении остатков, что можно сделать хуками. Для того, чтобы уходить в минус по остаткам нужно очистить сообщение об ошибке, что товара не достаточно на складе. Это же можно сделать хуками или придется жестко править?

Повысить оценку Понизить оценку

8 Отредактировано Александр (21.10.2015 14:58:41)

Re: Резервирование товара

Сообщение о том, что товара не хватает, можно убрать настройками модуля магазин. Просто убрав проверку на наличие остатка.