64 lines
1.8 KiB
PHP
64 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\Product;
|
|
use App\Models\Purchase;
|
|
use App\Models\PurchaseItem;
|
|
use App\Models\User;
|
|
use Illuminate\Database\Seeder;
|
|
|
|
class PurchaseSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Run the database seeds.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
$users = User::all();
|
|
$products = Product::all();
|
|
|
|
if ($users->isEmpty() || $products->isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
// Generate purchases for the last 6 months, twice a month
|
|
for ($i = 0; $i < 6; $i++) {
|
|
$monthDate = now()->subMonths($i);
|
|
|
|
// Two purchases per month
|
|
for ($j = 0; $j < 2; $j++) {
|
|
$purchase = Purchase::factory()->create([
|
|
'created_at' => $monthDate->copy()->startOfMonth()->addDays(rand(0, 28))->setTime(rand(8, 17), rand(0, 59)),
|
|
]);
|
|
|
|
$itemsCount = rand(1, 5);
|
|
$total = 0;
|
|
|
|
for ($k = 0; $k < $itemsCount; $k++) {
|
|
$product = $products->random();
|
|
$quantity = rand(1, 10);
|
|
$unitPrice = rand(10000, 500000);
|
|
$totalPrice = $quantity * $unitPrice;
|
|
|
|
PurchaseItem::create([
|
|
'purchase_id' => $purchase->id,
|
|
'user_id' => $users->random()->id,
|
|
'product_id' => $product->id,
|
|
'quantity' => $quantity,
|
|
'unit_price' => $unitPrice,
|
|
'total_price' => $totalPrice,
|
|
'created_at' => $purchase->created_at,
|
|
]);
|
|
|
|
$product->increment('stock', $quantity);
|
|
|
|
$total += $totalPrice;
|
|
}
|
|
|
|
$purchase->update(['total' => $total]);
|
|
}
|
|
}
|
|
}
|
|
}
|