В настоящее время я работаю над проектом, связанным с системой управления запасами на уровне 5.6. В основном у меня есть 3 таблицы в базе данных MySQL, которые я буду связывать с моей программой; запчасти, закажи и получи
Детали таблица выглядит как
id | brand | model | partcode | partname
1 | Apple | Iphone X | ixmainpcb | PCB
2 | Apple | Iphone X | ixLCD | Main PCB
3 | Apple | Iphone X | ixcamera | PCB
Заказ таблица выглядит как
id |part_id | orderno | orderqty | freeqty | purchaseqty | price | totalqty
1 | 1 | O18001 | 1000 | 50 | 950 | 9500 | 1000
2 | 2 | O18002 | 1500 | 100 | 1400 | 28000 | 1500
3 | 3 | O18003 | 2000 | 100 | 1900 | 38000 | 2000
Мы должны заплатить цену за покупку. Только не нужно платить за покупку. freeqty - это количество схемы. цена - общая сумма цены.
Получение выглядит как
id | order_id |fresh | defect | short | excess | Stock | totalreceive
1 | 1 | 600 | 100 | 300 | 0 | 5 | 700
2 | 2 | 400 | 50 | 1050 | 0 | 130 | 450
3 | 1 | 300 | 0 | 0 | 0 | 300 | 300
При первой отгрузке order_id 1 Товар получен 700 штук. Он был продан клиенту, и теперь на складе у меня осталось всего 5 штук. При второй отгрузке моя order_id 1 отгрузка была завершена при получении 300 штук, поэтому дефект и short будут в таблице 0 , а поле stock будет 300 для третьего ряда.
При продаже возникает актуальная проблема.
Что я могу сделать в следующих случаях.
Дело 1:
Предположим, что клиент хочет купить продукт за 50 штук, который имеет order_id 1. Затем, когда я продам его, 5 вычтут из первого ряда, а оставшиеся 45 вычтут из третьего ряда, чтобы моя новая таблица приема выглядела как
id | order_id |fresh | defect | short | excess | Stock | totalreceive
1 | 1 | 600 | 100 | 300 | 0 | 0 | 700
2 | 2 | 400 | 50 | 1050 | 0 | 130 | 450
3 | 1 | 300 | 0 | 0 | 0 | 255 | 300
Случай 2:
Предположим, что клиент хочет купить 5 (или менее 5) штук товара, у которого есть order_id 1. Затем, когда я продам его из первого ряда, моя новая таблица приема будет выглядеть как
id | order_id |fresh | defect | short | excess | Stock | totalreceive
1 | 1 | 600 | 100 | 300 | 0 | 0 | 700
2 | 2 | 400 | 50 | 1050 | 0 | 130 | 450
3 | 1 | 300 | 0 | 0 | 0 | 300 | 300
Каков наилучший способ \ логика для обработки этих случаев. Заранее спасибо.
Вот код того, что я сделал для хранения данных о продажах в базе данных.
Я не знаю, правильна ли эта логика или нет. Любая помощь будет оценена.
Я передал это значение из представления, используя ajax, в контроллер.
$deps = Input::only('id', 'vpoid', 'issueqty', 'vpostock', 'amount', 'discount', 'vat', 'netamount', 'status', 'remarks');
$id =$deps['id'];
$vpoid = $deps['vpoid'];
$issueqty = $deps['issueqty'];
$vpostock = $deps['vpostock'];
$amount = $deps['amount'];
$discount = $deps['discount'];
$vat = $deps['vat'];
$netamount = $deps['netamount'];
$status = $deps['status'];
$remarks = $deps['remarks'];
$newstock = 0;
foreach ($vpoid as $key => $n) {
//For Updating the stock in receive table
$chk = VpoUpload::where("id", "=", $vpoid[$key])->get();
$newstock = ((int)$chk[0]->stockqty) - $issueqty[$key];
DB::table('vpo')->where("id", "=", $vpoid[$key])->update(array(
'stockqty' => $newstock,
)
);
}
for ($i=0; $i < count($receiveqty); $i++) {
$data[] =[
'receiveqty' =>$issueqty[$i],
'amount' => $amount[$i],
'status' => $status[$i],
'remarks' => $remarks[$i],
];
}
$vpouploads = VpoSell::insert($data);