with('error', 'Gagal: Belum ada data warga di database untuk diexport.'); } return Excel::download(new WargaExport, 'Data-Warga.xlsx'); } public function index() { $warga = Warga::with('wilayah')->latest()->paginate(10); return view('admin.warga.index', compact('warga')); } public function create() { $wilayah = Wilayah::orderBy('dusun')->orderBy('rw')->get(); return view('admin.warga.create', compact('wilayah')); } public function store(Request $request) { $request->validate([ 'nik' => 'required|digits:16|unique:warga,nik', 'nama' => 'required|string|max:100', 'alamat' => 'required|string', 'wilayah_id' => 'required|exists:wilayah,id', 'rt' => 'nullable|string|max:5', 'no_telp' => 'nullable|string|max:15', ], [ 'nik.required' => 'NIK wajib diisi.', 'nik.digits' => 'NIK harus berupa angka dengan panjang tepat 16 digit.', 'nik.unique' => 'NIK sudah terdaftar di sistem.', 'nama.required' => 'Nama lengkap wajib diisi.', 'nama.string' => 'Nama lengkap harus berupa teks.', 'nama.max' => 'Nama lengkap maksimal 100 karakter.', 'alamat.required' => 'Alamat wajib diisi.', 'wilayah_id.required' => 'Wilayah wajib dipilih.', 'wilayah_id.exists' => 'Wilayah yang dipilih tidak valid.', ]); // Ambil koordinat & info dari wilayah yang dipilih $wilayah = Wilayah::findOrFail($request->wilayah_id); Warga::create([ 'nik' => $request->nik, 'nama' => $request->nama, 'alamat' => $request->alamat, 'wilayah_id' => $wilayah->id, 'dusun' => $wilayah->dusun, 'rw' => $wilayah->rw, 'rt' => $request->rt, 'no_telp' => $request->no_telp, 'latitude' => $wilayah->latitude, 'longitude' => $wilayah->longitude, // ✅ FIX: Warga baru SELALU aktif (tidak ada checkbox di form create) 'is_aktif' => true, ]); return redirect()->route('admin.warga.index') ->with('success', 'Data warga berhasil ditambahkan.'); } public function show(Warga $warga) { return view('admin.warga.show', compact('warga')); } public function edit(Warga $warga) { $wilayah = Wilayah::orderBy('dusun')->orderBy('rw')->get(); return view('admin.warga.edit', compact('warga', 'wilayah')); } public function update(Request $request, Warga $warga) { $request->validate([ 'nik' => 'required|digits:16|unique:warga,nik,' . $warga->id, 'nama' => 'required|string|max:100', 'alamat' => 'required|string', 'wilayah_id' => 'required|exists:wilayah,id', 'rt' => 'nullable|string|max:5', 'no_telp' => 'nullable|string|max:15', ], [ 'nik.required' => 'NIK wajib diisi.', 'nik.digits' => 'NIK harus berupa angka dengan panjang tepat 16 digit.', 'nik.unique' => 'NIK sudah terdaftar di sistem.', 'nama.required' => 'Nama lengkap wajib diisi.', 'nama.string' => 'Nama lengkap harus berupa teks.', 'nama.max' => 'Nama lengkap maksimal 100 karakter.', 'alamat.required' => 'Alamat wajib diisi.', 'wilayah_id.required' => 'Wilayah wajib dipilih.', 'wilayah_id.exists' => 'Wilayah yang dipilih tidak valid.', ]); $wilayah = Wilayah::findOrFail($request->wilayah_id); $warga->update([ 'nik' => $request->nik, 'nama' => $request->nama, 'alamat' => $request->alamat, 'wilayah_id' => $wilayah->id, 'dusun' => $wilayah->dusun, 'rw' => $wilayah->rw, 'rt' => $request->rt, 'no_telp' => $request->no_telp, 'latitude' => $wilayah->latitude, 'longitude' => $wilayah->longitude, // ✅ FIX BUG: Checkbox tidak tercentang = null, bukan false // Gunakan has() untuk cek apakah checkbox ada di request 'is_aktif' => $request->has('is_aktif') ? true : false, ]); return redirect()->route('admin.warga.index') ->with('success', 'Data warga berhasil diperbarui.'); } public function destroy(Warga $warga) { $warga->delete(); return redirect()->route('admin.warga.index') ->with('success', 'Data warga berhasil dihapus.'); } }