get("status", "all"); $vacationRequests = $request->user() ->vacationRequests() ->with("vacations") ->where("year_period_id", $yearPeriodRetriever->selected()->id) ->latest() ->states(VacationRequestStatesRetriever::filterByStatus($status)) ->paginate(); return inertia("VacationRequest/Index", [ "requests" => VacationRequestResource::collection($vacationRequests), "filters" => [ "status" => $status, ], ]); } public function show(Request $request, VacationRequest $vacationRequest): Response { $user = $request->user(); return inertia("VacationRequest/Show", [ "request" => new VacationRequestResource($vacationRequest), "activities" => VacationRequestActivityResource::collection($vacationRequest->activities), "can" => [ "acceptAsTechnical" => $vacationRequest->state->canTransitionTo(AcceptedByTechnical::class) && $user === Role::TechnicalApprover, "acceptAsAdministrative" => $vacationRequest->state->canTransitionTo(AcceptedByAdministrative::class) && $user === Role::AdministrativeApprover, "reject" => $vacationRequest->state->canTransitionTo(Rejected::class) && in_array($user->role, [Role::TechnicalApprover, Role::AdministrativeApprover], true), "cancel" => $vacationRequest->state->canTransitionTo(Cancelled::class) && $user === Role::AdministrativeApprover, ], ]); } public function download(VacationRequest $vacationRequest): LaravelResponse { $pdf = PDF::loadView("pdf.vacation-request", [ "vacationRequest" => $vacationRequest, ]); return $pdf->stream(); } public function create(): Response { $users = User::query() ->orderBy("last_name") ->orderBy("first_name") ->get(); return inertia("VacationRequest/Create", [ "vacationTypes" => VacationType::casesToSelect(), "users" => UserResource::collection($users), ]); } public function store( VacationRequestRequest $request, VacationRequestValidator $vacationRequestValidator, VacationRequestStateManager $stateManager, VacationDaysCalculator $vacationDaysCalculator, ): RedirectResponse { /** @var VacationRequest $vacationRequest */ $vacationRequest = $request->user()->createdVacationRequests()->make($request->data()); $vacationRequestValidator->validate($vacationRequest); $vacationRequest->save(); $days = $vacationDaysCalculator->calculateDays( $vacationRequest->yearPeriod, $vacationRequest->from, $vacationRequest->to, ); foreach ($days as $day) { $vacationRequest->vacations()->create([ "date" => $day, "user_id" => $vacationRequest->user->id, "year_period_id" => $vacationRequest->yearPeriod->id, ]); } $stateManager->markAsCreated($vacationRequest, $request->user()); return redirect() ->route("vacation.requests.show", $vacationRequest) ->with("success", __("Vacation request has been created.")); } public function reject( Request $request, VacationRequest $vacationRequest, VacationRequestStateManager $stateManager, ): RedirectResponse { $stateManager->reject($vacationRequest, $request->user()); return redirect()->back() ->with("success", __("Vacation request has been rejected.")); } public function cancel( Request $request, VacationRequest $vacationRequest, VacationRequestStateManager $stateManager, ): RedirectResponse { $stateManager->cancel($vacationRequest, $request->user()); return redirect()->back() ->with("success", __("Vacation request has been cancelled.")); } public function acceptAsTechnical( Request $request, VacationRequest $vacationRequest, VacationRequestStateManager $stateManager, ): RedirectResponse { $stateManager->acceptAsTechnical($vacationRequest, $request->user()); return redirect()->back() ->with("success", __("Vacation request has been accepted.")); } public function acceptAsAdministrative( Request $request, VacationRequest $vacationRequest, VacationRequestStateManager $stateManager, ): RedirectResponse { $stateManager->acceptAsAdministrative($vacationRequest, $request->user()); return redirect()->back() ->with("success", __("Vacation request has been accepted.")); } }