This commit is contained in:
Adrian Hopek
2022-02-02 10:37:16 +01:00
parent 3ebc391b83
commit 9a7ee2f5d3
5 changed files with 97 additions and 6 deletions

View File

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

View File

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

View File

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