load(['dun', 'election', 'saluranMengundis']); $ppmPosition = Position::query()->where('code', 'PPM')->first(); $ppmAssignment = $ppmPosition ? StaffAssignment::query() ->with('application') ->where('pusat_mengundi_id', $pusatMengundi->id) ->where('position_id', $ppmPosition->id) ->where('status', 'active') ->whereNull('saluran_mengundi_id') ->first() : null; return view('admin.management.penempatan.show', [ 'pusat' => $pusatMengundi, 'ppm' => $ppmAssignment, 'sections' => $service->detailForPusat($pusatMengundi), ]); } public function lepas(Request $request, PusatMengundi $pusatMengundi, StaffAssignment $assignment): RedirectResponse { abort_unless($assignment->pusat_mengundi_id === $pusatMengundi->id, 404); $assignment->update([ 'status' => 'inactive', 'assigned_by_user_id' => $request->user()->id, ]); activity('admin_management') ->performedOn($assignment) ->causedBy($request->user()) ->log('assignment_removed_by_admin'); return redirect()->route('admin.management.penempatan.show', $pusatMengundi) ->with('status', 'Petugas telah dilepaskan dari tugasan.'); } public function pindahForm(PusatMengundi $pusatMengundi, StaffAssignment $assignment): View { abort_unless($assignment->pusat_mengundi_id === $pusatMengundi->id, 404); return view('admin.management.penempatan.pindah', [ 'pusat' => $pusatMengundi, 'assignment' => $assignment->load(['application', 'position', 'saluranMengundi']), 'pusats' => PusatMengundi::query()->with('election')->orderBy('code')->get(), 'salurans' => SaluranMengundi::query() ->where('pusat_mengundi_id', $pusatMengundi->id) ->orderBy('number') ->get(), ]); } public function pindah(Request $request, PusatMengundi $pusatMengundi, StaffAssignment $assignment): RedirectResponse { abort_unless($assignment->pusat_mengundi_id === $pusatMengundi->id, 404); $data = $request->validate([ 'pusat_mengundi_id' => ['required', 'exists:pusat_mengundis,id'], 'saluran_mengundi_id' => ['nullable', 'exists:saluran_mengundis,id'], ]); $newPusat = PusatMengundi::query()->findOrFail($data['pusat_mengundi_id']); $assignment->update([ 'pusat_mengundi_id' => $newPusat->id, 'saluran_mengundi_id' => $data['saluran_mengundi_id'] ?? null, 'assigned_by_user_id' => $request->user()->id, 'assigned_at' => now(), ]); // Update linked application's pusat too if ($assignment->application) { $assignment->application->forceFill(['pusat_mengundi_id' => $newPusat->id])->save(); } activity('admin_management') ->performedOn($assignment) ->causedBy($request->user()) ->withProperties([ 'from_pusat_id' => $pusatMengundi->id, 'to_pusat_id' => $newPusat->id, ]) ->log('assignment_transferred_by_admin'); return redirect()->route('admin.management.penempatan.show', $newPusat) ->with('status', 'Petugas telah dipindahkan ke '.$newPusat->name.'.'); } }