with(['ibadah:id,nama', 'pencatat:id,name']) ->orderByDesc('tanggal_bantuan') ->get() ->map(fn($b) => [ 'id' => $b->id, 'jenis_bantuan' => $b->jenis_bantuan, 'keterangan' => $b->keterangan, 'tanggal_bantuan' => $b->tanggal_bantuan->format('d/m/Y'), 'ibadah_nama' => $b->ibadah?->nama, 'pencatat_nama' => $b->pencatat?->name ?? 'Sistem', ]); return response()->json($bantuan); } public function store(Request $request, string $idRumah) { RumahMiskin::findOrFail($idRumah); $validated = $request->validate([ 'jenis_bantuan' => 'required|string|max:255', 'keterangan' => 'nullable|string', 'tanggal_bantuan' => 'required|date', 'ibadah_id' => 'nullable|integer|exists:rumah_ibadah,id', ]); $bantuan = RiwayatBantuan::create([ 'id_rumah' => $idRumah, 'dicatat_oleh' => auth()->id(), ...$validated, ]); ActivityLog::record('create', "Catat bantuan: {$bantuan->jenis_bantuan} → {$idRumah}", 'bantuan', $bantuan->id); return response()->json(['success' => true, 'data' => $bantuan]); } public function destroy(string $idRumah, int $id) { $bantuan = RiwayatBantuan::where('id_rumah', $idRumah)->findOrFail($id); $jenis = $bantuan->jenis_bantuan; $bantuan->delete(); ActivityLog::record('delete', "Hapus riwayat bantuan: {$jenis} ({$idRumah})", 'bantuan', $id); return response()->json(['success' => true]); } }