%PDF- %PDF-
Direktori : /var/www/html/hr/api/database/seeds/ |
Current File : /var/www/html/hr/api/database/seeds/TimecardsTableSeeder.php |
<?php use App\Models\Day; use App\Models\Project; use App\Models\Timecard; use App\Models\User; use Carbon\Carbon; use Carbon\CarbonPeriod; use Faker\Generator as Faker; use Illuminate\Database\Seeder; class TimecardsTableSeeder extends Seeder { /** * @var Faker */ private $faker; /** * ProjectsTableSeeder constructor. * @param Faker $faker */ public function __construct(Faker $faker) { $this->faker = $faker; } /** * Run the database seeds. * * @return void */ public function run() { $user1 = User::query() ->where('email', 'fabjan.elezi@hrsys.al') ->first(); $user2 = User::query() ->where('email', 'shaban.ramadani@hrsys.al') ->first(); $user3 = User::query() ->where('email', 'ermal.draqi@hrsys.al') ->first(); $user4 = User::query() ->where('email', 'sara.fin@hrsys.al') ->first(); $start = Carbon::now() ->startOfYear(); $end = Carbon::now() ->addMonth() ->endOfDay(); $range = CarbonPeriod::create($start, $end); foreach ($range as $date) { /** @var Timecard $item1 */ $isWorkingDay = Day::isWorkingDay($date); $expectedWorkingHours = $isWorkingDay ? 8 : 0; if ($expectedWorkingHours > 0) { $this->createTimecard($date, $expectedWorkingHours, $user1); $this->createTimecard($date, $expectedWorkingHours, $user2); $this->createTimecard($date, $expectedWorkingHours, $user3); $this->createTimecard($date, $expectedWorkingHours, $user4); } } } private function createTimecard($date, $expectedWorkingHours, $user1) { /** @var Timecard $item */ $item = Timecard::query() ->make([ 'date' => $date, 'start_time' => '09:00', 'end_time' => '17:00', 'notes' => $this->faker->paragraph, 'hours' => $expectedWorkingHours, 'status' => Timecard::APPROVED, 'approved_hours' => $this->faker->numberBetween($expectedWorkingHours - 2, $expectedWorkingHours + 2), ]); $item->user() ->associate($user1); $item->project() ->associate(Project::query() ->orderByRaw('RAND()') ->first()->id); $item->save(); return $item; } }