Как правильно учитывать остаток товара на складе?

Добрый день

Как правильно учитывать остаток товара на складе? Есть два варианта :
- Вести пересчет остатка при добавлении в корзину.
- Вести пересчет остатка при оплате.

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

Как правильно сделать? Может есть более правильный вариант.
  • Вопрос задан
  • 3646 просмотров
Решения вопроса 3
Второй вариант однозначно. Чтобы не производить манипуляции с товаром до тех пор, пока его реально не оплатили.

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

При отправлении запроса в платежную систему - ставить лок на заказанное кол-во товара, после ответа - либо уменьшать кол-во в случае успеха, либо снимать лок.
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Оба варианта плохи и сам автор понимает почему.

Правильное решение тут одно - вводите понятие забронированный товар:

1) При нажатии кнопки "оплата" пытаетесь забронировать товар на nn минут, и проверяете что это удалось. (бронирование стоит делать именно на шаге перед оплатой, чтобы избежать излишних броней)
Если бронирование не удалось - алерт пользователю.
Если удалось - переходим на оплату.
Время бронирования надо выбрать заведомо больше времени которое дается на оплату счета вашей платежной системой.

2) Если платеж пришел - отмечаем бронь как выкупленную, все хорошо.

3) По крону - если есть не выкупленные брони с истекшим сроком - отменяем их возвращая товары в продажу.
Ответ написан
pi314
@pi314
Президент Солнечной системы и окрестностей
С точки зрения бухгалтерии есть и третий, правильный вариант: остаток = доступный + зарезервированный товар. Положили в корзину = зарезервировали. Оплатили -> ничего не делать. Оплата не прошла = "разрезервировали" и принудительно выкинули из корзины.
А остаток, как таковой, уменьшать только по факту отгрузки (накладная).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы