Как выстроить архитектуру поставок в интернет-магазине?
Как организовать архитектуру хранения для реализации следующий фичи:
Дано:
1) есть список товаров
2) у каждого товара есть себестоимость, цена1, цена2, цена3, остаток на складе (все это параметры сейчас хранятся в одной строке таблицы, те у нас есть таблица "товары", а в ней столбики "название", "картинки", "описание" .... и т.д)
Необходимо сделать токую фичу:
в разные месяцы должна быть разная себестоимость товаров, например в следующей партии 500 штук себестоимость будет 1000р, а сейчас остаток на складе 12 штук и у них себестоимость 920р, как мне это все хранить и реализовать?
а самое интересное, что при заведении новой партии
(как я представляю это таблица с id-товра, себестоимость, дата)
старый остаток должен "продаваться" по старой себестоимости, пока не закончится
те у нас есть шоколадка в таблице и ее цена\себестоимость\остаток 100\40\12 соответственно
мы должны как-то указать, что на склад поступила партия 1000 штук этих шоколадок, но у них себестоимость уже не 40, а 45.
И старые 12 шоколадок должны продаться по 100р с себестоимостью 40 (по старым параметрам) и как только они кончаться надо продавать шоколадки из новой партии с себестоимостью 45, как все это фиксировать в отчетах?
сейчас отчеты строятся по крону, в заказе есть привязка к ID товара, (товар\цена\кол-во\дата вот и вся таблица), ночью крон запускается и пересчитаем важные для бизнеса параметры, проходя по заказам..
как и что мне теперь хранить, чтобы пониматься что заказ №999 был по старой себестоимости, а заказ №1000 уже по новой, а №1001 по третей?
Думал как-то ввести сущность поставки, где заполнять какой товар каталога в каком количестве и по какой цене прибыл на склад, но вот как мне учитывать что "остаток 10 штук продаем по старой себестоимости и только потом продажи идут уже из новой партии по новой себестоимость"?
мы должны как-то указать, что на склад поступила партия 1000 штук этих шоколадок, но у них себестоимость уже не 40, а 45.
И старые 12 шоколадок должны продаться по 100р с себестоимостью 40 (по старым параметрам) и как только они кончаться надо продавать шоколадки из новой партии с себестоимостью 45, как все это фиксировать в отчетах?
Ну сходу (не глубоко вдаваясь):
- цены и остаток отделять от товара и создать промежуточную таблицу (партия) со связями к товару
- именно у партии и хранить цены с остатками
- при выборке товаров джойнить партию с ее ценами и остатками так, что в выборку попадет ОДНА старейшая партия, где остаток не нулевой
либо можно вот как сделать:
- каждый приход партии товаров в 100 штук разворачивать в очередь предложений/вариантов — на выходе 100 строк предложений с ценами и датой прихода. У каждого предложения есть дата прихода, есть цены и остаток (1 или 0 (продано))
- при выборке товара доставать старейший с остатком 1