75 lines
3.6 KiB
PHP
75 lines
3.6 KiB
PHP
<?php
|
||
|
||
namespace Database\Seeders;
|
||
|
||
use App\Models\Product;
|
||
use App\Models\Warehouse;
|
||
use Illuminate\Database\Seeder;
|
||
use Illuminate\Support\Facades\DB;
|
||
|
||
class StockItemSeeder extends Seeder
|
||
{
|
||
public function run(): void
|
||
{
|
||
$products = Product::all();
|
||
$warehouses = Warehouse::all();
|
||
|
||
// Define realistic stock quantities for each product × warehouse
|
||
$stockData = [
|
||
// Product 1: High rotation, variable stock
|
||
1 => [
|
||
['warehouse_id' => 1, 'qty_on_hand' => 150.000, 'safety_stock' => 50.000], // Paris: Normal
|
||
['warehouse_id' => 2, 'qty_on_hand' => 45.000, 'safety_stock' => 50.000], // Marseille: LOW STOCK - ALERT
|
||
['warehouse_id' => 3, 'qty_on_hand' => 120.000, 'safety_stock' => 40.000], // Lyon: Normal
|
||
],
|
||
// Product 2: Medium rotation
|
||
2 => [
|
||
['warehouse_id' => 1, 'qty_on_hand' => 80.000, 'safety_stock' => 30.000], // Paris: Normal
|
||
['warehouse_id' => 2, 'qty_on_hand' => 25.000, 'safety_stock' => 35.000], // Marseille: LOW STOCK - ALERT
|
||
['warehouse_id' => 3, 'qty_on_hand' => 90.000, 'safety_stock' => 30.000], // Lyon: Normal
|
||
],
|
||
// Product 3: Low rotation, strategic stock
|
||
3 => [
|
||
['warehouse_id' => 1, 'qty_on_hand' => 200.000, 'safety_stock' => 80.000], // Paris: Normal
|
||
['warehouse_id' => 2, 'qty_on_hand' => 75.000, 'safety_stock' => 80.000], // Marseille: LOW STOCK - ALERT
|
||
['warehouse_id' => 3, 'qty_on_hand' => 180.000, 'safety_stock' => 70.000], // Lyon: Normal
|
||
],
|
||
// Product 4: High value, low volume
|
||
4 => [
|
||
['warehouse_id' => 1, 'qty_on_hand' => 15.000, 'safety_stock' => 8.000], // Paris: Normal
|
||
['warehouse_id' => 2, 'qty_on_hand' => 5.000, 'safety_stock' => 10.000], // Marseille: LOW STOCK - ALERT
|
||
['warehouse_id' => 3, 'qty_on_hand' => 12.000, 'safety_stock' => 8.000], // Lyon: Normal
|
||
],
|
||
// Product 5: Medium rotation
|
||
5 => [
|
||
['warehouse_id' => 1, 'qty_on_hand' => 120.000, 'safety_stock' => 40.000], // Paris: Normal
|
||
['warehouse_id' => 2, 'qty_on_hand' => 35.000, 'safety_stock' => 45.000], // Marseille: LOW STOCK - ALERT
|
||
['warehouse_id' => 3, 'qty_on_hand' => 110.000, 'safety_stock' => 40.000], // Lyon: Normal
|
||
],
|
||
// Product 6: High rotation, high volume
|
||
6 => [
|
||
['warehouse_id' => 1, 'qty_on_hand' => 500.000, 'safety_stock' => 150.000], // Paris: Normal
|
||
['warehouse_id' => 2, 'qty_on_hand' => 140.000, 'safety_stock' => 160.000], // Marseille: LOW STOCK - ALERT
|
||
['warehouse_id' => 3, 'qty_on_hand' => 480.000, 'safety_stock' => 150.000], // Lyon: Normal
|
||
],
|
||
];
|
||
|
||
foreach ($stockData as $productId => $warehouseStocks) {
|
||
foreach ($warehouseStocks as $stock) {
|
||
DB::table('stock_items')->updateOrInsert(
|
||
[
|
||
'product_id' => $productId,
|
||
'warehouse_id' => $stock['warehouse_id'],
|
||
],
|
||
[
|
||
'qty_on_hand_base' => $stock['qty_on_hand'],
|
||
'safety_stock_base' => $stock['safety_stock'],
|
||
'updated_at' => now(),
|
||
'created_at' => now(),
|
||
]
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|