'Halaman Utama' ]; return view('guest.index', $payload); } public function dataOrder(){ $search = request('search'); $jenis_menu = request('jenis_menu'); $perPage = request()->get('perPage', 1); if($jenis_menu === "paket"){ return self::dataPaketMenuOrder($search, $perPage); } return self::menuOrder($search, $jenis_menu, $perPage); } private static function menuOrder($search = null, $jenis_menu = null, $perPage) { // Step 1: Ambil ID menu sesuai filter $menuQuery = DB::connection('dbOrderGizi') ->table('public.master_menu as mn') ->where('mn.statusenabled', true); if (!empty($jenis_menu)) { $menuQuery->where('mn.jenis_menu', 'ILIKE', '%' . $jenis_menu . '%'); } if (!empty($search)) { $menuQuery->where('mn.nama_menu', 'ILIKE', '%' . $search . '%'); } $paginated = $menuQuery ->select( 'mn.master_menu_id', 'mn.nama_menu', 'mn.foto', 'mn.jenis_menu', 'mn.harga_public', 'mn.harga_karyawan', 'mn.harga_keluarga_pasien', 'mn.status', 'mn.deskripsi' ) ->paginate($perPage); $menuIds = collect($paginated->items())->pluck('master_menu_id')->toArray(); // Step 2: Ambil semua klasifikasi untuk menu tersebut $klasifikasi = DB::connection('dbOrderGizi') ->table('public.klasifikasi_menu_diet as kmd') ->join('public.kategori_diet as kd', 'kd.kategori_diet_id', '=', 'kmd.kategori_diet_id') ->whereIn('kmd.master_menu_id', $menuIds) ->select('kmd.master_menu_id', 'kd.kategori_diet_id', 'kd.nama_kategori_diet') ->get() ->groupBy('master_menu_id'); // Step 3: Gabungkan data menu + klasifikasi $result = collect($paginated->items())->map(function ($menu) use ($klasifikasi) { return [ 'master_menu_id' => $menu->master_menu_id, 'nama' => $menu->nama_menu, 'foto' => $menu->foto, 'jenis_menu' => $menu->jenis_menu, 'harga_public' => $menu->harga_public, 'harga_karyawan' => $menu->harga_karyawan, 'harga_keluarga_pasien' => $menu->harga_keluarga_pasien, 'status' => $menu->status, 'deskripsi' => $menu->deskripsi, 'klasifikasiMenu' => isset($klasifikasi[$menu->master_menu_id]) ? $klasifikasi[$menu->master_menu_id]->map(function ($item) { return [ 'kategori_diet_id' => $item->kategori_diet_id, 'nama_kategori_diet' => $item->nama_kategori_diet, ]; })->values() : [], ]; }); return response()->json([ 'status' => true, 'message' => 'Berhasil mendapatkan data', 'data' => [ 'data' => $result, 'current_page' => $paginated->currentPage(), 'last_page' => $paginated->lastPage(), 'per_page' => $paginated->perPage(), 'total' => $paginated->total(), ] ]); } private static function dataPaketMenuOrder($search = null){ $query = DB::connection('dbOrderGizi')->table('public.master_paket_menu as mpn') ->leftJoin('public.master_paket_menu_detail as mpd', 'mpd.master_paket_menu_id', '=', 'mpn.master_paket_menu_id') ->leftJoin('public.master_menu as mn', 'mpd.master_menu_id', '=', 'mn.master_menu_id') ->leftJoin('public.klasifikasi_menu_diet as kmd', 'kmd.master_paket_menu_id', '=', 'mpn.master_paket_menu_id') ->leftJoin('public.kategori_diet as kd', 'kd.kategori_diet_id', '=', 'kmd.kategori_diet_id') ->select('mpn.*', 'mpd.master_paket_menu_detail_id', 'mn.master_menu_id', 'kmd.klasifikasi_menu_diet', 'kd.*') ->where('mpn.statusenabled', true); if(!empty($search)){ $query->where(function($q) use($search){ $q->where('mpn.nama_paket', 'ILIKE', '%' . $search . '%') ->orWhere('kd.nama_kategori_diet', 'ILIKE', '%'. $search . '%'); }); } $paketMenu = $query->get(); $grouped = $paketMenu->groupBy('master_paket_menu_id')->map(function($items){ $first = $items->first(); $klasifikasiMenu = $items->filter(fn($d) => $d->kategori_diet_id !== null) ->unique('kategori_diet_id') ->map(function($items) { return [ 'kategori_diet_id' => $items->kategori_diet_id, 'nama_kategori_diet'=> $items->nama_kategori_diet ]; })->values(); return [ 'master_paket_menu_id' => $first->master_paket_menu_id, 'nama' => $first->nama_paket, 'foto' => $first->foto, 'jenis_menu' => "paket", 'harga_public' => $first->harga_public, 'harga_karyawan' => $first->harga_karyawan, 'harga_keluarga_pasien' => $first->harga_keluarga_pasien, 'status' => $first->status, 'deskripsi' => $first->deskripsi, 'klasifikasiMenu' => $klasifikasiMenu ]; })->values(); return response()->json([ 'status' => true, 'message' => 'Berhasil mendapatkan data', 'data' => $grouped ], 200); } }