first
This commit is contained in:
66
app/Http/Controllers/Ppm/AttendanceController.php
Normal file
66
app/Http/Controllers/Ppm/AttendanceController.php
Normal 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.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user