Car-Repairs-Shop/database/seeders/DatabaseSeeder.php
sackey e839d40a99
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
Initial commit
2025-07-30 17:15:50 +00:00

86 lines
3.7 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\User;
use App\Models\Customer;
use App\Models\Vehicle;
use App\Models\Technician;
use App\Models\ServiceOrder;
use App\Models\Part;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
// Create admin user (only if it doesn't exist)
User::firstOrCreate(
['email' => 'admin@carrepairs.com'],
[
'name' => 'Shop Manager',
'email_verified_at' => now(),
'password' => bcrypt('password'),
]
);
// Create additional users
User::factory(3)->create();
// Create technicians
Technician::factory(8)->create();
// Create customers with vehicles
Customer::factory(50)
->has(Vehicle::factory()->count(rand(1, 3)))
->create();
// Create common parts
$commonParts = [
['name' => 'Engine Oil Filter', 'part_number' => 'OF-001', 'category' => 'engine', 'cost_price' => 12.50, 'sell_price' => 18.99],
['name' => 'Air Filter', 'part_number' => 'AF-001', 'category' => 'engine', 'cost_price' => 8.75, 'sell_price' => 14.99],
['name' => 'Brake Pads - Front', 'part_number' => 'BP-F001', 'category' => 'brakes', 'cost_price' => 45.00, 'sell_price' => 79.99],
['name' => 'Brake Pads - Rear', 'part_number' => 'BP-R001', 'category' => 'brakes', 'cost_price' => 38.00, 'sell_price' => 69.99],
['name' => 'Spark Plugs (Set of 4)', 'part_number' => 'SP-001', 'category' => 'engine', 'cost_price' => 25.00, 'sell_price' => 44.99],
['name' => 'Cabin Air Filter', 'part_number' => 'CAF-001', 'category' => 'hvac', 'cost_price' => 15.00, 'sell_price' => 24.99],
['name' => 'Windshield Wipers', 'part_number' => 'WW-001', 'category' => 'exterior', 'cost_price' => 12.00, 'sell_price' => 19.99],
['name' => 'Coolant (1 Gallon)', 'part_number' => 'CL-001', 'category' => 'cooling', 'cost_price' => 8.50, 'sell_price' => 16.99],
['name' => 'Transmission Fluid', 'part_number' => 'TF-001', 'category' => 'transmission', 'cost_price' => 22.00, 'sell_price' => 34.99],
['name' => 'Battery', 'part_number' => 'BAT-001', 'category' => 'electrical', 'cost_price' => 85.00, 'sell_price' => 149.99],
];
foreach ($commonParts as $part) {
Part::firstOrCreate(
['part_number' => $part['part_number']],
array_merge($part, [
'description' => "High quality {$part['name']} for various vehicle makes and models",
'manufacturer' => 'OEM',
'quantity_on_hand' => rand(10, 100),
'minimum_stock_level' => 5,
'location' => 'A' . rand(1, 5) . '-' . rand(1, 10),
'status' => 'active',
])
);
}
// Create some service orders with realistic data
$vehicles = Vehicle::all();
$technicians = Technician::where('status', 'active')->get();
foreach ($vehicles->random(min(30, $vehicles->count())) as $vehicle) {
ServiceOrder::factory()->create([
'customer_id' => $vehicle->customer_id,
'vehicle_id' => $vehicle->id,
'assigned_technician_id' => $technicians->random()->id,
'status' => collect(['pending', 'in_progress', 'completed', 'waiting_parts'])->random(),
]);
}
$this->command->info('Database seeded successfully with car repair shop data!');
}
}