117 lines
3.6 KiB
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);
|
|
}
|
|
}
|