108 lines
4.0 KiB
PHP
108 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin\Management;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Position;
|
|
use App\Models\PusatMengundi;
|
|
use App\Models\SaluranMengundi;
|
|
use App\Models\StaffAssignment;
|
|
use App\Services\Admin\Management\PennempatanService;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\View\View;
|
|
|
|
class PennempatanController extends Controller
|
|
{
|
|
public function show(PusatMengundi $pusatMengundi, PennempatanService $service): View
|
|
{
|
|
$pusatMengundi->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.'.');
|
|
}
|
|
}
|