first
This commit is contained in:
107
app/Http/Controllers/Admin/Management/PennempatanController.php
Normal file
107
app/Http/Controllers/Admin/Management/PennempatanController.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?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.'.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user