This commit is contained in:
Adrian Hopek
2022-03-07 13:05:49 +01:00
parent 5d64ad9d2a
commit b2f08f61b7
10 changed files with 137 additions and 59 deletions

View File

@@ -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(),
};
}

View File

@@ -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)

View File

@@ -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();

View File

@@ -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(),