MIF_E31230680/app/Http/Controllers/VerifikasiController.php

117 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Warga;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class VerifikasiController extends Controller
{
/**
* Menampilkan daftar warga (Antrean & Riwayat)
*/
/**
* Menampilkan daftar warga (Antrean & Riwayat)
*/
public function verifikasiIndex(Request $request)
{
// Menangkap request parameter
$tab = $request->query('tab', 'pending');
$perPage = $request->query('per_page', 10);
$search = $request->query('search'); // Menangkap kata kunci pencarian
// Inisialisasi Query dasar
$query = Warga::query();
// 1. Filter berdasarkan Tab (Antrean / Riwayat)
if ($tab == 'riwayat') {
$query->with('verifikator')
->whereIn('status_verifikasi', ['setuju', 'tolak'])
->latest('updated_at');
} else {
$query->where('status_verifikasi', 'pending')
->latest();
}
// 2. Logika Pencarian (Search)
if (!empty($search)) {
$query->where(function ($q) use ($search) {
$q->where('nama', 'LIKE', "%{$search}%")
->orWhere('nik', 'LIKE', "%{$search}%");
});
}
// 3. Eksekusi Paginate
$wargas = $query->paginate($perPage);
// Appends berguna agar saat pindah halaman/tab, parameter tidak hilang
$wargas->appends([
'tab' => $tab,
'per_page' => $perPage,
'search' => $search
]);
return view('verifikator.index', compact('wargas', 'tab', 'perPage', 'search'));
}
/**
* Menampilkan detail dokumen dan kriteria warga
*/
public function verifikasiShow($id)
{
$warga = Warga::with(['details.kriteria', 'details.subKriteria', 'verifikator'])->findOrFail($id);
return view('verifikator.show', compact('warga'));
}
/**
* Menyimpan keputusan verifikator SATUAN (Setuju/Tolak)
*/
public function verifikasiProses(Request $request, $id)
{
$request->validate([
'status' => 'required|in:setuju,tolak',
'catatan' => 'nullable|string|max:500',
]);
$warga = Warga::findOrFail($id);
$warga->update([
'status_verifikasi' => $request->status,
'catatan' => $request->catatan,
'verified_by' => Auth::id(), // Menyimpan ID verifikator
]);
$pesan = $request->status == 'setuju' ? 'Data berhasil disetujui!' : 'Data telah ditolak.';
return redirect()->route('verifikasi.index', ['tab' => 'pending'])->with('success', $pesan);
}
/**
* Menyimpan keputusan verifikator MASSAL (Setuju/Tolak)
*/
public function verifikasiMassal(Request $request)
{
$request->validate([
'warga_ids' => 'required|array|min:1',
'action' => 'required|in:setuju,tolak',
], [
'warga_ids.required' => 'Pilih minimal satu data warga untuk diverifikasi massal.',
]);
// Update banyak data sekaligus
Warga::whereIn('id', $request->warga_ids)->update([
'status_verifikasi' => $request->action,
'catatan' => 'Diverifikasi secara massal oleh sistem.',
'verified_by' => Auth::id(),
'updated_at' => now(),
]);
$jumlah = count($request->warga_ids);
$pesan = $request->action == 'setuju' ? "$jumlah data berhasil disetujui massal!" : "$jumlah data ditolak massal.";
return redirect()->route('verifikasi.index', ['tab' => 'pending'])->with('success', $pesan);
}
}