From bbb0eb8f6c1a341a47a8cc4c35d443ce405c10ff Mon Sep 17 00:00:00 2001 From: EwelinaLasowy Date: Thu, 27 Jan 2022 11:05:50 +0100 Subject: [PATCH 01/26] change layout --- resources/js/Pages/Dashboard.vue | 98 ++++- resources/js/Shared/Layout.vue | 19 - resources/js/Shared/Layout/AppLayout.vue | 8 +- resources/js/Shared/MainMenu.vue | 451 ++++++++++++----------- 4 files changed, 346 insertions(+), 230 deletions(-) delete mode 100644 resources/js/Shared/Layout.vue diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue index 4eb47d9..4fab9a5 100644 --- a/resources/js/Pages/Dashboard.vue +++ b/resources/js/Pages/Dashboard.vue @@ -37,7 +37,7 @@
View profile @@ -370,4 +370,98 @@ export default { }; }, }; - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/js/Shared/Layout.vue b/resources/js/Shared/Layout.vue deleted file mode 100644 index 55883ac..0000000 --- a/resources/js/Shared/Layout.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/Shared/Layout/AppLayout.vue b/resources/js/Shared/Layout/AppLayout.vue index ea11dfa..71cdcaa 100644 --- a/resources/js/Shared/Layout/AppLayout.vue +++ b/resources/js/Shared/Layout/AppLayout.vue @@ -1,9 +1,11 @@ -- 2.52.0 From 39665c9c31127c99848ad93fdc8ef37fbc99527f Mon Sep 17 00:00:00 2001 From: EwelinaLasowy Date: Mon, 7 Feb 2022 10:38:42 +0100 Subject: [PATCH 05/26] wip --- resources/js/Pages/VacationRequest/Index.vue | 8 +- resources/js/Pages/VacationRequest/Show.vue | 89 +++++++++++--------- 2 files changed, 55 insertions(+), 42 deletions(-) diff --git a/resources/js/Pages/VacationRequest/Index.vue b/resources/js/Pages/VacationRequest/Index.vue index f0f83f8..7ef7b35 100644 --- a/resources/js/Pages/VacationRequest/Index.vue +++ b/resources/js/Pages/VacationRequest/Index.vue @@ -97,7 +97,7 @@ X - {{ request.state }} + {{ request.state }} @@ -179,7 +179,7 @@ import { TrashIcon, XIcon, CheckIcon, - DocumentTextIcon, + DocumentTextIcon, } from '@heroicons/vue/solid' export default { @@ -193,8 +193,8 @@ export default { ClockIcon, XIcon, CheckIcon, - DocumentTextIcon, - ThumbDownIcon, + DocumentTextIcon, + ThumbDownIcon, }, props: { requests: { diff --git a/resources/js/Pages/VacationRequest/Show.vue b/resources/js/Pages/VacationRequest/Show.vue index c47af41..2822578 100644 --- a/resources/js/Pages/VacationRequest/Show.vue +++ b/resources/js/Pages/VacationRequest/Show.vue @@ -54,9 +54,18 @@
Komentarz
-
+
{{ request.comment }}
+
+ - +
@@ -183,37 +192,37 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
-

+

+
{{ status.name }} -

-
-
- +
+
+ Jan Kowalski +
+
+ + +
-- 2.52.0 From cc90851bcad45dff4bdc813db5d34a43ad998a53 Mon Sep 17 00:00:00 2001 From: Adrian Hopek Date: Mon, 7 Feb 2022 14:37:14 +0100 Subject: [PATCH 06/26] #22 - wip --- app/Eloquent/Models/Vacation.php | 37 +++++++++++++++++++ app/Eloquent/Models/VacationRequest.php | 6 +++ .../Http/Controllers/HolidayController.php | 2 - .../Controllers/VacationRequestController.php | 7 +--- .../Resources/VacationRequestResource.php | 2 +- .../Http/Resources/VacationResource.php | 21 +++++++++++ database/factories/VacationFactory.php | 20 ++++++++++ database/factories/VacationRequestFactory.php | 9 ----- ..._100039_create_vacation_requests_table.php | 1 - ...22_02_07_133018_create_vacations_table.php | 26 +++++++++++++ database/seeders/DatabaseSeeder.php | 15 ++++++++ resources/js/Pages/Calendar.vue | 2 +- resources/js/Pages/Holidays/Create.vue | 2 +- resources/js/Pages/Holidays/Edit.vue | 2 +- resources/js/Pages/Holidays/Index.vue | 2 +- resources/js/Pages/Users/Create.vue | 2 +- resources/js/Pages/Users/Edit.vue | 2 +- resources/js/Pages/Users/Index.vue | 2 +- resources/js/Pages/VacationLimits.vue | 2 +- resources/js/Pages/VacationRequest/Create.vue | 2 +- resources/js/Pages/VacationRequest/Index.vue | 22 +++++------ resources/js/Pages/VacationRequest/Show.vue | 14 +++---- 22 files changed, 155 insertions(+), 45 deletions(-) create mode 100644 app/Eloquent/Models/Vacation.php create mode 100644 app/Infrastructure/Http/Resources/VacationResource.php create mode 100644 database/factories/VacationFactory.php create mode 100644 database/migrations/2022_02_07_133018_create_vacations_table.php diff --git a/app/Eloquent/Models/Vacation.php b/app/Eloquent/Models/Vacation.php new file mode 100644 index 0000000..e359926 --- /dev/null +++ b/app/Eloquent/Models/Vacation.php @@ -0,0 +1,37 @@ + "date", + ]; + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + public function vacationRequest(): BelongsTo + { + return $this->belongsTo(VacationRequest::class); + } +} diff --git a/app/Eloquent/Models/VacationRequest.php b/app/Eloquent/Models/VacationRequest.php index 0a81620..7b84a07 100644 --- a/app/Eloquent/Models/VacationRequest.php +++ b/app/Eloquent/Models/VacationRequest.php @@ -26,6 +26,7 @@ use Toby\Domain\Enums\VacationType; * @property User $user * @property YearPeriod $yearPeriod * @property Collection $activities + * @property Collection $vacations * @property Carbon $created_at * @property Carbon $updated_at */ @@ -57,6 +58,11 @@ class VacationRequest extends Model return $this->hasMany(VacationRequestActivity::class); } + public function vacations(): HasMany + { + return $this->hasMany(Vacation::class); + } + public function changeStateTo(VacationRequestState $state): void { $this->state = $state; diff --git a/app/Infrastructure/Http/Controllers/HolidayController.php b/app/Infrastructure/Http/Controllers/HolidayController.php index ff07005..e69a8ff 100644 --- a/app/Infrastructure/Http/Controllers/HolidayController.php +++ b/app/Infrastructure/Http/Controllers/HolidayController.php @@ -7,11 +7,9 @@ namespace Toby\Infrastructure\Http\Controllers; use Illuminate\Http\RedirectResponse; use Inertia\Response; use Toby\Eloquent\Models\Holiday; -use Toby\Eloquent\Models\User; use Toby\Infrastructure\Http\Requests\HolidayRequest; use Toby\Infrastructure\Http\Resources\HolidayFormDataResource; use Toby\Infrastructure\Http\Resources\HolidayResource; -use Toby\Infrastructure\Http\Resources\UserResource; class HolidayController extends Controller { diff --git a/app/Infrastructure/Http/Controllers/VacationRequestController.php b/app/Infrastructure/Http/Controllers/VacationRequestController.php index f864bc0..77411da 100644 --- a/app/Infrastructure/Http/Controllers/VacationRequestController.php +++ b/app/Infrastructure/Http/Controllers/VacationRequestController.php @@ -28,6 +28,7 @@ class VacationRequestController extends Controller $vacationRequests = $request->user() ->vacationRequests() + ->with("vacations") ->where("year_period_id", $yearPeriodRetriever->selected()->id) ->latest() ->states(VacationRequestState::filterByStatus($status)) @@ -73,15 +74,11 @@ class VacationRequestController extends Controller ): RedirectResponse { /** @var VacationRequest $vacationRequest */ $vacationRequest = $request->user()->vacationRequests()->make($request->data()); - $vacationRequest->estimated_days = $vacationDaysCalculator->calculateDays( - $vacationRequest->yearPeriod, - $vacationRequest->from, - $vacationRequest->to, - )->count(); $vacationRequestValidator->validate($vacationRequest); $vacationRequest->save(); + $stateManager->markAsCreated($vacationRequest); return redirect() diff --git a/app/Infrastructure/Http/Resources/VacationRequestResource.php b/app/Infrastructure/Http/Resources/VacationRequestResource.php index 009eeb6..6aa3111 100644 --- a/app/Infrastructure/Http/Resources/VacationRequestResource.php +++ b/app/Infrastructure/Http/Resources/VacationRequestResource.php @@ -20,8 +20,8 @@ class VacationRequestResource extends JsonResource "state" => $this->state->label(), "from" => $this->from->toDisplayString(), "to" => $this->to->toDisplayString(), - "estimatedDays" => $this->estimated_days, "comment" => $this->comment, + "days" => VacationResource::collection($this->vacations), ]; } } diff --git a/app/Infrastructure/Http/Resources/VacationResource.php b/app/Infrastructure/Http/Resources/VacationResource.php new file mode 100644 index 0000000..e9590e3 --- /dev/null +++ b/app/Infrastructure/Http/Resources/VacationResource.php @@ -0,0 +1,21 @@ + $this->id, + "displayDate" => $this->date->toDisplayString(), + "date" => $this->date->toDateString(), + ]; + } +} diff --git a/database/factories/VacationFactory.php b/database/factories/VacationFactory.php new file mode 100644 index 0000000..e28cc70 --- /dev/null +++ b/database/factories/VacationFactory.php @@ -0,0 +1,20 @@ + $this->faker->randomElement(VacationRequestState::cases()), "from" => $from, "to" => $from->addDays($days), - "estimated_days" => fn(array $attributes) => $this->estimateDays($attributes), "comment" => $this->faker->boolean ? $this->faker->paragraph() : null, ]; } @@ -43,11 +41,4 @@ class VacationRequestFactory extends Factory return "{$number}/{$year}"; } - - protected function estimateDays(array $attributes): int - { - $period = CarbonPeriod::create($attributes["from"], $attributes["to"]); - - return $period->count(); - } } diff --git a/database/migrations/2022_01_26_100039_create_vacation_requests_table.php b/database/migrations/2022_01_26_100039_create_vacation_requests_table.php index b3f4e48..f5270da 100644 --- a/database/migrations/2022_01_26_100039_create_vacation_requests_table.php +++ b/database/migrations/2022_01_26_100039_create_vacation_requests_table.php @@ -18,7 +18,6 @@ return new class() extends Migration { $table->foreignIdFor(YearPeriod::class)->constrained()->cascadeOnDelete(); $table->string("type"); $table->string("state")->nullable(); - $table->integer("estimated_days"); $table->date("from"); $table->date("to"); $table->text("comment")->nullable(); diff --git a/database/migrations/2022_02_07_133018_create_vacations_table.php b/database/migrations/2022_02_07_133018_create_vacations_table.php new file mode 100644 index 0000000..1d806d5 --- /dev/null +++ b/database/migrations/2022_02_07_133018_create_vacations_table.php @@ -0,0 +1,26 @@ +id(); + $table->foreignIdFor(User::class)->constrained()->cascadeOnDelete(); + $table->foreignIdFor(VacationRequest::class)->constrained()->cascadeOnDelete(); + $table->date("date"); + }); + } + + public function down(): void + { + Schema::dropIfExists("vacations"); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 205246a..439a50f 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -8,6 +8,7 @@ use Illuminate\Database\Seeder; use Illuminate\Support\Carbon; use Illuminate\Support\Collection; use Toby\Domain\PolishHolidaysRetriever; +use Toby\Domain\VacationDaysCalculator; use Toby\Eloquent\Helpers\UserAvatarGenerator; use Toby\Eloquent\Models\User; use Toby\Eloquent\Models\VacationLimit; @@ -79,6 +80,20 @@ class DatabaseSeeder extends Seeder ->sequence(fn() => [ "year_period_id" => $yearPeriods->random()->id, ]) + ->afterCreating(function (VacationRequest $vacationRequest) { + $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 + ]); + } + }) ->create(); } } diff --git a/resources/js/Pages/Calendar.vue b/resources/js/Pages/Calendar.vue index 7db5f67..bf80d3f 100644 --- a/resources/js/Pages/Calendar.vue +++ b/resources/js/Pages/Calendar.vue @@ -1,6 +1,6 @@