diff --git a/database/factories/DelayedGoodFactory.php b/database/factories/DelayedGoodFactory.php index f76f136..810619a 100644 --- a/database/factories/DelayedGoodFactory.php +++ b/database/factories/DelayedGoodFactory.php @@ -18,16 +18,26 @@ class DelayedGoodFactory extends Factory */ public function definition(): array { - $quantity = fake()->numberBetween(1, 100); - $unitPrice = fake()->numberBetween(5000, 20000); + $unit = Unit::whereIn('alias', ['butir', 'kg'])->inRandomOrder()->first() + ?? Unit::where('alias', 'butir')->first() + ?? Unit::factory()->create(); + + if ($unit->alias === 'butir') { + $quantity = fake()->numberBetween(10, 100); + $unitPrice = fake()->numberBetween(1500, 2500); + } else { + $quantity = fake()->randomFloat(2, 1, 15); + $unitPrice = fake()->numberBetween(25000, 32000); + } + $totalAmount = $quantity * $unitPrice; $isPaid = fake()->boolean(); $paidAmount = $isPaid ? $totalAmount : fake()->numberBetween(0, $totalAmount); $storedDate = fake()->dateTimeBetween('-1 month', 'now'); return [ - 'customer_id' => Customer::factory(), - 'unit_id' => Unit::factory(), + 'customer_id' => Customer::inRandomOrder()->first()?->id ?? Customer::factory(), + 'unit_id' => $unit->id, 'quantity' => $quantity, 'unit_price' => $unitPrice, 'total_amount' => $totalAmount, diff --git a/database/factories/ExpenseFactory.php b/database/factories/ExpenseFactory.php index f1a95c3..f463b7b 100644 --- a/database/factories/ExpenseFactory.php +++ b/database/factories/ExpenseFactory.php @@ -18,8 +18,18 @@ public function definition(): array { return [ 'expense_date' => fake()->dateTimeBetween('-1 month', 'now'), - 'amount' => fake()->numberBetween(10000, 5000000), - 'notes' => fake()->sentence(), + 'amount' => fake()->numberBetween(50000, 2000000), + 'notes' => fake()->randomElement([ + 'Listrik Kandang', + 'Gaji Pegawai', + 'Beli Vaksin/Obat', + 'Beli Vitamin', + 'Perbaikan Kandang', + 'Bahan Bakar Genset', + 'Operasional Kantor', + 'Sewa Kendaraan', + 'Beli ATK', + ]), ]; } } diff --git a/database/factories/FeedDeliveryFactory.php b/database/factories/FeedDeliveryFactory.php index a8d705b..94007c9 100644 --- a/database/factories/FeedDeliveryFactory.php +++ b/database/factories/FeedDeliveryFactory.php @@ -4,7 +4,6 @@ use App\Models\Feed; use App\Models\FeedDelivery; -use App\Models\FeedSchedule; use Illuminate\Database\Eloquent\Factories\Factory; class FeedDeliveryFactory extends Factory @@ -14,8 +13,7 @@ class FeedDeliveryFactory extends Factory public function definition(): array { return [ - 'feed_schedule_id' => FeedSchedule::factory(), - 'feed_id' => Feed::factory(), + 'feed_id' => Feed::inRandomOrder()->first()?->id ?? Feed::factory(), 'quantity' => $this->faker->numberBetween(1, 50), 'delivered_at' => $this->faker->dateTimeBetween('-1 week', 'now'), ]; diff --git a/database/factories/FeedFactory.php b/database/factories/FeedFactory.php index 0a1f0e5..bbf3898 100644 --- a/database/factories/FeedFactory.php +++ b/database/factories/FeedFactory.php @@ -17,11 +17,13 @@ public function definition(): array { return [ 'name' => $this->faker->randomElement([ - 'Pakan Starter', - 'Pakan Grower', - 'Pakan Layer', - 'Konsentrat Ayam', + 'Pelet', 'Jagung Giling', + 'Jagung Utuh', + 'Konsentrat Layer', + 'Bekatul/Dedak', + 'Mineral Mix', + 'Pakan Finisher', ]), 'unit_id' => Unit::inRandomOrder()->value('id') ?? Unit::factory(), 'stock' => $this->faker->numberBetween(0, 500), diff --git a/database/factories/FeedScheduleFactory.php b/database/factories/FeedScheduleFactory.php index 4e80bc9..bf55826 100644 --- a/database/factories/FeedScheduleFactory.php +++ b/database/factories/FeedScheduleFactory.php @@ -2,7 +2,6 @@ namespace Database\Factories; -use App\Models\Feed; use App\Models\FeedSchedule; use Illuminate\Database\Eloquent\Factories\Factory; @@ -13,10 +12,7 @@ class FeedScheduleFactory extends Factory public function definition(): array { return [ - 'feed_id' => Feed::factory(), - 'quantity' => $this->faker->numberBetween(1, 50), - 'scheduled_at' => $this->faker->dateTimeBetween('-1 week', '+1 week'), - 'executed_at' => null, + 'scheduled_at' => $this->faker->time('H:i'), ]; } } diff --git a/database/factories/OrderFactory.php b/database/factories/OrderFactory.php index da5cfd2..1a39716 100644 --- a/database/factories/OrderFactory.php +++ b/database/factories/OrderFactory.php @@ -5,6 +5,7 @@ use App\Models\Customer; use App\Models\Order; use App\Models\Unit; +use App\Models\Warehouse; use Illuminate\Database\Eloquent\Factories\Factory; /** @@ -23,19 +24,28 @@ public function definition(): array { $date = $this->faker->dateTimeBetween('-3 months', 'now'); - $eggPrice = $this->faker->numberBetween(28000, 35000); + $unit = Unit::whereIn('alias', ['butir', 'kg'])->inRandomOrder()->first() + ?? Unit::where('alias', 'butir')->first() + ?? Unit::factory()->create(); $customer = Customer::inRandomOrder()->first() ?? Customer::factory()->create(); - $eggQuantity = $this->faker->randomFloat(2, 10, 500); - $unitPrice = $eggPrice / 10; - $discount = $this->faker->optional(0.3)->numberBetween(5000, 50000) ?? 0; + if ($unit->alias === 'butir') { + $eggQuantity = $this->faker->numberBetween(30, 300); + $unitPrice = $this->faker->numberBetween(1500, 2500); // Price per egg + } else { + $eggQuantity = $this->faker->randomFloat(2, 5, 50); + $unitPrice = $this->faker->numberBetween(25000, 32000); // Price per kg + } + + $discount = $this->faker->optional(0.3)->numberBetween(5000, 25000) ?? 0; $subtotal = $eggQuantity * $unitPrice; $totalAmount = max(0, $subtotal - $discount); return [ 'customer_id' => $customer->id, - 'unit_id' => Unit::inRandomOrder()->first()->id ?? Unit::factory()->create()->id, + 'unit_id' => $unit->id, + 'warehouse_id' => Warehouse::inRandomOrder()->first()?->id ?? Warehouse::factory(), 'egg_quantity' => $eggQuantity, 'unit_price' => $unitPrice, 'order_date' => $date, diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index fd692bb..bbfdcbe 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -21,6 +21,8 @@ public function run(): void UnitSeeder::class, WarehouseSeeder::class, FeedSeeder::class, + FeedScheduleSeeder::class, + FeedDeliverySeeder::class, FeedPurchaseSeeder::class, EggCollectionSeeder::class, CustomerSeeder::class, diff --git a/database/seeders/FeedDeliverySeeder.php b/database/seeders/FeedDeliverySeeder.php new file mode 100644 index 0000000..8e4a3ca --- /dev/null +++ b/database/seeders/FeedDeliverySeeder.php @@ -0,0 +1,17 @@ +count(30)->create(); + } +} diff --git a/database/seeders/FeedScheduleSeeder.php b/database/seeders/FeedScheduleSeeder.php new file mode 100644 index 0000000..5ad82ce --- /dev/null +++ b/database/seeders/FeedScheduleSeeder.php @@ -0,0 +1,42 @@ +isEmpty()) { + $this->call(FeedSeeder::class); + $feeds = Feed::all(); + } + + foreach ($times as $time) { + $schedule = FeedSchedule::firstOrCreate([ + 'scheduled_at' => $time, + ]); + + // Attach 1-2 random feeds to each schedule + $selectedFeeds = $feeds->random(rand(1, 2)); + + foreach ($selectedFeeds as $feed) { + // Check if already attached to avoid duplicates if re-run + if (! $schedule->feeds()->where('feed_id', $feed->id)->exists()) { + $schedule->feeds()->attach($feed->id, [ + 'quantity' => rand(10, 50), + ]); + } + } + } + } +} diff --git a/database/seeders/FeedSeeder.php b/database/seeders/FeedSeeder.php index 84aba11..5429d96 100644 --- a/database/seeders/FeedSeeder.php +++ b/database/seeders/FeedSeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders; use App\Models\Feed; +use App\Models\Unit; use Illuminate\Database\Seeder; class FeedSeeder extends Seeder @@ -12,6 +13,25 @@ class FeedSeeder extends Seeder */ public function run(): void { - Feed::factory()->count(20)->create(); + $unitId = Unit::where('alias', 'kg')->first()?->id; + + $feeds = [ + ['name' => 'Pelet', 'price' => 7500], + ['name' => 'Jagung', 'price' => 6000], + ['name' => 'Konsentrat', 'price' => 12000], + ['name' => 'Bekatul', 'price' => 3500], + ['name' => 'Mineral Mix', 'price' => 15000], + ]; + + foreach ($feeds as $feed) { + Feed::firstOrCreate( + ['name' => $feed['name']], + [ + 'unit_id' => $unitId, + 'price' => $feed['price'], + 'stock' => 0, + ] + ); + } } }