This commit is contained in:
Saufi
2026-06-03 08:51:22 +08:00
commit a14d43fe34
347 changed files with 38197 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
<?php
namespace App\Http\Controllers\Ppm;
use App\Http\Controllers\Controller;
use App\Http\Requests\Ppm\RecordAttendanceRequest;
use App\Models\PusatMengundi;
use App\Models\StaffAssignment;
use App\Services\Attendance\AttendanceRecordingService;
use App\Services\Attendance\AttendanceSummaryService;
use App\Services\Ppm\PpmScopeService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Illuminate\View\View;
class AttendanceController extends Controller
{
public function index(Request $request, PpmScopeService $scopeService, AttendanceSummaryService $summaryService): View
{
$pusatIds = $scopeService->assignedPusatIds($request->user());
$pusats = PusatMengundi::query()
->with(['election.settings'])
->whereIn('id', $pusatIds)
->orderBy('name')
->get();
return view('ppm.attendance.index', [
'pusats' => $pusats,
'summaryService' => $summaryService,
]);
}
public function show(PusatMengundi $pusatMengundi, Request $request, PpmScopeService $scopeService, AttendanceSummaryService $summaryService): View
{
if (! $scopeService->assignedPusatIds($request->user())->contains((int) $pusatMengundi->id)) {
abort(403);
}
$assignments = StaffAssignment::query()
->with(['application', 'user', 'position', 'saluranMengundi', 'attendance'])
->where('pusat_mengundi_id', $pusatMengundi->id)
->where('status', 'active')
->orderBy('position_id')
->orderBy('saluran_mengundi_id')
->get();
return view('ppm.attendance.show', [
'pusat' => $pusatMengundi->load('election.settings'),
'assignments' => $assignments,
'summary' => $summaryService->totalsForPusat($pusatMengundi),
]);
}
public function store(PusatMengundi $pusatMengundi, RecordAttendanceRequest $request, AttendanceRecordingService $service): RedirectResponse
{
try {
$service->recordBulk($pusatMengundi, $request->user(), $request->validated('attendance'));
} catch (ValidationException $exception) {
throw $exception;
}
return redirect()->route('ppm.attendance.show', $pusatMengundi)
->with('status', 'Kehadiran telah direkodkan.');
}
}