diff --git a/app/Domain/VacationRequestStatesRetriever.php b/app/Domain/VacationRequestStatesRetriever.php
index f4caeb8..0f26cf6 100644
--- a/app/Domain/VacationRequestStatesRetriever.php
+++ b/app/Domain/VacationRequestStatesRetriever.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Toby\Domain;
+use Toby\Domain\Enums\Role;
use Toby\Domain\States\VacationRequest\AcceptedByAdministrative;
use Toby\Domain\States\VacationRequest\AcceptedByTechnical;
use Toby\Domain\States\VacationRequest\Approved;
@@ -12,6 +13,7 @@ use Toby\Domain\States\VacationRequest\Created;
use Toby\Domain\States\VacationRequest\Rejected;
use Toby\Domain\States\VacationRequest\WaitingForAdministrative;
use Toby\Domain\States\VacationRequest\WaitingForTechnical;
+use Toby\Eloquent\Models\User;
class VacationRequestStatesRetriever
{
@@ -39,6 +41,16 @@ class VacationRequestStatesRetriever
];
}
+ public static function waitingForUserActionStates(User $user): array
+ {
+ return match ($user->role) {
+ Role::AdministrativeApprover => [WaitingForAdministrative::class],
+ Role::TechnicalApprover => [WaitingForTechnical::class],
+ Role::Administrator => [WaitingForAdministrative::class, WaitingForTechnical::class],
+ default => [],
+ };
+ }
+
public static function all(): array
{
return [
@@ -48,12 +60,13 @@ class VacationRequestStatesRetriever
];
}
- public static function filterByStatusGroup(string $filter): array
+ public static function filterByStatusGroup(string $filter, ?User $user = null): array
{
return match ($filter) {
"pending" => self::pendingStates(),
"success" => self::successStates(),
"failed" => self::failedStates(),
+ "waiting_for_action" => self::waitingForUserActionStates($user),
default => self::all(),
};
}
diff --git a/app/Infrastructure/Http/Controllers/DashboardController.php b/app/Infrastructure/Http/Controllers/DashboardController.php
index f7b6fef..2dc3bed 100644
--- a/app/Infrastructure/Http/Controllers/DashboardController.php
+++ b/app/Infrastructure/Http/Controllers/DashboardController.php
@@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Inertia\Response;
+use Toby\Domain\Enums\Role;
use Toby\Domain\UserVacationStatsRetriever;
use Toby\Domain\VacationRequestStatesRetriever;
use Toby\Eloquent\Models\Holiday;
@@ -35,10 +36,18 @@ class DashboardController extends Controller
)
->get();
- $vacationRequests = VacationRequest::query()
- ->latest("updated_at")
- ->limit(3)
- ->get();
+ if ($user->role !== Role::Employee) {
+ $vacationRequests = VacationRequest::query()
+ ->states(VacationRequestStatesRetriever::waitingForUserActionStates($user))
+ ->latest("updated_at")
+ ->limit(3)
+ ->get();
+ } else {
+ $vacationRequests = $user->vacationRequests()
+ ->latest("updated_at")
+ ->limit(3)
+ ->get();
+ }
$holidays = Holiday::query()
->whereDate("date", ">=", $now)
diff --git a/app/Infrastructure/Http/Controllers/VacationRequestController.php b/app/Infrastructure/Http/Controllers/VacationRequestController.php
index 10cb697..84ce8e5 100644
--- a/app/Infrastructure/Http/Controllers/VacationRequestController.php
+++ b/app/Infrastructure/Http/Controllers/VacationRequestController.php
@@ -40,7 +40,7 @@ class VacationRequestController extends Controller
->with("vacations")
->where("year_period_id", $yearPeriodRetriever->selected()->id)
->latest()
- ->states(VacationRequestStatesRetriever::filterByStatusGroup($status))
+ ->states(VacationRequestStatesRetriever::filterByStatusGroup($status, $request->user()))
->paginate();
return inertia("VacationRequest/Index", [
@@ -67,7 +67,7 @@ class VacationRequestController extends Controller
->with(["user", "vacations"])
->where("year_period_id", $yearPeriod->id)
->when($user !== null, fn(Builder $query) => $query->where("user_id", $user))
- ->when($status !== null, fn(Builder $query) => $query->states([$status]))
+ ->when($status !== null, fn(Builder $query) => $query->states(VacationRequestStatesRetriever::filterByStatusGroup($status, $request->user())))
->latest()
->paginate();
diff --git a/app/Infrastructure/Http/Resources/UserResource.php b/app/Infrastructure/Http/Resources/UserResource.php
index 2428f7f..8d0263c 100644
--- a/app/Infrastructure/Http/Resources/UserResource.php
+++ b/app/Infrastructure/Http/Resources/UserResource.php
@@ -16,7 +16,8 @@ class UserResource extends JsonResource
"id" => $this->id,
"name" => $this->fullName,
"email" => $this->email,
- "role" => $this->role->label(),
+ "displayRole" => $this->role->label(),
+ "role" => $this->role,
"position" => $this->position,
"avatar" => $this->getAvatar(),
"deleted" => $this->trashed(),
diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue
index 51730f8..a42ff35 100644
--- a/resources/js/Pages/Dashboard.vue
+++ b/resources/js/Pages/Dashboard.vue
@@ -11,7 +11,6 @@
- {{ user.role }} + {{ user.displayRole }}
+ {{ request.from }} - {{ request.to }} +
++ {{ request.user.name }} +
++ {{ request.user.email }} +
+{{ request.user.name }} -
+ {{ request.user.email }} +