diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 0c9b23b..b747b34 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -44,7 +44,6 @@ class CustomerController extends Controller $payloadHari = range($tanggal_awal, $tanggal_akhir); } } - // Step 1: Ambil menu_id yang sesuai tanggal $menuIdTanggalValid = []; if (!empty($payloadHari)) { @@ -54,10 +53,6 @@ class CustomerController extends Controller ->pluck('master_menu_id') ->unique() ->toArray(); - // Jika tidak ada menu di tanggal tersebut, return kosong langsung - if (empty($menuIdTanggalValid)) { - return self::emptyMenuResponse($perPage); - } } // Step 2: Query menu $menuQuery = DB::connection('dbOrderGizi') @@ -71,11 +66,21 @@ class CustomerController extends Controller if (!empty($search)) { $menuQuery->where('mn.nama_menu', 'ILIKE', '%' . $search . '%'); } + $menuQuery->where(function ($q) use ($menuIdTanggalValid, $payloadHari) { + if (!empty($menuIdTanggalValid)) { + // Jika ada filter tanggal: tampilkan menu sesuai tanggal atau yang someday + $q->whereIn('mn.master_menu_id', $menuIdTanggalValid) + ->orWhere('mn.apakah_someday', true); + }else if($payloadHari){ + $q->where('mn.apakah_someday', true); + } + // Jika TIDAK ada tanggal, tidak perlu where apapun — biarkan tampil semua menu + }); - if (!empty($menuIdTanggalValid)) { - $menuQuery->whereIn('mn.master_menu_id', $menuIdTanggalValid); - } - $paginated = $menuQuery->select( + // } + + + $menuItems = $menuQuery->select( 'mn.master_menu_id', 'mn.nama_menu', 'mn.foto', @@ -88,9 +93,9 @@ class CustomerController extends Controller 'mn.apakah_someday', 'mn.apakah_menu_siang', 'mn.apakah_menu_sore', - )->paginate($perPage); + )->get(); - $menuIds = collect($paginated->items())->pluck('master_menu_id')->toArray(); + $menuIds = $menuItems->pluck('master_menu_id')->toArray(); if (empty($menuIds)) { return self::emptyMenuResponse($perPage); @@ -104,11 +109,17 @@ class CustomerController extends Controller ->select('kmd.master_menu_id', 'kd.kategori_diet_id', 'kd.nama_kategori_diet') ->get() ->groupBy('master_menu_id'); - $dmph = DB::connection('dbOrderGizi') ->table('public.detail_menu_paket_harian as dmph') ->whereIn('dmph.master_menu_id', $menuIds) ->select('dmph.master_menu_id', 'dmph.tgl_harian') + // ->orderByRaw(" + // CASE + // WHEN tgl_harian >= ? THEN 0 + // ELSE 1 + // END, + // tgl_harian ASC + // ", [$today]) ->get() ->groupBy('master_menu_id'); $kkal = DB::connection('dbOrderGizi') @@ -120,8 +131,7 @@ class CustomerController extends Controller ->groupBy('master_menu_id'); // Step 4: Transform response - $result = collect($paginated->items())->map(function ($menu) use ($klasifikasi, $dmph, $kkal) { - + $enriched = $menuItems->map(function ($menu) use ($klasifikasi, $dmph, $kkal) { return [ 'master_menu_id' => $menu->master_menu_id, 'nama' => $menu->nama_menu, @@ -154,17 +164,43 @@ class CustomerController extends Controller ]; }); + // Urutkan: someday → tgl_harian terdekat + $sorted = $enriched->sortBy(function ($menu) { + $hariIni = now()->day; + $isSomeday = $menu['apakah_someday'] ? 0 : 1; + + if ($menu['apakah_someday']) { + return [0, 0]; + } + + $tglTerdekat = collect($menu['dmph'])->pluck('tgl_harian') + ->map(function ($tgl) use ($hariIni) { + return $tgl >= $hariIni ? $tgl : $tgl + 31; + }) + ->sort() + ->first() ?? 99; + + return [$isSomeday, $tglTerdekat]; + })->values(); + + // Paginate manual (setelah sort) + $total = $sorted->count(); + $currentPage = request()->get('page', 1); + $offset = ($currentPage - 1) * $perPage; + $pagedData = $sorted->slice($offset, $perPage)->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(), + 'data' => $pagedData, + 'current_page' => (int) $currentPage, + 'last_page' => (int) ceil($total / $perPage), + 'per_page' => (int) $perPage, + 'total' => $total, ] ]); + } private static function emptyMenuResponse($perPage) @@ -381,6 +417,7 @@ class CustomerController extends Controller ], 200); return back()->with('success', 'Bukti pembayaran berhasil diunggah.'); } catch (\Throwable $th) { + dd($th); DB::rollBack(); return response([ 'status' => false, diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 407f9e1..322e881 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -40,9 +40,6 @@ class DashboardController extends Controller 'o.note_dibatalkan', 'od.status_order as detail_status_order') ->get()->groupBy('order_id'); - - - $grouped = $data->map(function($items){ $first = $items->first(); $totalDetail = $items->count(); diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php index 981c0d9..c88ba79 100644 --- a/app/Http/Controllers/PesananController.php +++ b/app/Http/Controllers/PesananController.php @@ -350,6 +350,14 @@ class PesananController extends Controller return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf'); } + public function countPesananPending(){ + $count = Order::where('statusenabled', true)->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing'])->count(); + return response()->json([ + 'status' => true, + 'count' => $count, + ]); + } + public function downloadLabel(Request $request){ $items = $request->input('items'); diff --git a/public/js/checkout/index.js b/public/js/checkout/index.js index 8a43dad..56de014 100644 --- a/public/js/checkout/index.js +++ b/public/js/checkout/index.js @@ -44,7 +44,12 @@ document.addEventListener('DOMContentLoaded', () => { }else if(currentStep === 1){ const {isValid, errorMessage} =validateCartBeforeSubmit(); if (!isValid) { - alert(errorMessage); + Swal.fire({ + title: 'Perhatian!', + text: errorMessage, + icon: 'warning', + confirmButtonText: 'Oke' + }) return } let checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}'); @@ -285,8 +290,21 @@ function renderCartSummary() { ? item.harga_karyawan || 0 : item.harga_public || 0; const itemTotal = pesananList.reduce((sum, p) => sum + (p.jumlah * harga), 0); - totalKeseluruhan += itemTotal; + console.log(checkout_biodata); + if (checkout_biodata.jenis_customer === "Karyawan RSAB Harapan Kita") { + $('#karyawan').addClass('d-none'); + $('#pasien').removeClass('d-none'); + } else if (checkout_biodata.jenis_customer === "Keluarga Pasien / Penunggu Pasien") { + $('#karyawan').removeClass('d-none'); + $('#pasien').addClass('d-none'); + } else { + $('#karyawan').addClass('d-none'); + $('#pasien').addClass('d-none'); + } + + + totalKeseluruhan += itemTotal; pesananList.forEach((p, i) => { const selectedDate = new Date(p.tgl); const now = new Date(); @@ -296,6 +314,9 @@ function renderCartSummary() { const disableSore = isToday && jam >= 13; const countDate = pesananList.length; + if(checkout_biodata.jenis_customer === 'Karyawan RSAB Harapan Kita'){ + $("#karywan").re + } pesananHTML += `