'Halaman Utama' ]; return view('guest.index', $payload); } public function dataOrder(){ $search = request('search'); $jenis_menu = request('jenis_menu'); $perPage = request()->get('per_page', 12); 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, $perPage){ $query = DB::connection('dbOrderGizi')->table('public.master_paket_menu as mpn')->where('mpn.statusenabled', true); if(!empty($search)){ $query->where('mpn.nama_paket', 'ILIKE', '%' . $search . '%'); } $paginated = $query->select( 'mpn.master_paket_menu_id', 'mpn.nama_paket', 'mpn.foto', 'mpn.harga_public', 'mpn.harga_karyawan', 'mpn.harga_keluarga_pasien', 'mpn.deskripsi', 'mpn.status' )->paginate($perPage); $paketMenuIds = collect($paginated->items())->pluck('master_paket_menu_id')->toArray(); $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_paket_menu_id', $paketMenuIds) ->select('kmd.master_paket_menu_id', 'kd.kategori_diet_id', 'kd.nama_kategori_diet') ->get() ->groupBy('master_paket_menu_id'); $result = collect($paginated->items())->map(function ($paketMenu) use ($klasifikasi) { return [ 'master_paket_menu_id' => $paketMenu->master_paket_menu_id, 'nama' => $paketMenu->nama_paket, 'foto' => $paketMenu->foto, 'jenis_menu' => "paket", 'harga_public' => $paketMenu->harga_public, 'harga_karyawan' => $paketMenu->harga_karyawan, 'harga_keluarga_pasien' => $paketMenu->harga_keluarga_pasien, 'status' => $paketMenu->status, 'deskripsi' => $paketMenu->deskripsi, 'klasifikasiMenu' => isset($klasifikasi[$paketMenu->master_paket_menu_id]) ? $klasifikasi[$paketMenu->master_paket_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(), ] ]); } public function checkout(){ $payload = [ 'title' => 'Checkout ' ]; return view('guest.checkout.checkout_payment', $payload); } public function submitCheckout(){ $dataCart = request()->input('cartResult'); $biodataResult = request()->input('biodataResult'); $totalHarga = request()->input('totalHarga'); DB::beginTransaction(); try { $jenisCustomer = $biodataResult['jenis_customer']; $today = now()->toDateString(); $jumlahHariIni = Order::whereDate('entry_at', $today)->count(); $urutan = $jumlahHariIni + 1; $noOrder = 'TX/CT/GIZI/' . now()->year .'/'. now()->month .'/' . str_pad($urutan, 4, '0', STR_PAD_LEFT); $payloadOrder = [ 'no_order' => $noOrder, 'jenis_customer' => $jenisCustomer, 'nama_pemesan' => $biodataResult['nama_pemesan'], 'jenis_kelamin' => $biodataResult['jenis_kelamin'], 'tanggal_lahir' => $biodataResult['tanggal_lahir'], 'no_wa' => $biodataResult['no_whatsapp'], 'tinggi_badan' => $biodataResult['tinggi_badan'], 'berat_badan' => $biodataResult['berat_badan'], 'nama_pasien' => $biodataResult['nama_pasien'], 'ruang_perawatan' => $biodataResult['ruang_perawatan'], 'no_kamar_perawatan' => $biodataResult['no_kamar'], 'kelas_perawatan' => $biodataResult['kelas_perawatan'], 'bagian_instalasi' => $biodataResult['bagian_instalasi'], 'no_ekstensien' => $biodataResult['no_ekstensien'], 'total_harga' => $totalHarga, 'status_order' => "Pending" ]; $order = Order::create($payloadOrder); foreach ($dataCart as $cart) { $payloadOrderDetail = [ 'order_id' => $order->order_id, 'harga_satuan' => $jenisCustomer === "Karyawan RSAB Harapan Kita" ? $cart['harga_karyawan'] : $cart['harga_kp'], ]; foreach ($cart['pesanan'] as $value) { $payloadOrderDetail['jumlah'] = $value['jumlah']; $payloadOrderDetail['tgl_antar'] = $value['tgl']; $payloadOrderDetail['type'] = $value['kategoriPemesanan']; } if($cart['jenis_menu'] === "paket"){ $payloadOrderDetail['master_paket_menu_id'] = $cart['id_menu']; }else{ $payloadOrderDetail['master_menu_id'] = $cart['id_menu']; } OrderDetail::create($payloadOrderDetail); } //code... DB::commit(); return response()->json([ 'status' => true, 'data' => $order, 'message' => 'Data berhasil disimpan' ]); } catch (\Throwable $th) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Data gagal disimpan ' . $th->getMessage() ]); } } public function finishCheckout(){ DB::beginTransaction(); try { $noOrder = request('no_order_result'); $evidence = request()->file('bukti_pembayaran'); $order = Order::where('no_order', $noOrder)->first(); // Simpan file ke storage $path = $evidence->store('bukti_pembayaran', 'public'); // Update data order $order->update([ 'bukti_pembayaran' => $path, 'cara_pembayaran' => 'Transfer', 'tgl_pembayaran' => Carbon::now() ]); DB::commit(); session()->flash('payment_success', true); session()->flash('no_order', $noOrder); return response([ 'status' => true, 'message' => 'Terima kasih atas pesanan Anda. Mohon tunggu, kami sedang memprosesnya' ], 200); return back()->with('success', 'Bukti pembayaran berhasil diunggah.'); } catch (\Throwable $th) { DB::rollBack(); return response([ 'status' => false, 'message' => 'Gagal melakukan pesanan!' ], 500); } } public function success(){ if(!session()->has('payment_success')){ return redirect('/'); } $payload = [ 'title' => 'Berhasil Melakukan Pembayaran ', 'no_order' => session('no_order') ]; return view('guest.success_page', $payload); } }