validasiService = $validasiService; $this->middleware('cekrole:admin'); } public function index(Request $request) { $query = ValidasiRekomendasi::with(['makananPakar', 'waktuMakan', 'komponen']); // Filter berdasarkan hari if ($request->has('hari')) { $query->where('hari', $request->hari); } // Filter berdasarkan waktu makan if ($request->has('waktu_makan_id')) { $query->where('waktu_makan_id', $request->waktu_makan_id); } $validasi = $query->get(); $waktuMakans = WaktuMakan::all(); // Hitung statistik $total = $validasi->count(); $lebihBaik = $validasi->where('status_kecocokan', 'lebih_baik')->count(); $setara = $validasi->where('status_kecocokan', 'setara')->count(); $lebihBuruk = $validasi->where('status_kecocokan', 'lebih_buruk')->count(); $persentaseCocok = $total > 0 ? (($lebihBaik + $setara) / $total) * 100 : 0; return view('admin.validasi.index', compact( 'validasi', 'waktuMakans', 'total', 'lebihBaik', 'setara', 'lebihBuruk', 'persentaseCocok' )); } public function bandingkan() { try { $hasil = $this->validasiService->bandingkanRekomendasi(); return redirect() ->route('validasi.index') ->with('success', 'Validasi berhasil dilakukan. Persentase kecocokan: ' . number_format($hasil['statistik']['persentase_cocok'], 2) . '%'); } catch (\Exception $e) { return redirect() ->route('validasi.index') ->with('error', 'Terjadi kesalahan saat melakukan validasi: ' . $e->getMessage()); } } public function exportExcel() { $validasi = ValidasiRekomendasi::with(['makananPakar', 'waktuMakan', 'komponen']) ->get() ->map(function($item) { $makananSistemNames = collect($item->makanan_sistem_ids) ->map(function($id) { $makanan = Makanan::find($id); return $makanan ? $makanan->nama : 'Makanan tidak ditemukan'; }) ->implode(', '); return [ 'Hari' => $item->hari, 'Waktu Makan' => $item->waktuMakan->nama, 'Komponen' => $item->komponen->nama, 'Makanan Pakar' => $item->makananPakar->nama, 'Makanan Sistem' => $makananSistemNames, 'Status Kecocokan' => $this->formatStatusKecocokan($item->status_kecocokan) ]; }); // TODO: Implementasi export Excel menggunakan maatwebsite/excel // Untuk sementara return view dengan data return view('admin.validasi.export', compact('validasi')); } private function formatStatusKecocokan($status) { return match($status) { 'lebih_baik' => '✅ Lebih Baik', 'setara' => '⚠️ Setara', 'lebih_buruk' => '❌ Lebih Buruk', default => $status }; } }