From 76753fc304de80ad9d9ef81e2c611b4b9c73be75 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Fri, 24 Apr 2026 13:20:54 +0700 Subject: [PATCH] feat: Update OrderSeeder to generate orders over a date range with variable daily counts and increase item quantity range --- database/seeders/OrderSeeder.php | 59 ++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/database/seeders/OrderSeeder.php b/database/seeders/OrderSeeder.php index 33e4641..841d524 100644 --- a/database/seeders/OrderSeeder.php +++ b/database/seeders/OrderSeeder.php @@ -48,33 +48,42 @@ public function run(): void $orderableItems = $orderableItems->merge($products); } - for ($i = 0; $i < 50; $i++) { - $outlet = $outlets->random(); - $user = $users->random(); - $customer = $customers->random(); + $startDate = now()->subMonths(6); + $endDate = now(); + $orderCount = 0; - $status = $this->getRandomStatus(); - $orderedAt = now()->subDays(rand(0, 90)); + for ($date = $startDate->copy(); $date->lte($endDate); $date->addDay()) { + $ordersPerDay = rand(1, 10); - $order = Order::create([ - 'outlet_id' => $outlet->id, - 'user_id' => $user->id, - 'customer_id' => $customer->id, - 'voucher_id' => null, - 'invoice_number' => 'INV'.$orderedAt->format('Ymd').str_pad($i + 1, 4, '0', STR_PAD_LEFT), - 'channel' => OrderChannel::OUTLET, - 'status' => $status, - 'ordered_at' => $orderedAt, - 'created_at' => $orderedAt, - 'updated_at' => $orderedAt, - 'cogs' => 0, - 'subtotal' => 0, - 'discount' => 0, - 'voucher_discount' => 0, - 'total' => 0, - ]); + for ($i = 0; $i < $ordersPerDay; $i++) { + $orderCount++; + $outlet = $outlets->random(); + $user = $users->random(); + $customer = $customers->random(); - $this->createOrderItems($order, $user, $orderableItems); + $status = $this->getRandomStatus(); + $orderedAt = $date->copy()->addHours(rand(8, 22))->addMinutes(rand(0, 59)); + + $order = Order::create([ + 'outlet_id' => $outlet->id, + 'user_id' => $user->id, + 'customer_id' => $customer->id, + 'voucher_id' => null, + 'invoice_number' => 'INV'.$orderedAt->format('Ymd').str_pad($orderCount, 4, '0', STR_PAD_LEFT), + 'channel' => OrderChannel::OUTLET, + 'status' => $status, + 'ordered_at' => $orderedAt, + 'created_at' => $orderedAt, + 'updated_at' => $orderedAt, + 'cogs' => 0, + 'subtotal' => 0, + 'discount' => 0, + 'voucher_discount' => 0, + 'total' => 0, + ]); + + $this->createOrderItems($order, $user, $orderableItems); + } } } @@ -102,7 +111,7 @@ private function createOrderItems(Order $order, User $user, Collection $orderabl for ($j = 0; $j < $itemCount; $j++) { $item = $orderables->random(); - $qty = rand(1, 3); + $qty = rand(20, 100); $price = $item->sale_price ?? rand(50000, 150000); $cogs = $item->cost_price ?? (int) ($price * 0.4);