filled('nama_pasien')) { $query->where('nama_pasien', 'like', '%' . $request->nama_pasien . '%'); } if ($request->filled('tanggal_dari')) { $query->whereDate('created_at', '>=', $request->tanggal_dari); } if ($request->filled('tanggal_sampai')) { $query->whereDate('created_at', '<=', $request->tanggal_sampai); } $laporan = $query->latest() ->paginate(10) ->withQueryString(); return view('laporan.index', compact('laporan')); } public function detail($id) { $laporan = Laporan::findOrFail($id); $hasil = []; if (!empty($laporan->hasil_json)) { $decoded = json_decode($laporan->hasil_json, true); $hasil = collect($decoded)->map(function($item) { return [ 'nama_makanan' => $item['nama_makanan'] ?? ($item['makanan']['nama_makanan'] ?? 'Tanpa Nama'), // Tambahkan pengecekan fallback jika tersimpan di dalam nested array 'makanan' 'porsi_saji' => $item['porsi_saji'] ?? ($item['makanan']['porsi_saji'] ?? '-'), 'cara_pengolahan' => $item['cara_pengolahan'] ?? ($item['makanan']['cara_pengolahan'] ?? '-'), 'alternatif_serupa' => $item['alternatif_serupa'] ?? ($item['makanan']['alternatif_serupa'] ?? '-'), 'karbohidrat' => $item['karbohidrat'] ?? ($item['makanan']['karbohidrat'] ?? 0), 'lemak' => $item['lemak'] ?? ($item['kandungan_lemak'] ?? 0), 'serat' => $item['serat'] ?? ($item['kandungan_serat'] ?? 0), 'kalori' => $item['kalori'] ?? ($item['makanan']['kalori'] ?? 0), 'protein' => $item['protein'] ?? ($item['makanan']['protein'] ?? 0), 'skor' => $item['skor'] ?? 0, ]; })->sortByDesc('skor')->values()->all(); } return view('laporan.detail', compact('laporan', 'hasil')); } public function destroy($id) { $laporan = Laporan::findOrFail($id); $laporan->delete(); return redirect() ->route('laporan.index') ->with('success', 'Data laporan berhasil dihapus'); } public function cetak($id) { $laporan = \App\Models\Laporan::with('pasien')->findOrFail($id); return view('laporan.cetak', compact('laporan')); } }