From 7381556f31810d3fde403033a095aa8fdbaef842 Mon Sep 17 00:00:00 2001 From: EwelinaLasowy Date: Fri, 25 Feb 2022 14:23:50 +0100 Subject: [PATCH] wip --- app/Domain/Enums/EmploymentForm.php | 2 +- .../Models/VacationRequestActivity.php | 9 + .../Http/Controllers/DashboardController.php | 18 +- .../VacationRequestActivityFactory.php | 22 ++ database/seeders/DemoSeeder.php | 225 ++++++++++++++++++ resources/js/Pages/Dashboard.vue | 2 +- 6 files changed, 267 insertions(+), 11 deletions(-) create mode 100644 database/factories/VacationRequestActivityFactory.php create mode 100644 database/seeders/DemoSeeder.php diff --git a/app/Domain/Enums/EmploymentForm.php b/app/Domain/Enums/EmploymentForm.php index 625b801..daf671d 100644 --- a/app/Domain/Enums/EmploymentForm.php +++ b/app/Domain/Enums/EmploymentForm.php @@ -7,7 +7,7 @@ namespace Toby\Domain\Enums; enum EmploymentForm: string { case EmploymentContract = "employment_contract"; - case ComissionContract = "commission_contract"; + case CommissionContract = "commission_contract"; case B2bContract = "b2b_contract"; case BoardMemberContract = "board_member_contract"; diff --git a/app/Eloquent/Models/VacationRequestActivity.php b/app/Eloquent/Models/VacationRequestActivity.php index 8425d99..69201d2 100644 --- a/app/Eloquent/Models/VacationRequestActivity.php +++ b/app/Eloquent/Models/VacationRequestActivity.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Toby\Eloquent\Models; +use Database\Factories\VacationRequestActivityFactory; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Toby\Domain\Enums\VacationRequestState; @@ -17,6 +19,8 @@ use Toby\Domain\Enums\VacationRequestState; */ class VacationRequestActivity extends Model { + use HasFactory; + protected $guarded = []; protected $casts = [ @@ -33,4 +37,9 @@ class VacationRequestActivity extends Model { return $this->belongsTo(VacationRequest::class); } + + protected static function newFactory(): VacationRequestActivityFactory + { + return VacationRequestActivityFactory::new(); + } } diff --git a/app/Infrastructure/Http/Controllers/DashboardController.php b/app/Infrastructure/Http/Controllers/DashboardController.php index 59291af..4dda8e2 100644 --- a/app/Infrastructure/Http/Controllers/DashboardController.php +++ b/app/Infrastructure/Http/Controllers/DashboardController.php @@ -24,7 +24,7 @@ class DashboardController extends Controller { public function __construct( protected VacationTypeConfigRetriever $configRetriever, - protected YearPeriodRetriever $yearPeriodRetriever + protected YearPeriodRetriever $yearPeriodRetriever, ) { } @@ -35,7 +35,7 @@ class DashboardController extends Controller ->whereDate("date", Carbon::now()) ->whereRelation( "vacationRequest", - fn(Builder $query) => $query->states(VacationRequestState::successStates()) + fn(Builder $query) => $query->states(VacationRequestState::successStates()), ) ->get(); @@ -51,10 +51,10 @@ class DashboardController extends Controller ->get(); $limit = $request->user() - ->vacationLimits() - ->where("year_period_id", $this->yearPeriodRetriever->current()->id) - ->first() - ->days ?? 0; + ->vacationLimits() + ->where("year_period_id", $this->yearPeriodRetriever->current()->id) + ->first() + ->days ?? 0; $used = $request->user() ->vacations() @@ -62,7 +62,7 @@ class DashboardController extends Controller "vacationRequest", fn(Builder $query) => $query ->whereIn("type", $this->getLimitableVacationTypes()) - ->noStates(VacationRequestState::successStates()), + ->states(VacationRequestState::successStates()), ) ->count(); @@ -72,7 +72,7 @@ class DashboardController extends Controller "vacationRequest", fn(Builder $query) => $query ->whereIn("type", $this->getLimitableVacationTypes()) - ->noStates(VacationRequestState::pendingStates()), + ->states(VacationRequestState::pendingStates()), ) ->count(); @@ -82,7 +82,7 @@ class DashboardController extends Controller "vacationRequest", fn(Builder $query) => $query ->whereIn("type", $this->getNotLimitableVacationTypes()) - ->noStates(VacationRequestState::successStates()), + ->states(VacationRequestState::successStates()), ) ->count(); diff --git a/database/factories/VacationRequestActivityFactory.php b/database/factories/VacationRequestActivityFactory.php new file mode 100644 index 0000000..c4b8c50 --- /dev/null +++ b/database/factories/VacationRequestActivityFactory.php @@ -0,0 +1,22 @@ + $this->faker->randomElement(VacationRequestState::cases()), + "to" => $this->faker->randomElement(VacationRequestState::cases()), + ]; + } +} diff --git a/database/seeders/DemoSeeder.php b/database/seeders/DemoSeeder.php new file mode 100644 index 0000000..5f96ff7 --- /dev/null +++ b/database/seeders/DemoSeeder.php @@ -0,0 +1,225 @@ + "Jan", + "last_name" => "Kowalski", + "email" => env("LOCAL_EMAIL_FOR_LOGIN_VIA_GOOGLE"), + "employment_form" => EmploymentForm::EmploymentContract, + "position" => "programista", + "role" => Role::Employee, + "employment_date" => Carbon::createFromDate(2021, 12, 31), + "remember_token" => Str::random(10), + ]) + ->create(); + + $employee2 = User::factory([ + "first_name" => "Anna", + "last_name" => "Nowak", + "email" => "anna.nowak@example.com", + "employment_form" => EmploymentForm::CommissionContract, + "position" => "tester", + "role" => Role::Employee, + "employment_date" => Carbon::createFromDate(2021, 5, 10), + "remember_token" => Str::random(10), + ]) + ->create(); + + $employee3 = User::factory([ + "first_name" => "Tola", + "last_name" => "Sawicka", + "email" => "tola.sawicka@example.com", + "employment_form" => EmploymentForm::B2bContract, + "position" => "programista", + "role" => Role::Employee, + "employment_date" => Carbon::createFromDate(2021, 1, 4), + "remember_token" => Str::random(10), + ]) + ->create(); + + $technicalApprover = User::factory([ + "first_name" => "Maciej", + "last_name" => "Ziółkowski", + "email" => "maciej.ziolkowski@example.com", + "employment_form" => EmploymentForm::BoardMemberContract, + "position" => "programista", + "role" => Role::TechnicalApprover, + "employment_date" => Carbon::createFromDate(2021, 1, 4), + "remember_token" => Str::random(10), + ]) + ->create(); + + $administrativeApprover = User::factory([ + "first_name" => "Katarzyna", + "last_name" => "Zając", + "email" => "katarzyna.zajac@example.com", + "employment_form" => EmploymentForm::EmploymentContract, + "position" => "dyrektor", + "role" => Role::AdministrativeApprover, + "employment_date" => Carbon::createFromDate(2021, 1, 4), + "remember_token" => Str::random(10), + ]) + ->create(); + + $admin = User::factory([ + "first_name" => "Miłosz", + "last_name" => "Borowski", + "email" => "milosz.borowski@example.com", + "employment_form" => EmploymentForm::EmploymentContract, + "position" => "administrator", + "role" => Role::Administrator, + "employment_date" => Carbon::createFromDate(2021, 1, 4), + "remember_token" => Str::random(10), + ]) + ->create(); + + $users = User::all(); + + $this->generateAvatarsForUsers($users); + + $year = 2021; + + YearPeriod::factory() + ->count(2) + ->sequence( + [ + "year" => Carbon::createFromDate($year)->year, + ], + [ + "year" => Carbon::createFromDate($year + 1)->year, + ], + ) + ->afterCreating(function (YearPeriod $yearPeriod) use ($users): void { + foreach ($users as $user) { + VacationLimit::factory([ + "days" => $user->employment_form === EmploymentForm::EmploymentContract ? 26 : null, + ]) + ->for($yearPeriod) + ->for($user) + ->create(); + } + }) + ->afterCreating(function (YearPeriod $yearPeriod): void { + $polishHolidaysRetriever = new PolishHolidaysRetriever(); + + foreach ($polishHolidaysRetriever->getForYearPeriod($yearPeriod) as $holiday) { + $yearPeriod->holidays()->create([ + "name" => $holiday["name"], + "date" => $holiday["date"], + ]); + } + }) + ->create(); + + $currentYearPeriod = YearPeriod::query()->where("year", 2022)->first(); + + /** @var VacationRequest $vacationRequest */ + $vacationRequest = VacationRequest::factory([ + "type" => VacationType::Vacation->value, + "state" => VacationRequestState::Created, + "from" => Carbon::create($currentYearPeriod->year, 1, 31)->toDateString(), + "to" => Carbon::create($currentYearPeriod->year, 2, 4)->toDateString(), + "comment" => "Komentarz do wniosku urlopowego.", + ]) + ->for($employee1) + ->for($employee1, "creator") + ->for($currentYearPeriod) + ->afterCreating(function (VacationRequest $vacationRequest): void { + $days = app(VacationDaysCalculator::class)->calculateDays( + $vacationRequest->yearPeriod, + $vacationRequest->from, + $vacationRequest->to, + ); + + foreach ($days as $day) { + $vacationRequest->vacations()->create([ + "date" => $day, + "user_id" => $vacationRequest->user->id, + "year_period_id" => $vacationRequest->yearPeriod->id, + ]); + } + }) + ->create(); + + VacationRequestActivity::factory([ + "from" => null, + "to" => VacationRequestState::Created, + ])->for($vacationRequest) + ->for($employee1) + ->create(); + + VacationRequestActivity::factory([ + "from" => VacationRequestState::Created, + "to" => VacationRequestState::WaitingForTechnical, + ])->for($vacationRequest) + ->create(); + + VacationRequestActivity::factory([ + "from" => VacationRequestState::WaitingForTechnical, + "to" => VacationRequestState::AcceptedByTechnical, + ])->for($vacationRequest) + ->for($technicalApprover) + ->create(); + + VacationRequestActivity::factory([ + "from" => VacationRequestState::AcceptedByTechnical, + "to" => VacationRequestState::WaitingForAdministrative, + ])->for($vacationRequest) + ->create(); + + VacationRequestActivity::factory([ + "from" => VacationRequestState::WaitingForAdministrative, + "to" => VacationRequestState::AcceptedByAdministrative, + ])->for($vacationRequest) + ->for($administrativeApprover) + ->create(); + + VacationRequestActivity::factory([ + "from" => VacationRequestState::AcceptedByAdministrative, + "to" => VacationRequestState::Approved, + ])->for($vacationRequest) + ->create(); + + $vacationRequest->changeStateTo(VacationRequestState::Approved); + } + + protected function generateAvatarsForUsers(Collection $users): void + { + foreach ($users as $user) { + $user->saveAvatar($this->avatarGenerator->generateFor($user)); + } + } +} diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue index 0587ba2..62f9576 100644 --- a/resources/js/Pages/Dashboard.vue +++ b/resources/js/Pages/Dashboard.vue @@ -221,7 +221,7 @@ export default { default: () => ({ used: 0, pending: 0, - other: 0, + remaining: 0, }), }, },