with(['application', 'user', 'position', 'pusatMengundi', 'saluranMengundi', 'reportsTo.user']) ->when($request->filled('pusat_mengundi_id'), fn ($q) => $q->where('pusat_mengundi_id', $request->integer('pusat_mengundi_id'))) ->when($request->filled('position_id'), fn ($q) => $q->where('position_id', $request->integer('position_id'))) ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))); return view('admin.management.assignments.index', [ 'assignments' => $this->sortedQuery($query, ['status', 'assigned_at'], 'id', 'desc') ->paginate(15) ->withQueryString(), 'positions' => Position::query()->orderBy('sort_order')->orderBy('name')->get(), 'pusats' => PusatMengundi::query()->orderBy('name')->get(), 'filters' => $request->only(['pusat_mengundi_id', 'position_id', 'status']), ]); } public function edit(StaffAssignment $assignment): View { $ktmPosition = Position::query()->where('code', 'KTM')->first(); return view('admin.management.assignments.edit', [ 'assignment' => $assignment->load(['application', 'user', 'election.settings', 'position', 'pusatMengundi', 'saluranMengundi', 'reportsTo.user', 'histories']), 'positions' => Position::query()->where('is_assignable', true)->orderBy('sort_order')->orderBy('name')->get(), 'pusats' => PusatMengundi::query()->with('election')->orderBy('name')->get(), 'salurans' => SaluranMengundi::query()->with('pusatMengundi')->orderBy('number')->get(), 'ktmAssignments' => $ktmPosition ? StaffAssignment::query() ->with(['user', 'pusatMengundi', 'saluranMengundi']) ->where('position_id', $ktmPosition->id) ->where('status', 'active') ->where('id', '!=', $assignment->id) ->whereNotNull('saluran_mengundi_id') ->orderByDesc('id') ->get() : collect(), ]); } public function update(UpdateStaffAssignmentRequest $request, StaffAssignment $assignment, AdminAssignmentManagementService $service): RedirectResponse { $service->update($assignment, $request->user(), $request->validated()); return redirect()->route('admin.management.assignments.edit', $assignment) ->with('status', 'Tugasan staf telah dikemas kini.'); } }