user()->hasRole('pracownik')) { $query->where('user_id', $request->user()->id); } $search = trim((string) $request->query('search', '')); if ($search !== '') { $query->where(function ($query) use ($search) { $query->whereHas('user', function ($userQuery) use ($search) { $userQuery->where('name', 'like', "%{$search}%") ->orWhere('surname', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%"); })->orWhereHas('type', function ($typeQuery) use ($search) { $typeQuery->where('name', 'like', "%{$search}%"); })->orWhere('amount', 'like', "%{$search}%"); }); } if ($request->filled('type')) { $query->where('advance_type_id', $request->integer('type')); } if ($request->filled('date_from')) { $query->whereDate('date', '>=', $request->query('date_from')); } if ($request->filled('date_to')) { $query->whereDate('date', '<=', $request->query('date_to')); } $advances = $query->orderByDesc('date')->orderByDesc('id')->paginate(10)->withQueryString(); $types = AdvanceType::orderBy('name')->get(); return view('zaliczki', compact('advances', 'types')); } public function create() { $types = AdvanceType::orderBy('name')->get(); $users = request()->user()->hasRole('pracownik') ? collect() : User::orderBy('name')->orderBy('surname')->get(); return view('zaliczki.create', compact('types', 'users')); } public function store(StoreAdvanceRequest $request) { Advance::create([ 'date' => $request->validated('date'), 'amount' => $request->validated('amount'), 'advance_type_id' => $request->validated('advance_type_id'), 'user_id' => $request->validated('user_id'), ]); return redirect()->route('zaliczki')->with('status', 'Zaliczka została dodana.'); } public function edit(Request $request, Advance $advance) { $this->authorizeAccess($request, $advance); $types = AdvanceType::orderBy('name')->get(); $users = $request->user()->hasRole('pracownik') ? collect() : User::orderBy('name')->orderBy('surname')->get(); return view('zaliczki.edit', compact('advance', 'types', 'users')); } public function update(StoreAdvanceRequest $request, Advance $advance) { $this->authorizeAccess($request, $advance); $advance->update($request->validated()); return redirect()->route('zaliczki')->with('status', 'Zaliczka została zaktualizowana.'); } public function destroy(Request $request, Advance $advance) { $this->authorizeAccess($request, $advance); $advance->delete(); return redirect()->route('zaliczki')->with('status', 'Zaliczka została usunięta.'); } private function authorizeAccess(Request $request, Advance $advance): void { abort_if($request->user()->hasRole('pracownik') && $advance->user_id !== $request->user()->id, 403); } }