155 lines
6.2 KiB
PHP
155 lines
6.2 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('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);
|
|
}
|
|
}
|