Files
prn2026/app/Http/Controllers/Admin/Management/StaffAssignmentController.php
2026-06-03 08:51:22 +08:00

69 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\Management;
use App\Http\Concerns\SortsQuery;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Management\UpdateStaffAssignmentRequest;
use App\Models\Position;
use App\Models\PusatMengundi;
use App\Models\SaluranMengundi;
use App\Models\StaffAssignment;
use App\Services\Admin\Management\AdminAssignmentManagementService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class StaffAssignmentController extends Controller
{
use SortsQuery;
public function index(Request $request): View
{
$query = StaffAssignment::query()
->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.');
}
}