validate(['search' => ['nullable', 'string', 'max:100']]); return Inertia::render('approvals/index', [ 'reservations' => Reservation::query() ->with(['requester:id,name,email,department', 'items.asset:id,name,asset_tag,category_name']) ->whereIn('status', [ReservationStatus::PendingApproval, ReservationStatus::AwaitingInformation]) ->when($filters['search'] ?? null, fn ($query, string $search) => $query ->where(fn ($query) => $query ->where('reference', 'like', "%{$search}%") ->orWhereHas('requester', fn ($query) => $query->where('name', 'like', "%{$search}%")))) ->oldest('starts_at') ->paginate(20) ->withQueryString(), 'filters' => $filters, ]); } public function approve(Request $request, Reservation $reservation, ApprovalService $service): RedirectResponse { $data = $request->validate(['comment' => ['nullable', 'string', 'max:1000']]); $service->approve($reservation, $request->user(), $data['comment'] ?? null); return back()->with('success', "Requisição {$reservation->reference} aprovada."); } public function reject(Request $request, Reservation $reservation, ApprovalService $service): RedirectResponse { $data = $request->validate(['comment' => ['required', 'string', 'min:5', 'max:1000']]); $service->reject($reservation, $request->user(), $data['comment']); return back()->with('success', "Requisição {$reservation->reference} rejeitada."); } public function requestInformation(Request $request, Reservation $reservation, ApprovalService $service): RedirectResponse { $data = $request->validate(['comment' => ['required', 'string', 'min:5', 'max:1000']]); $service->requestInformation($reservation, $request->user(), $data['comment']); return back()->with('success', "Pedido de esclarecimentos enviado para {$reservation->reference}."); } }