search; $aduan = AduanTps::with('lokasiTps') ->when($search, function ($query) use ($search) { $query->whereHas('lokasiTps', function ($q) use ($search) { $q->where('nama_tps', 'like', '%' . $search . '%'); }); }) ->orderBy('tanggal_aduan', 'desc') ->paginate(10); return view('admin.aduan.index', compact('aduan')); } /** * Detail aduan */ public function show($id) { $aduan = AduanTps::findOrFail($id); return view('admin.aduan.edit', compact('aduan')); } /** * Simpan tanggapan admin */ public function tanggapi(Request $request, $id) { $request->validate([ 'tanggapan_admin' => 'required|string|min:5|max:1000' ], [ 'tanggapan_admin.required' => 'Tanggapan admin wajib diisi.', 'tanggapan_admin.min' => 'Tanggapan minimal 5 karakter.', 'tanggapan_admin.max' => 'Tanggapan maksimal 1000 karakter.', ]); $aduan = AduanTps::findOrFail($id); $aduan->tanggapan_admin = $request->tanggapan_admin; $aduan->tanggal_tanggapan = now(); $aduan->save(); return redirect()->route('admin.aduan.index') ->with('success', 'Tanggapan berhasil disimpan'); } /** * Hapus aduan */ public function destroy($id) { $aduan = AduanTps::findOrFail($id); // Hapus foto bukti dari storage if ($aduan->bukti_foto && Storage::disk('public')->exists($aduan->bukti_foto)) { Storage::disk('public')->delete($aduan->bukti_foto); } // Hapus data dari database $aduan->delete(); return redirect()->route('admin.aduan.index') ->with('success', 'Aduan berhasil dihapus'); } }