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, ], ]); } /** * @throws AuthorizationException */ public function show(Request $request, VacationRequest $vacationRequest): Response { $this->authorize("show", $vacationRequest); $user = $request->user(); return inertia("VacationRequest/Show", [ "request" => new VacationRequestResource($vacationRequest), "activities" => VacationRequestActivityResource::collection($vacationRequest->activities), "can" => [ "acceptAsTechnical" => $vacationRequest->state->canTransitionTo(AcceptedByTechnical::class) && $user->can("acceptAsTechApprover", $vacationRequest), "acceptAsAdministrative" => $vacationRequest->state->canTransitionTo(AcceptedByAdministrative::class) && $user->can("acceptAsAdminApprover", $vacationRequest), "reject" => $vacationRequest->state->canTransitionTo(Rejected::class) && $user->can("reject", $vacationRequest), "cancel" => $vacationRequest->state->canTransitionTo(Cancelled::class) && $user->can("cancel", $vacationRequest), ], ]); } /** * @throws AuthorizationException */ public function download(VacationRequest $vacationRequest): LaravelResponse { $this->authorize("show", $vacationRequest); $pdf = PDF::loadView("pdf.vacation-request", [ "vacationRequest" => $vacationRequest, ]); return $pdf->stream(); } public function create(Request $request): Response { $users = User::query() ->orderBy("last_name") ->orderBy("first_name") ->get(); return inertia("VacationRequest/Create", [ "vacationTypes" => VacationType::casesToSelect(), "users" => UserResource::collection($users), "can" => [ "createOnBehalfOfEmployee" => $request->user()->can("createOnBehalfOfEmployee", VacationRequest::class), "skipFlow" => $request->user()->can("skipFlow", VacationRequest::class), ], ]); } /** * @throws AuthorizationException * @throws ValidationException */ public function store( VacationRequestRequest $request, VacationRequestValidator $vacationRequestValidator, VacationRequestStateManager $stateManager, VacationDaysCalculator $vacationDaysCalculator, ): RedirectResponse { if ($request->createsOnBehalfOfEmployee()) { $this->authorize("createOnBehalfOfEmployee", VacationRequest::class); } if ($request->wantsSkipFlow()) { $this->authorize("skipFlow", VacationRequest::class); } /** @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.")); } /** * @throws AuthorizationException */ public function reject( Request $request, VacationRequest $vacationRequest, VacationRequestStateManager $stateManager, ): RedirectResponse { $this->authorize("reject", $vacationRequest); $stateManager->reject($vacationRequest, $request->user()); return redirect()->back() ->with("success", __("Vacation request has been rejected.")); } /** * @throws AuthorizationException */ public function cancel( Request $request, VacationRequest $vacationRequest, VacationRequestStateManager $stateManager, ): RedirectResponse { $this->authorize("cancel", $vacationRequest); $stateManager->cancel($vacationRequest, $request->user()); return redirect()->back() ->with("success", __("Vacation request has been cancelled.")); } /** * @throws AuthorizationException */ public function acceptAsTechnical( Request $request, VacationRequest $vacationRequest, VacationRequestStateManager $stateManager, ): RedirectResponse { $this->authorize("acceptAsTechApprover", $vacationRequest); $stateManager->acceptAsTechnical($vacationRequest, $request->user()); return redirect()->back() ->with("success", __("Vacation request has been accepted.")); } /** * @throws AuthorizationException */ public function acceptAsAdministrative( Request $request, VacationRequest $vacationRequest, VacationRequestStateManager $stateManager, ): RedirectResponse { $this->authorize("acceptAsAdminApprover", $vacationRequest); $stateManager->acceptAsAdministrative($vacationRequest, $request->user()); return redirect()->back() ->with("success", __("Vacation request has been accepted.")); } }