From 9a7ee2f5d30eff1948a97f09ae415efb0c6b7ab2 Mon Sep 17 00:00:00 2001 From: Adrian Hopek Date: Wed, 2 Feb 2022 10:37:16 +0100 Subject: [PATCH] #20 - wip --- app/Domain/Enums/VacationRequestState.php | 34 ++++++++++++ app/Eloquent/Models/VacationRequest.php | 6 +++ .../Controllers/VacationRequestController.php | 10 ++-- resources/js/Pages/Users/Edit.vue | 1 + resources/js/Pages/VacationRequest/Index.vue | 52 +++++++++++++++++-- 5 files changed, 97 insertions(+), 6 deletions(-) diff --git a/app/Domain/Enums/VacationRequestState.php b/app/Domain/Enums/VacationRequestState.php index fff41bf..cd7ec57 100644 --- a/app/Domain/Enums/VacationRequestState.php +++ b/app/Domain/Enums/VacationRequestState.php @@ -19,4 +19,38 @@ enum VacationRequestState: string { return __($this->value); } + + public static function pendingStates(): array + { + return [ + self::CREATED, + self::WAITING_FOR_TECHNICAL, + self::WAITING_FOR_ADMINISTRATIVE, + self::ACCEPTED_BY_TECHNICAL, + self::ACCEPTED_BY_ADMINSTRATIVE, + ]; + } + + public static function successStates(): array + { + return [self::APPROVED]; + } + + public static function failedStates(): array + { + return [ + self::REJECTED, + self::CANCELED, + ]; + } + + public static function filterByStatus(string $filter): array + { + return match ($filter) { + "pending" => VacationRequestState::pendingStates(), + "success" => VacationRequestState::successStates(), + "failed" => VacationRequestState::failedStates(), + default => VacationRequestState::cases(), + }; + } } diff --git a/app/Eloquent/Models/VacationRequest.php b/app/Eloquent/Models/VacationRequest.php index 82b7605..528759d 100644 --- a/app/Eloquent/Models/VacationRequest.php +++ b/app/Eloquent/Models/VacationRequest.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Toby\Eloquent\Models; use Database\Factories\VacationRequestFactory; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -54,6 +55,11 @@ class VacationRequest extends Model $this->save(); } + public function scopeStates(Builder $query, array $states): Builder + { + return $query->whereIn("state", $states); + } + protected static function newFactory(): VacationRequestFactory { return VacationRequestFactory::new(); diff --git a/app/Infrastructure/Http/Controllers/VacationRequestController.php b/app/Infrastructure/Http/Controllers/VacationRequestController.php index 29c206c..a19b81b 100644 --- a/app/Infrastructure/Http/Controllers/VacationRequestController.php +++ b/app/Infrastructure/Http/Controllers/VacationRequestController.php @@ -7,6 +7,7 @@ namespace Toby\Infrastructure\Http\Controllers; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Inertia\Response; +use Toby\Domain\Enums\VacationRequestState; use Toby\Domain\Enums\VacationType; use Toby\Domain\VacationRequestStateManager; use Toby\Domain\Validation\VacationRequestValidator; @@ -19,16 +20,19 @@ class VacationRequestController extends Controller { public function index(Request $request): Response { - $requests = $request->user() + $vacationRequests = $request->user() ->vacationRequests() + ->latest() + ->states(VacationRequestState::filterByStatus($request->query("status", "all"))) ->paginate(); return inertia("VacationRequest/Index", [ - "requests" => VacationRequestResource::collection($requests), + "requests" => VacationRequestResource::collection($vacationRequests), + "filters" => $request->only("status"), ]); } - public function show(Request $request, VacationRequest $vacationRequest): Response + public function show(VacationRequest $vacationRequest): Response { return inertia("VacationRequest/Show", [ "request" => new VacationRequestResource($vacationRequest), diff --git a/resources/js/Pages/Users/Edit.vue b/resources/js/Pages/Users/Edit.vue index 1b1c96c..6819520 100644 --- a/resources/js/Pages/Users/Edit.vue +++ b/resources/js/Pages/Users/Edit.vue @@ -284,6 +284,7 @@ export default { .transform(data => ({ ...data, employmentForm: data.employmentForm.value, + role: data.role.value, })) .put(`/users/${this.user.id}`) }, diff --git a/resources/js/Pages/VacationRequest/Index.vue b/resources/js/Pages/VacationRequest/Index.vue index 5faa7af..745f0d3 100644 --- a/resources/js/Pages/VacationRequest/Index.vue +++ b/resources/js/Pages/VacationRequest/Index.vue @@ -17,6 +17,17 @@
+ @@ -56,6 +67,7 @@ > Dni urlopu + @@ -65,12 +77,12 @@ class="hover:bg-blumilk-25" > +
- {{ request.name }} - + {{ request.type }} @@ -87,6 +99,11 @@ X + + + +