assignmentsFor($request->user()); $assignmentIds = $assignments->pluck('id'); return view('ktm.applications.index', [ 'assignments' => $assignments, 'applications' => $this->sortedQuery( Application::query() ->with(['pusatMengundi', 'requestedPosition', 'approvedPosition', 'selectedKtmAssignment.saluranMengundi']) ->whereIn('selected_ktm_assignment_id', $assignmentIds), ['name', 'status', 'created_at'], 'created_at', 'desc' )->paginate(15)->withQueryString(), 'vacancyService' => $vacancyService, ]); } public function create(Request $request, KtmScopeService $scopeService, RegistrationPeriodService $registrationPeriodService): View { $assignments = $scopeService->assignmentsFor($request->user()); return view('ktm.applications.create', [ 'assignments' => $assignments, 'registrationOpenByAssignment' => $assignments ->mapWithKeys(fn (StaffAssignment $assignment): array => [ $assignment->id => $registrationPeriodService->isOpen($this->assignmentElection($assignment)), ]) ->all(), ]); } public function store(RegisterKpApplicantRequest $request, KtmApplicationService $service): RedirectResponse { $assignment = StaffAssignment::query()->findOrFail($request->validated('ktm_assignment_id')); $application = $service->registerKp($assignment, $request->user(), $request->validated()); return redirect() ->route('ktm.applications.show', $application->public_uuid) ->with('status', 'Rekod KP telah didaftarkan dan emel makluman telah dihantar.'); } public function show(Application $application, Request $request, KtmScopeService $scopeService): View { abort_unless($scopeService->canAccessApplication($request->user(), $application), 403); return view('ktm.applications.show', [ 'application' => $application->load([ 'pusatMengundi', 'requestedPosition', 'approvedPosition', 'selectedKtmAssignment.user', 'selectedKtmAssignment.saluranMengundi', 'staffAssignments.position', 'statusHistories.changedBy', ]), ]); } public function approve(Application $application, Request $request, KtmApplicationService $service): RedirectResponse { $service->approveKp($application, $request->user()); return redirect() ->route('ktm.applications.show', $application->public_uuid) ->with('status', 'Permohonan KP telah diluluskan dan diassign kepada team anda.'); } public function destroy(Application $application, Request $request, KtmApplicationService $service): RedirectResponse { $service->deleteCreatedApplication($application, $request->user()); return redirect() ->route('ktm.applications.index') ->with('status', 'Rekod KTM-created telah dipadam. Pemohon kini boleh mendaftar sendiri.'); } private function assignmentElection(StaffAssignment $assignment): Election { /** @var Election $election */ $election = $assignment->election()->with('settings')->firstOrFail(); return $election; } }