gastrosaw/app/Http/Controllers/LaporanController.php

80 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Laporan;
use App\Models\Makanan;
class LaporanController extends Controller
{
public function index(Request $request)
{
$query = Laporan::query();
if ($request->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'));
}
}