#62 - wip
This commit is contained in:
@@ -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(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user