Files
HRM-System/database/seeders/ShiftSeeder.php
2026-04-13 08:16:56 +08:00

115 lines
4.4 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\Shift;
use App\Models\User;
use Illuminate\Database\Seeder;
class ShiftSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Get all companies
$companies = User::where('type', 'company')->get();
if ($companies->isEmpty()) {
$this->command->warn('No company users found. Please run DefaultCompanySeeder first.');
return;
}
// Fixed shifts for consistent data
$shifts = [
[
'name' => 'Morning Shift',
'description' => 'Standard morning shift for regular office hours',
'start_time' => '09:00:00',
'end_time' => '18:00:00',
'break_duration' => 60,
'break_start_time' => '13:00:00',
'break_end_time' => '14:00:00',
'grace_period' => 15,
'is_night_shift' => false,
'status' => 'active'
],
[
'name' => 'Evening Shift',
'description' => 'Evening shift for extended business hours',
'start_time' => '14:00:00',
'end_time' => '23:00:00',
'break_duration' => 60,
'break_start_time' => '18:00:00',
'break_end_time' => '19:00:00',
'grace_period' => 15,
'is_night_shift' => false,
'status' => 'active'
],
[
'name' => 'Night Shift',
'description' => 'Night shift for 24/7 operations and support',
'start_time' => '22:00:00',
'end_time' => '07:00:00',
'break_duration' => 60,
'break_start_time' => '02:00:00',
'break_end_time' => '03:00:00',
'grace_period' => 15,
'is_night_shift' => true,
'status' => 'active'
]
];
foreach ($companies as $company) {
foreach ($shifts as $shiftData) {
// Check if shift already exists for this company
if (Shift::where('name', $shiftData['name'])->where('created_by', $company->id)->exists()) {
continue;
}
try {
Shift::create([
'name' => $shiftData['name'],
'description' => $shiftData['description'],
'start_time' => $shiftData['start_time'],
'end_time' => $shiftData['end_time'],
'break_duration' => $shiftData['break_duration'],
'break_start_time' => $shiftData['break_start_time'],
'break_end_time' => $shiftData['break_end_time'],
'grace_period' => $shiftData['grace_period'],
'is_night_shift' => $shiftData['is_night_shift'],
'status' => $shiftData['status'],
'created_by' => $company->id,
]);
} catch (\Exception $e) {
$this->command->error('Failed to create shift: ' . $shiftData['name'] . ' for company: ' . $company->name);
continue;
}
}
}
// Assign shifts to employees after creating shifts
foreach ($companies as $company) {
$companyShifts = Shift::where('created_by', $company->id)->get();
$employeeUsers = User::where('type', 'employee')->where('created_by', $company->id)->get();
if ($companyShifts->isNotEmpty() && $employeeUsers->isNotEmpty()) {
// Assign Morning Shift to all employees by default
$morningShift = $companyShifts->where('name', 'Morning Shift')->first();
if ($morningShift) {
foreach ($employeeUsers as $employeeUser) {
// Get employee record from employee table using user_id
$employee = \App\Models\Employee::where('user_id', $employeeUser->id)->first();
if ($employee && !$employee->shift_id) {
$employee->update(['shift_id' => $morningShift->id]);
}
}
}
}
}
$this->command->info('Shift seeder completed successfully!');
}
}