order_gizi/app/Http/Controllers/CustomerController.php
2025-07-22 05:56:06 +07:00

179 lines
7.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CustomerController extends Controller
{
public function index(){
$payload = [
'title' => '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 = json_decode(request('cart_data'), true);
dd(request()->all());
}
}