From c1dfa20b0f8bd77051cef73769914f84de5ed73b Mon Sep 17 00:00:00 2001 From: JokoPrasetio Date: Tue, 12 Aug 2025 17:24:34 +0700 Subject: [PATCH] progress report --- app/Http/Controllers/CustomerController.php | 102 ++++--- app/Http/Controllers/PesananController.php | 267 +++++++++++++++- app/Models/Order.php | 3 +- app/Models/OrderDetail.php | 3 + app/Providers/AppServiceProvider.php | 4 +- config/mail.php | 4 + public/asset_guests/css/main.css | 46 ++- public/js/checkout/action.js | 1 - public/js/checkout/index.js | 8 +- public/js/count/konfirmasiPesanan.js | 57 ++-- public/js/laporan_pesanan/_init.js | 4 + public/js/laporan_pesanan/action.js | 125 ++++++++ public/js/laporan_pesanan/dt.js | 192 ++++++++++++ public/js/menu/action.js | 8 +- public/js/menu/dt.js | 2 +- public/js/order_guest/index.js | 132 ++++---- public/js/pekerjaan/action.js | 1 + public/js/pekerjaan/dt.js | 64 ++-- public/js/pesanan_pending/_init.js | 4 + public/js/pesanan_pending/action.js | 6 +- .../pesanan_pending/action_progres_order.js | 25 +- public/js/pesanan_pending/dt.js | 20 +- public/js/pesanan_pending/of_dt.js | 288 ++++++++++++++++++ public/js/pesanan_selesai/detail_order.js | 12 +- public/js/semua_pesanan/_init.js | 3 + public/js/semua_pesanan/action.js | 115 +++++++ public/js/semua_pesanan/dt.js | 194 ++++++++++++ public/logo/logo_rsabhk.png | Bin 0 -> 76361 bytes resources/views/dashboard/index.blade.php | 56 ++-- .../dashboard/master/menu/modal/add.blade.php | 7 +- .../master/menu/modal/edit.blade.php | 7 +- .../dashboard/partials/sidenav.blade.php | 53 +++- .../pesanan/components/infoPesanan.blade.php | 24 ++ .../pesanan/components/modalExport.blade.php | 70 +++++ .../pesanan/laporan/pesanan/index.blade.php | 56 ++++ .../pesanan/pekerjaan/modal/export.blade.php | 11 +- .../dashboard/pesanan/pekerjaan/pdf.blade.php | 50 ++- .../dashboard/pesanan/pending/index.blade.php | 10 + .../pending/modal/actionPekerjaan.blade.php | 29 ++ .../modal/actionProgressPesanan.blade.php | 3 - .../pesanan/pending/modal/detail.blade.php | 26 ++ .../pesanan/pending/modal/export.blade.php | 13 +- .../offcanvas/konfirmasiPesanan.blade.php | 41 +++ .../dashboard/pesanan/pending/pdf.blade.php | 28 +- .../pesanan/selesai/modal/export.blade.php | 11 +- .../dashboard/pesanan/selesai/pdf.blade.php | 26 +- .../dashboard/pesanan/semua/index.blade.php | 76 +++++ .../views/guest/check_order/index.blade.php | 1 + .../views/guest/checkout/step/step2.blade.php | 12 +- .../views/guest/checkout/step/step3.blade.php | 4 + resources/views/guest/index.blade.php | 23 +- .../guest/layout/partials/header.blade.php | 4 +- routes/web.php | 12 +- 53 files changed, 2034 insertions(+), 309 deletions(-) create mode 100644 public/js/laporan_pesanan/_init.js create mode 100644 public/js/laporan_pesanan/action.js create mode 100644 public/js/laporan_pesanan/dt.js create mode 100644 public/js/pesanan_pending/of_dt.js create mode 100644 public/js/semua_pesanan/_init.js create mode 100644 public/js/semua_pesanan/action.js create mode 100644 public/js/semua_pesanan/dt.js create mode 100644 public/logo/logo_rsabhk.png create mode 100644 resources/views/dashboard/pesanan/components/infoPesanan.blade.php create mode 100644 resources/views/dashboard/pesanan/components/modalExport.blade.php create mode 100644 resources/views/dashboard/pesanan/laporan/pesanan/index.blade.php create mode 100644 resources/views/dashboard/pesanan/pending/modal/actionPekerjaan.blade.php create mode 100644 resources/views/dashboard/pesanan/pending/modal/detail.blade.php create mode 100644 resources/views/dashboard/pesanan/pending/offcanvas/konfirmasiPesanan.blade.php create mode 100644 resources/views/dashboard/pesanan/semua/index.blade.php diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index d3cfec4..57bfb7e 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -113,13 +113,6 @@ class CustomerController extends Controller ->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') @@ -130,38 +123,63 @@ class CustomerController extends Controller ->get() ->groupBy('master_menu_id'); - // Step 4: Transform response - $enriched = $menuItems->map(function ($menu) use ($klasifikasi, $dmph, $kkal) { - 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, - 'apakah_someday' => $menu->apakah_someday, - 'apakah_menu_sore' => $menu->apakah_menu_sore, - 'apakah_menu_siang' => $menu->apakah_menu_siang, - '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() : [], - 'dmph' => isset($dmph[$menu->master_menu_id]) ? $dmph[$menu->master_menu_id]->map(function ($item) { - return [ - 'tgl_harian' => $item->tgl_harian - ]; - })->values() : [], - 'kalori' => isset($kkal[$menu->master_menu_id]) ? $kkal[$menu->master_menu_id]->map(function ($item) { - return [ - 'nilai_kalori' => $item->nilai_kalori, - ]; - })->values() : [], - ]; + function buildGroupLabel($tglList, $isSomeday){ + if($isSomeday) return 'Menu Sameday'; + + if(empty($tglList)) return '-'; + $days = collect($tglList)->map(fn($t) => substr($t, -2)) + ->unique() + ->sort() + ->values(); + $groups = []; + foreach ($days as $d) { + $lastDigit = substr($d, -1); + $groups[$lastDigit][] = $d; + } + // buat label + $labels = []; + foreach ($groups as $list) { + $labels[] = 'Menu Normal Tersedia Tanggal ' . implode(',', $list); + } + return implode(' & ', $labels); + } + // Step 4: Transform response + $enriched = $menuItems->map(function ($menu) use ($klasifikasi, $dmph, $kkal) { + + $tglList = isset($dmph[$menu->master_menu_id]) ? collect($dmph[$menu->master_menu_id])->pluck('tgl_harian')->toArray() : []; + + $groupLabel = buildGroupLabel($tglList, $menu->apakah_someday); + 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, + 'apakah_someday' => $menu->apakah_someday, + 'apakah_menu_sore' => $menu->apakah_menu_sore, + 'apakah_menu_siang' => $menu->apakah_menu_siang, + 'group_label' => $groupLabel, + '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() : [], + 'dmph' => isset($dmph[$menu->master_menu_id]) ? $dmph[$menu->master_menu_id]->map(function ($item) { + return [ + 'tgl_harian' => $item->tgl_harian + ]; + })->values() : [], + 'kalori' => isset($kkal[$menu->master_menu_id]) ? $kkal[$menu->master_menu_id]->map(function ($item) { + return [ + 'nilai_kalori' => $item->nilai_kalori, + ]; + })->values() : [], + ]; }); // Urutkan: someday → tgl_harian terdekat @@ -374,6 +392,7 @@ class CustomerController extends Controller try { $noOrder = request('no_order_result'); + $medical_record = request('medical_record'); $evidence = request()->file('bukti_pembayaran'); $caraPembayaran = request('cara_pembayaran'); @@ -402,6 +421,7 @@ class CustomerController extends Controller }else{ $payload['cara_pembayaran'] = 'Billing'; $payload['status_order'] = 'Menunggu Konfirmasi Pembayaran Via Billing'; + $payload['medical_record'] = $medical_record ?? null; } // Update data order $order->update($payload); @@ -438,7 +458,7 @@ class CustomerController extends Controller } public function checkOrder(){ - + $payload = [ 'title' => 'Check Order' ]; @@ -460,6 +480,7 @@ class CustomerController extends Controller 'od.tgl_antar', 'od.harga_satuan', 'od.status_order as status_order_detail', + 'od.catatan', DB::raw("COALESCE(mm.nama_menu, mpm.nama_paket) as nama_item"), DB::raw("COALESCE(mm.foto, mpm.foto) as foto"), ) @@ -504,6 +525,7 @@ class CustomerController extends Controller 'jumlah' => $item->jumlah, 'harga_satuan' => $item->harga_satuan, 'status_order' => $item->status_order_detail, + 'catatan' => $item->catatan ?? '-' // tambahkan field tambahan jika diperlukan ]; })->values(), diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php index c88ba79..1565c26 100644 --- a/app/Http/Controllers/PesananController.php +++ b/app/Http/Controllers/PesananController.php @@ -11,6 +11,8 @@ use Illuminate\Http\Request; use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Mail; +use PhpOffice\PhpSpreadsheet\Spreadsheet; +use PhpOffice\PhpSpreadsheet\Writer\Xlsx; class PesananController extends Controller { @@ -42,6 +44,7 @@ class PesananController extends Controller "DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")", $tanggalFormatted ) + ->whereIn('o.status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing']) ->select( 'o.order_id', 'o.entry_at', @@ -53,6 +56,7 @@ class PesananController extends Controller 'o.total_harga', 'o.bukti_pembayaran', 'o.note_dibatalkan', + 'o.medical_record', 'od.status_order as detail_status_order' )->get()->groupBy('order_id'); $grouped = $orders->map(function($items){ @@ -70,6 +74,7 @@ class PesananController extends Controller 'status_order' => $first->status_order, 'cara_pembayaran' => $first->cara_pembayaran, 'bukti_pembayaran' => $first->bukti_pembayaran, + 'medical_record' => $first->medical_record, 'progress' => $progress, 'total_detail' => $totalDetail, 'selesai_detail' => $selesaiDetail, @@ -249,7 +254,7 @@ class PesananController extends Controller } public function getPekerjaan(){ - $data = OrderDetail::with(['menu', 'paketMenu', 'order'])->whereHas('order', function($q){ + $data = OrderDetail::with(['menu', 'paketMenu', 'order', 'karbohidrat'])->whereHas('order', function($q){ $q->where('status_order', 'Lunas'); }); $tanggal = request('tanggal'); @@ -280,7 +285,7 @@ class PesananController extends Controller $startDate = request('start_date'); $endDate = request('end_date'); $now = Carbon::now()->format('Y-m-d H-i'); - $orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order'])->whereHas('order', function($q){ + $orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order', 'karbohidrat'])->whereHas('order', function($q){ $q->where('status_order', 'Lunas'); })->whereBetween('tgl_antar', [$startDate, $endDate])->get(); $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); @@ -303,15 +308,14 @@ class PesananController extends Controller $order = Order::where('statusenabled', true) ->whereBetween('entry_at', [$startDate, $endDate]) ->with('orderDetail') - ->whereHas('orderDetail', function($q) { - $q->where('status_order', '!=', 'Selesai'); - }) + ->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing']) ->get(); $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y'); $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y'); $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); $data = [ + 'laporan' => 'LAPORAN KONFIRMASI PESANAN', 'waktu_cetak' => $waktu_cetak, 'orders' => $order, 'startDate' => $startDateFormatted, @@ -350,7 +354,7 @@ class PesananController extends Controller return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf'); } - public function countPesananPending(){ + public function countKonfirmasiPesanan(){ $count = Order::where('statusenabled', true)->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing'])->count(); return response()->json([ 'status' => true, @@ -358,10 +362,255 @@ class PesananController extends Controller ]); } - public function downloadLabel(Request $request){ - $items = $request->input('items'); + public function countVerifikasiPesanan(){ + $count = OrderDetail::where('status_order', 'Pending')->with('order')->whereHas('order', function($q){ + $q->where('status_order', 'Lunas'); + })->count(); + return response()->json([ + 'status' => true, + 'count' => $count, + ]); + } - dd(json_encode($items)); + public function laporanPesanan(){ + $data = [ + 'title' => 'Laporan Pesanan' + ]; + return view('dashboard.pesanan.laporan.pesanan.index', $data); + } + + public function getLaporanPesanan(){ + $tanggal = request('tanggal'); + if(!empty($tanggal)){ + $tanggalFormatted = collect($tanggal)->map(function ($tgl){ + return Carbon::parse($tgl)->toDateString(); + })->toArray(); + }else{ + $tanggalFormatted = [Carbon::now()->toDateString()]; + } + $orders = self::helperLaporanPesanan($tanggalFormatted); + $grouped = $orders->map(function($items){ + $first = $items->first(); + $totalDetail = $items->count(); + $selesaiDetail = $items->where('detail_status_order', 'Selesai')->count(); + $progress = $totalDetail > 0 ? round(($selesaiDetail / $totalDetail) * 100) : 0; + return [ + 'order_id' => $first->order_id, + 'entry_at' => $first->entry_at, + 'no_order' => $first->no_order, + 'nama_pemesan' => $first->nama_pemesan, + 'jenis_customer' => $first->jenis_customer, + 'total_harga' => $first->total_harga, + 'status_order' => $first->status_order, + 'bukti_pembayaran' => $first->bukti_pembayaran, + 'cara_pembayaran' => $first->cara_pembayaran, + 'medical_record' => $first->medical_record, + 'progress' => $progress, + 'total_detail' => $totalDetail, + 'selesai_detail' => $selesaiDetail, + 'note_dibatalkan' => $first->note_dibatalkan, + ]; + }) + ->values(); + return response()->json([ + 'status' => true, + 'rows' => $grouped->values(), + 'total' => $grouped->count() + ]); + } + + + public function helperLaporanPesanan($tanggalFormatted){ + $data = DB::connection('dbOrderGizi')->table('public.order as o') + ->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id') + ->where(['o.statusenabled' => true, 'o.status_order' => 'Lunas']) + ->whereRaw( + "DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")", + $tanggalFormatted + ) + ->select( + 'o.order_id', + 'o.entry_at', + 'o.no_order', + 'o.nama_pemesan', + 'o.jenis_customer', + 'o.total_harga', + 'o.cara_pembayaran', + 'o.status_order', + 'o.bukti_pembayaran', + 'o.note_dibatalkan', + 'o.medical_record', + 'od.status_order as detail_status_order' + )->get()->groupBy('order_id'); + return $data; + } + + public function exportLaporanPesanan(){ + $startDate = Carbon::parse(request('start_date'))->startOfDay(); + $endDate = Carbon::parse(request('end_date'))->endOfDay(); + $type = request('type'); + $type_customer = request('type_customer'); + $query = Order::where('statusenabled', true)->where('status_order', 'Lunas'); + + if($type_customer !== 'all'){ + $query->where('jenis_customer', $type_customer); + } + + $order = $query->whereBetween('entry_at', [$startDate, $endDate])->with('orderDetail')->get(); + + if($type === 'pdf'){ + return $this->pdfPesanan($startDate, $endDate, $order); + }else{ + return $this->excelPesanan($startDate, $endDate, $order); + } + + } + + public function pdfPesanan($startDate, $endDate, $order){ + $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y'); + $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y'); + $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); + $data = [ + 'laporan' => 'Laporan Pesanan', + 'waktu_cetak' => $waktu_cetak, + 'orders' => $order, + 'startDate' => $startDateFormatted, + 'endDate' => $endDateFormatted + ]; + $pdf = Pdf::loadView('dashboard.pesanan.pending.pdf', $data); + + return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf'); + } + + public function excelPesanan($startDate, $endDate, $order){ + $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y'); + $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y'); + $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + + $sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}"); + $sheet->mergeCells('A1:G1'); + $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14); + $sheet->getStyle('A1')->getAlignment()->setHorizontal('center'); + + $sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}"); + $sheet->mergeCells('A2:G2'); + $sheet->getStyle('A2')->getAlignment()->setHorizontal('center'); + + // Header tabel + $headers = ["No", "Nomor Order", "Nama Customer", "Jenis Customer", "Tanggal Pesanan", "Total", "Detail Pesanan"]; + $sheet->fromArray($headers, null, 'A4'); + $sheet->getStyle('A4:G4')->getFont()->setBold(true); + $sheet->getStyle('A4:G4')->getAlignment()->setHorizontal('center'); + $sheet->getStyle('A4:G4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + + // Isi data + $row = 5; + foreach ($order as $index => $item) { + $sheet->setCellValue("A{$row}", $index + 1); + $sheet->setCellValue("B{$row}", $item->no_order); + $sheet->setCellValue("C{$row}", $item->nama_pemesan); + $sheet->setCellValue("D{$row}", $item->jenis_customer); + $sheet->setCellValue("E{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i')); + $sheet->setCellValue("F{$row}", $item->total_harga); + $sheet->setCellValue("G{$row}", $item->orderDetail->map(function ($detail) { + return $detail->nama_menu . ' x' . $detail->jumlah; + })->implode(', ')); + + // Border tiap baris + $sheet->getStyle("A{$row}:G{$row}")->getBorders()->getAllBorders() + ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + + $row++; + } + + // Auto size kolom + foreach(range('A', 'G') as $col){ + $sheet->getColumnDimension($col)->setAutoSize(true); + } + $lastRow = $row - 1; + $sheet->setAutoFilter("A4:P{$lastRow}"); + // Download file + $fileName = 'laporan-pesanan-' . now()->format('Ymd-His') . '.xlsx'; + $writer = new Xlsx($spreadsheet); + + // Output ke browser + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + header("Content-Disposition: attachment; filename=\"{$fileName}\""); + header('Cache-Control: max-age=0'); + + $writer->save('php://output'); + exit; + } + + + public function indexSemua(){ + $payload = [ + 'title' => 'Semua Pesanan', + ]; + return view('dashboard.pesanan.semua.index', $payload); + } + + public function getSemuaPekerjaan(){ + $tanggal = request('tanggal'); + if(!empty($tanggal)){ + $tanggalFormatted = collect($tanggal)->map(function ($tgl){ + return Carbon::parse($tgl)->toDateString(); + })->toArray(); + }else{ + $tanggalFormatted = [Carbon::now()->toDateString()]; + } + $orders = DB::connection('dbOrderGizi')->table('public.order as o') + ->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id') + ->where(['o.statusenabled' => true]) + ->whereRaw( + "DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")", + $tanggalFormatted + ) + ->select( + 'o.order_id', + 'o.entry_at', + 'o.no_order', + 'o.nama_pemesan', + 'o.jenis_customer', + 'o.total_harga', + 'o.cara_pembayaran', + 'o.status_order', + 'o.bukti_pembayaran', + 'o.note_dibatalkan', + 'o.medical_record', + 'od.status_order as detail_status_order' + )->get()->groupBy('order_id'); + + $grouped = $orders->map(function($items){ + $first = $items->first(); + $totalDetail = $items->count(); + $selesaiDetail = $items->where('detail_status_order', 'Selesai')->count(); + $progress = $totalDetail > 0 ? round(($selesaiDetail / $totalDetail) * 100) : 0; + return [ + 'order_id' => $first->order_id, + 'entry_at' => $first->entry_at, + 'no_order' => $first->no_order, + 'nama_pemesan' => $first->nama_pemesan, + 'jenis_customer' => $first->jenis_customer, + 'total_harga' => $first->total_harga, + 'status_order' => $first->status_order, + 'bukti_pembayaran' => $first->bukti_pembayaran, + 'cara_pembayaran' => $first->cara_pembayaran, + 'progress' => $progress, + 'total_detail' => $totalDetail, + 'selesai_detail' => $selesaiDetail, + 'note_dibatalkan' => $first->note_dibatalkan, + ]; + }) + ->values(); + + return response()->json([ + 'status' => true, + 'rows' => $grouped->values(), + 'total' => $grouped->count() + ]); } /** * Show the form for creating a new resource. diff --git a/app/Models/Order.php b/app/Models/Order.php index 537b4db..65db063 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -36,7 +36,8 @@ class Order extends Model 'bagian_instalasi', 'note_dibatalkan', 'email', - 'alamat' + 'alamat', + 'medical_record' ]; protected $cast = [ diff --git a/app/Models/OrderDetail.php b/app/Models/OrderDetail.php index 492f5d9..c90d2ac 100644 --- a/app/Models/OrderDetail.php +++ b/app/Models/OrderDetail.php @@ -31,6 +31,9 @@ class OrderDetail extends Model public function menu(){ return $this->belongsTo(Menu::class, 'master_menu_id', 'master_menu_id')->select('master_menu_id', 'nama_menu', 'foto'); } + public function karbohidrat(){ + return $this->belongsTo(Karbohidrat::class, 'karbohidrat_id', 'karbohidrat_id')->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori'); + } public function paketMenu(){ return $this->belongsTo(PaketMenu::class, 'master_paket_menu_id', 'master_paket_menu_id')->select('master_paket_menu_id', 'nama_paket', 'foto'); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..656b4e6 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -19,6 +20,7 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { - // + Blade::component('dashboard.pesanan.components.modalExport', 'modalExport'); + Blade::component('dashboard.pesanan.components.infoPesanan', 'infoPesanan'); } } diff --git a/config/mail.php b/config/mail.php index 522b284..df6298d 100644 --- a/config/mail.php +++ b/config/mail.php @@ -47,6 +47,10 @@ return [ 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + 'timeout' => null, + 'auth_mode' => null, + 'verify_peer'=> false, + 'auto_tls' => false ], 'ses' => [ diff --git a/public/asset_guests/css/main.css b/public/asset_guests/css/main.css index 65f936e..4e48dca 100644 --- a/public/asset_guests/css/main.css +++ b/public/asset_guests/css/main.css @@ -1897,15 +1897,15 @@ section, /* TOMBOL */ .btn { - font-size: .60rem !important; /* ≈ 10 px */ - padding: .31rem .41rem !important; - border-radius: .25rem !important; + font-size: .7rem !important; + padding: .5rem .25rem !important; + border-radius: .5rem; } - - .d-flex.justify-content-between small { font-size: .65rem; } + .d-flex.justify-content-between small { font-size: .65rem; } .d-flex.justify-content-between strong { font-size: .65rem; } + } /* fallback < 360 px menjadi 1 kolom */ @@ -1925,4 +1925,38 @@ section, #menuBtn:hover { transform: translateX(-50%) translateY(-2px); transition: transform .25s; -} \ No newline at end of file +} + +.btn-loading { + pointer-events: none; + opacity: 0.8; + display: flex; + align-items: center; + justify-content: center; +} + +.btn-loading::after { + content: ""; + border: 2px solid white; + border-top: 2px solid transparent; + border-radius: 50%; + width: 14px; + height: 14px; + animation: spin 0.6s linear infinite; +} + +/* Khusus HP (max 576px) */ +@media (max-width: 576px) { + .btn-loading::after { + width: 10px; + height: 10px; + border-width: 1.5px; + } + .btn-loading { + padding: 4px 8px; /* tombol lebih kecil di HP */ + } +} + +@keyframes spin { + to { transform: rotate(360deg); } +} diff --git a/public/js/checkout/action.js b/public/js/checkout/action.js index 7d6c1d4..2dc891d 100644 --- a/public/js/checkout/action.js +++ b/public/js/checkout/action.js @@ -92,7 +92,6 @@ async function submitOrderToServer(){ }); const result = await response.json(); - console.log(result); if (result.status) { // ✅ Hapus sessionStorage di client diff --git a/public/js/checkout/index.js b/public/js/checkout/index.js index 56de014..8b67931 100644 --- a/public/js/checkout/index.js +++ b/public/js/checkout/index.js @@ -290,7 +290,6 @@ function renderCartSummary() { ? item.harga_karyawan || 0 : item.harga_public || 0; const itemTotal = pesananList.reduce((sum, p) => sum + (p.jumlah * harga), 0); - console.log(checkout_biodata); if (checkout_biodata.jenis_customer === "Karyawan RSAB Harapan Kita") { $('#karyawan').addClass('d-none'); @@ -436,7 +435,7 @@ function renderCartSummary() { : (item.tgl_tersedia ? `Tersedia pada tanggal: ${item.tgl_tersedia}` : 'Tidak ada info tanggal tersedia')}
- Menu: ${item.apakah_someday ? 'Someday' : 'Menu Normal'} + Menu: ${item.apakah_someday ? 'Sameday' : 'Menu Normal'}
${item.kalori ? `
Kalori: ${item.kalori} kkal
` @@ -771,7 +770,7 @@ function initFlatpickrTersedia(item, i) { dayNumbers.forEach(day => { const dayStr = String(day).padStart(2, '0'); const fullDateStr = `${year}-${month}-${dayStr}`; - const fullDate = new Date(`${fullDateStr}T23:00:00`); + const fullDate = new Date(`${fullDateStr}T00:00:00`); // Jika bukan menu someday, cek aturan H-1 dan jam batas if (item.apakah_someday) { @@ -833,14 +832,17 @@ function toggleBuktiPembayaran() { const metode = document.getElementById("cara_pembayaran").value; const buktiSection = document.getElementById("bukti_section"); const buktiInput = document.getElementById("bukti_pembayaran"); + const billing_section = document.getElementById("billing_section"); buktiInput.required = true; if (metode === "billing") { buktiSection.style.display = "none"; + billing_section.style.display = "block"; buktiInput.required = false; $("#modalActionMethodBillingOrder").modal('show') } else { buktiSection.style.display = "block"; + billing_section.style.display = "none"; buktiInput.required = true; $("#modalActionMethodBillingOrder").modal('hide') } diff --git a/public/js/count/konfirmasiPesanan.js b/public/js/count/konfirmasiPesanan.js index b97d290..afa2ead 100644 --- a/public/js/count/konfirmasiPesanan.js +++ b/public/js/count/konfirmasiPesanan.js @@ -1,20 +1,43 @@ -// $(document).ready(function () { -// getReminderOrder(); -// }); +$(document).ready(function () { + getReminderKonfirmasiPesanan(); + getReminderVerifikasiMakanan() +}); -// const getReminderOrder = () => { -// $.ajax({ -// url: `/dashboard/count/pending`, -// success: function (response) { +const getReminderKonfirmasiPesanan = () => { + $.ajax({ + url: `/dashboard/count/konfirmasi-pesanan`, + success: function (response) { + console.log(response); -// const button = document.getElementById("konfirmasi_pesanan"); -// let count = response.count; + const button = document.getElementById("konfirmasi_pesanan"); + let count = response.count; -// button.classList.remove('d-none'); -// if(count === 0){ -// button.classList.add('d-none'); -// } -// button.innerText = count; -// }, -// }); -// }; + button.classList.remove('d-none'); + if(count === 0){ + button.classList.add('d-none'); + } + button.innerText = count; + }, + }); +}; + +const getReminderVerifikasiMakanan = () => { + $.ajax({ + url: `/dashboard/count/verifikasi-pesanan`, + success: function (response) { + console.log(response); + + const button = document.getElementById("verifikasi_makanan"); + const konfirmasiPesanan = document.getElementById("konfirmasi_pesanan_offcanvas"); + let count = response.count; + + button.classList.remove('d-none'); + if(count === 0){ + button.classList.add('d-none'); + konfirmasiPesanan.classList.add('d-none'); + } + button.innerText = count; + konfirmasiPesanan.innerText = count; + }, + }); +}; diff --git a/public/js/laporan_pesanan/_init.js b/public/js/laporan_pesanan/_init.js new file mode 100644 index 0000000..bc71291 --- /dev/null +++ b/public/js/laporan_pesanan/_init.js @@ -0,0 +1,4 @@ +const datatable =$("#datatableLaporanPesanan") +const infoPesanan = document.getElementById('infoPesanan') +const exportLp = document.getElementById('exportLp') +const exportPendapatan = document.getElementById('exportPendapatan') diff --git a/public/js/laporan_pesanan/action.js b/public/js/laporan_pesanan/action.js new file mode 100644 index 0000000..486db80 --- /dev/null +++ b/public/js/laporan_pesanan/action.js @@ -0,0 +1,125 @@ +function fetchDetailOrder(order_id){ + fetch(`/dashboard/pending/action-progress-order/${order_id}`) + .then(res => res.json()) + .then(res => { + const data = res; + document.getElementById('pesanan_container').innerHTML ='' + // Generate HTML untuk order_detail + const detailHTML = (data?.order_detail || []).map(detail => { + return ` +
+
+
+
+ Foto Menu +
+
+

Nama Menu: ${detail?.menu?.nama_menu || '-'}

+

Jumlah: ${detail?.jumlah || 0}

+

Tanggal Pesan: ${detail?.tgl_antar || 0}

+

Harga: Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}

+

Status Pesanan: + + ${detail?.status_order} + +

+

Catatan : ${detail?.catatan || '-'}

+
+
+
+
+ `; + }).join(''); + + const html = ` +
+ + ${data.bukti_pembayaran ? ` +
+
+ Bukti Pembayaran +
Bukti Pembayaran
+
+
` : ''} + + +
+
+
+
${data.nama_pemesan}
+

Jenis Customer: ${data.jenis_customer}

+ + ${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? ` +
+

Nama Pasien: ${data.nama_pasien}

+

Nomor Kamar: ${data.no_kamar_perawatan}

+

Ruang Perawatan: ${data.ruang_perawatan}

+

Kelas Perawatan: ${data.kelas_perawatan}

+
` : data?.jenis_customer === 'Masyarakat Umum' ? ` +
+

Alamat: ${data.alamat || '-'}

+
+ ` : ` +
+

Bagian / Instalasi: ${data.bagian_instalasi}

+

Ekstensien: ${data.no_ekstensien || '-'}

+
+ ` + } +
+ +
+

No Order: ${data.no_order}

+

Metode Pembayaran: ${data.cara_pembayaran}

+ ${data?.cara_pembayaran === 'Billing' ? ` +

No.Medical Record: ${data.medical_record}

+ `: ''} +

Tanggal Pembayaran: ${data.tgl_pembayaran || '-'}

+

Total Harga: Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}

+
+ +
+
+ + ${data.status_order} + +
+
+
+
+
+ + +
+ +
+ ${detailHTML} +
+ `; + + document.getElementById('pesanan_container').innerHTML = html; + + }) + .catch(err => { + document.getElementById('pesanan_container').innerHTML = '

Terjadi kesalahan saat memuat data.

'; + console.error(err); + }); + +} + +function pesananLunas(order_id){ + new bootstrap.Modal(infoPesanan).show(); + fetchDetailOrder(order_id) +} + +function exportLaporanPesanan(){ + new bootstrap.Modal(exportLp).show(); +} + +function exportLaporanPendapatan(){ + new bootstrap.Modal(exportPendapatan).show(); +} diff --git a/public/js/laporan_pesanan/dt.js b/public/js/laporan_pesanan/dt.js new file mode 100644 index 0000000..6973105 --- /dev/null +++ b/public/js/laporan_pesanan/dt.js @@ -0,0 +1,192 @@ + function initDt(selectDate = []){ + datatable.bootstrapTable('destroy') + datatable.bootstrapTable({ + url: "/dashboard/datatable/laporan-pesanan", + method:'get', + queryParams:function(params){ + params.tanggal = selectDate; + return params; + }, + showColumns: true, + showColumnsToggleAll: true, + showRefresh: true, + sortable: true, + search: true, + searchOnEnterKey: false, + searchHighlight: true, + pagination: true, + serverSide:true, + pageSize: 10, + pageList: [10, 20, 30, 40, 50, 100, 200], + cookie: true, + cookieIdTable: "table_rma_ssc_id", + icons: { + refresh: "fas fa-sync-alt", // atau ganti ke icon lain + columns: "fas fa-th-large" + }, + + columns: [ + { + title: "Action", + field:'order_id', + formatter: function(value, row) { + let buttons = '' + if(row?.status_order === "Lunas"){ + buttons += ` + + ` + } + return ` +
+ ${buttons} +
+ `; + } + }, + + { + title: "Pemesan", + field:'nama_pemesan', + sortable: true, + }, + { + title: "No.Order", + field: 'no_order', + sortable: true, + }, + { + title: "Cara Pembayaran", + field: 'cara_pembayaran', + sortable: true, + }, + { + title: "Status Pembayaran", + field: 'status_order', + sortable: true, + formatter: function(value, row) { + const status = value; + let badgeClass = 'bg-secondary'; + if (status === "Belum Bayar") { + badgeClass = 'bg-warning text-dark'; + } else if (status === "Menunggu Konfirmasi Pembayaran") { + badgeClass = 'bg-primary'; + } else if (status === "Lunas" || status === "Sudah Bayar") { + badgeClass = 'bg-success text-dark'; + } else if(status === "Dibatalkan"){ + badgeClass = 'bg-danger'; + } + return ` + ${status} + ${status === 'Dibatalkan' && row.note_dibatalkan ? ` +
+ ${row.note_dibatalkan} +
+ ` : ''} + `; + } + }, + { + title: "Status Pesanan", + formatter: function(value, row) { + const progress = parseInt(row.progress) || 0; + const total = row.total_detail || 0; + const selesai = row.selesai_detail || 0; + + return ` +
+
+
+ ${progress}% +
+
+ ${selesai} / ${total} selesai +
+ `; + }, + sortable: true, + }, + { + title:'Bukti Pembayaran', + formatter: function(value, row){ + if(row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran){ + return ` + + Lihat Bukti + + `; + }else if(row?.cara_pembayaran === 'Billing'){ + return `No.MR: ${row?.medical_record || '-'}`; + } + } + }, + { + title: "Tgl Pemesanan", + field: 'entry_at', + formatter: function(value, row) { + if (!row?.entry_at) return '-'; + + const date = new Date(row.entry_at); + return date.toLocaleString('id-ID', { + day: '2-digit', + month: 'short', // Bisa diganti 'long' kalau mau 'Juli' bukan 'Jul' + year: 'numeric', + hour: '2-digit', + minute: '2-digit', + hour12: false // pakai format 24 jam + }); + }, + sortable: true, + }, + { + title: "Kategori Customer", + field: 'jenis_customer', + sortable: true, + }, + { + title: "Total Harga Pesanan", + field:'total_harga', + formatter: function(value, row){ + return 'Rp ' + parseInt(row.total_harga).toLocaleString('id-ID') + } + } + + ], + }); + } + + document.addEventListener('DOMContentLoaded', function () { + flatpickr('#tanggal', { + dateFormat: "Y-m-d", + mode: "multiple", + locale: "id", // opsional: agar hari/bulan dalam Bahasa Indonesia + onValueUpdate: function(selectedDates, dateStr, instance) { + const selectedFormattedDates = selectedDates.map(d => { + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; + }) + initDt(selectedFormattedDates); + if(selectedFormattedDates.length > 0){ + const tanggalList = selectedFormattedDates; + let tanggalRapi = ''; + if (tanggalList.length === 1) { + tanggalRapi = tanggalList[0]; + } else if (tanggalList.length === 2) { + tanggalRapi = tanggalList.join(' dan '); + } else if (tanggalList.length > 2) { + tanggalRapi = tanggalList.slice(0, -1).join(', ') + ', dan ' + tanggalList.slice(-1); + } + $("#confirm_laporan_pesanan").text(': '+ tanggalRapi) + }else{ + $("#confirm_laporan_pesanan").text('Hari Ini'); + } + } + }); + $("#confirm_laporan_pesanan").text('Hari Ini'); + initDt(); + }); diff --git a/public/js/menu/action.js b/public/js/menu/action.js index a3a3ffa..ef1cc16 100644 --- a/public/js/menu/action.js +++ b/public/js/menu/action.js @@ -104,7 +104,7 @@ function initSelectize(formElement) { }); }); - const radioSomeday = formElement.querySelector(`input[value="Someday"]`); + const radioSomeday = formElement.querySelector(`input[value="Sameday"]`); const radioMenuNormal = formElement.querySelector(`input[value="Menu Normal"]`); const tanggalWrapper = formElement.querySelector('.date-input')?.closest('.col-md-12'); @@ -388,7 +388,7 @@ function editMasterMenu(e) { $("#jenis_makanan_edit").val(dataOld.jenis_menu); $("#deskripsi_edit").val(dataOld.deskripsi); - $(`input[name="kategori_menu"][value="${dataOld.apakah_someday ? 'Someday' : 'Menu Normal'}"]`).prop('checked', true); + $(`input[name="kategori_menu"][value="${dataOld.apakah_someday ? 'Sameday' : 'Menu Normal'}"]`).prop('checked', true); $(`input[name="apakah_menu_siang"][value="${dataOld.apakah_menu_siang ? 'iya' : ''}"]`).prop('checked', true); $(`input[name="apakah_menu_sore"][value="${dataOld.apakah_menu_sore ? 'iya' : ''}"]`).prop('checked', true); @@ -425,7 +425,7 @@ function editMasterMenu(e) { $('input[name="kategori_menu"]').on('change', function(){ const selected = $(this).val(); - const isSomeday = selected === 'Someday'; + const isSomeday = selected === 'Sameday'; if(isSomeday){ tanggalWrapper.classList.add('d-none'); if (tanggalSelectizeInstance) { @@ -619,7 +619,7 @@ function detailMasterMenu(e){ 'Tidak ada info tanggal tersedia'}
- Menu: ${someday ? 'Someday' : 'Menu Normal'} + Menu: ${someday ? 'Sameday' : 'Menu Normal'}
${ diff --git a/public/js/menu/dt.js b/public/js/menu/dt.js index 064037e..3e93b92 100644 --- a/public/js/menu/dt.js +++ b/public/js/menu/dt.js @@ -105,7 +105,7 @@ field: "master_menu_id", formatter: function (value, row) { if (row?.apakah_someday) { - return `Someday`; + return `Sameday`; } return `Menu Normal`; } diff --git a/public/js/order_guest/index.js b/public/js/order_guest/index.js index ceb3b30..c5a58a1 100644 --- a/public/js/order_guest/index.js +++ b/public/js/order_guest/index.js @@ -88,6 +88,13 @@ const menus = res.data.data || []; + const groups = {}; + menus.forEach(menu => { + const key = menu.group_label || 'Tanpa Tanggal' + if (!groups[key]) groups[key] = []; + groups[key].push(menu); + }); + if (menus.length === 0){ return containerGuest.html(`
@@ -98,11 +105,35 @@ } let html = '
'; - menus?.forEach(menu => { + for (const [label, list] of Object.entries(groups)) { + let scheduleInfo = ''; + if (label === "Menu Sameday") { + scheduleInfo = ` +
    +
  • Makan Siang: Pesan Maks 10.00 WIB
  • +
  • Makan Sore: Pesan Maks 13.00 WIB
  • +
+ `; + } else { + scheduleInfo = `
Dipesan maksimal H-1 sebelum pukul 13.00 WIB
`; + } + html += ` +
+
+ ${label} +
+ ${scheduleInfo} +
+
+
+ `; + list?.forEach(menu => { html += ` +
-
+
+
+ style="height:100%; background:linear-gradient(transparent, rgba(0,0,0,.6)); border-radius:0 0 .5rem .5rem;">
-
${menu.nama}
+
${menu.nama.substring(0, 39) + '...' }
${menu?.kalori.length > 0 ? ` - ${(menu.kalori || []).slice(0,1).map(k=>k.nilai_kalori||0).join('')} kkal`: ''} -
- - -
+ ${(menu.kalori || []).slice(0,1).map(k=>k.nilai_kalori||0).join('')} kkal`: ''} ${(menu.klasifikasiMenu || []) - .slice(0, 2) + .slice(0, 1) .map(tag => { const name = tag.nama_kategori_diet || ''; const truncated = name.length > 12 ? name.substring(0, 12) + '...' : name; return `${truncated}`; }).join('')} ${(menu.klasifikasiMenu || []).length > 2 - ? `+${menu.klasifikasiMenu.length - 2} lainnya` + ? `+${menu.klasifikasiMenu.length - 2} lainnya` : ''}
+
${menu.apakah_someday - ? 'Someday' - : 'Normal'} + ? 'Menu Sameday' + : 'Menu Normal'}
-
- ${menu.apakah_menu_siang - ? '
Siang
' - : ''} - ${menu.apakah_menu_sore - ? '
Sore
' - : ''} - ${!menu.apakah_menu_siang && !menu.apakah_menu_sore - ? '
Tutup
' - : ''} +
+
- -
- Tersedia: -
-
- ${menu.apakah_someday - ? 'Setiap hari' - : (Array.isArray(menu.dmph) && menu.dmph.length > 0 - ? menu.dmph.slice(0, 6).map(d => - `${d.tgl_harian}` - ).join('') - : 'Tutup')} + +
+ Tersedia: +
+ ${menu.apakah_menu_siang && menu.apakah_menu_sore + ? '
Makan Siang
& Sore
' + : menu.apakah_menu_siang + ? '
Makan Siang
' + : menu.apakah_menu_sore + ? '
Makan Sore
' + : '
Tutup
'}
+ +
+ Karyawan + Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')} +
+
+ Public + Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')}
- - -
- Karyawan - Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')} -
-
- Public - Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')} -
-
- -
- `; }); + } + + html += '
'; @@ -297,7 +314,7 @@ 'Tidak ada info tanggal tersedia'}
- Menu: ${someday ? 'Someday' : 'Menu Normal'} + Menu: ${someday ? 'Sameday' : 'Menu Normal'}
${ @@ -477,6 +494,17 @@ } function handleClick(e){ + const originalHTML = e.innerHTML; + // Efek klik + e.classList.add('btn-clicked'); + setTimeout(() => e.classList.remove('btn-clicked'), 80); + // Ganti isi tombol jadi checklist + e.innerHTML = ''; + // Simulasi proses + setTimeout(() => { + e.innerHTML = originalHTML; + }, 1000); + const order_id = sessionStorage.getItem('order_id') || null; if(order_id){ Swal.fire({ diff --git a/public/js/pekerjaan/action.js b/public/js/pekerjaan/action.js index 1eb0c3c..9b9b9ed 100644 --- a/public/js/pekerjaan/action.js +++ b/public/js/pekerjaan/action.js @@ -90,6 +90,7 @@ document.getElementById('formActionApproveOrder').addEventListener('submit', fun }); datatablePekerjaan.bootstrapTable('refresh'); modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM + getReminderVerifikasiMakanan() }; modalActionOrder.addEventListener('hidden.bs.modal', handler); // ✅ pakai DOM diff --git a/public/js/pekerjaan/dt.js b/public/js/pekerjaan/dt.js index f9b0171..eba7c28 100644 --- a/public/js/pekerjaan/dt.js +++ b/public/js/pekerjaan/dt.js @@ -34,7 +34,7 @@ align: 'center', valign: 'middle', formatter: function (value, row, index) { - return `` + return `` } }, { @@ -56,11 +56,7 @@ ` - buttons += ` - - ` + return `
@@ -100,6 +96,18 @@ }, sortable: true, }, + { + title: "Karbohidrat", + field: 'karbohidrat_id', + formatter: function (value, row) { + if (!row?.karbohidrat) return ''; + const nama = row.karbohidrat.nama_karbohidrat || ''; + const kalori = row.karbohidrat.nilai_kalori ? ` (${row.karbohidrat.nilai_kalori} kkal)` : ''; + + return nama + kalori; + }, + sortable: true, + }, { title: "Pemesan", field:'order.nama_pemesan', @@ -135,21 +143,19 @@ $('.rowCheckbox').each(function () { this.checked = isChecked; let order_detail_id = $(this).data('order_detail_id'); - let jenis_customer = $(this).data('jenis_customer'); if (isChecked) { - selectedRows.push({ order_detail_id, jenis_customer }); + selectedRows.push({ order_detail_id }); } }); $('#buttonLabel').prop("disabled", !isChecked); }); $(document).on('change', '.rowCheckbox', function () { - let order_detail_id = $(this).data('order_id'); - let jenis_customer = $(this).data('jenis_customer'); + let order_detail_id = $(this).data('order_detail_id'); let isChecked = this.checked; if (isChecked) { if (!selectedRows.find(r => r.order_detail_id === order_detail_id)) { - selectedRows.push({ order_detail_id, jenis_customer }); + selectedRows.push({ order_detail_id }); } } else { selectedRows = selectedRows.filter(r => r.order_detail_id !== order_detail_id); @@ -163,38 +169,6 @@ function labelDownload(){ const selected = (typeof getSelectedRowsForLabel === 'function') ? getSelectedRowsForLabel() : []; - - if (selected.length === 0) { - alert("Silakan pilih setidaknya satu item terlebih dahulu."); - return; - } - - fetch('/dashboard/pekerjaan/label', { - method:'POST', - headers:{ - 'Content-Type' : 'application/json', - 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value, - }, - body: JSON.stringify({ items : selected}) - }) - .then(response => { - if (!response.ok) throw new Error('Gagal download label'); - return response.blob(); - - }) - .then(res => { - console.log(res); - - }) - .catch(error => { - alert('gagal mengunduh'); - console.error(error); - - }) - - + const order_detail_ids = selected.map(item => item.order_detail_id); + window.open(`https://smart.rsabhk.co.id:2222/service-reporting/label-cetering/${order_detail_ids}`, '_blank'); } -function cetak(id, jenis_customer){ - console.log(id, jenis_customer); - -} diff --git a/public/js/pesanan_pending/_init.js b/public/js/pesanan_pending/_init.js index 0b8a2de..41e17fe 100644 --- a/public/js/pesanan_pending/_init.js +++ b/public/js/pesanan_pending/_init.js @@ -13,3 +13,7 @@ const formActionProgressOrder = $("#formActionProgressOrder") const modalExport = document.getElementById('modalExportPending'); + +const datatableOfPekerjaan = $("#datatableVerifikasiMakananOffcanvas") +const modalDetailOrder = document.getElementById('modalDetailOrderOf'); +const modalActionOrderPekerjaan = document.getElementById('modalActionApproveOrder'); diff --git a/public/js/pesanan_pending/action.js b/public/js/pesanan_pending/action.js index 5e88050..e8d8e9f 100644 --- a/public/js/pesanan_pending/action.js +++ b/public/js/pesanan_pending/action.js @@ -47,7 +47,8 @@ document.getElementById('formActionOrder').addEventListener('submit', function ( showConfirmButton: false, backdrop: true, }); - getReminderOrder(); + getReminderKonfirmasiPesanan() + getReminderVerifikasiMakanan() datatablePending.bootstrapTable('refresh'); modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM }; @@ -119,7 +120,8 @@ document.getElementById('formActionApproveBillingOrder').addEventListener('submi showConfirmButton: false, backdrop: true, }); - getReminderOrder(); + getReminderKonfirmasiPesanan() + getReminderVerifikasiMakanan() datatablePending.bootstrapTable('refresh'); modalActionApproveBillingnOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM }; diff --git a/public/js/pesanan_pending/action_progres_order.js b/public/js/pesanan_pending/action_progres_order.js index 53ec0a9..7e72d22 100644 --- a/public/js/pesanan_pending/action_progres_order.js +++ b/public/js/pesanan_pending/action_progres_order.js @@ -11,7 +11,7 @@ function fetchDetailOrder(order_id){
- Foto Menu + Foto Menu

Nama Menu: ${detail?.menu?.nama_menu || '-'}

@@ -24,7 +24,7 @@ function fetchDetailOrder(order_id){ ${detail?.status_order}

- +

Catatan : ${detail?.catatan || '-'}

+ ${data.bukti_pembayaran ? `
- Bukti Pembayaran -
+ + Bukti Pembayaran +
` : ''} -
+
Nama Pemesan: ${data.nama_pemesan}
@@ -59,14 +61,14 @@ function fetchDetailOrder(order_id){ ${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? `
-

Nama Pasien: ${data.nama_pasien}

-

Nomor Kamar Perawatan: ${data.no_kamar_perawatan}

-

Ruang Perawatan: ${data.kelas_perawatan}

-

Kelas Perawatan: ${data.ruang_perawatan}

+

Nama Pasien: ${data.nama_pasien || '-'}

+

Nomor Kamar Perawatan: ${data.no_kamar_perawatan || '-'}

+

Ruang Perawatan: ${data.kelas_perawatan || '-'}

+

Kelas Perawatan: ${data.ruang_perawatan || '-'}

`: `
-

Bagian /Instalasi: ${data.bagian_instalasi}

-

Ekstensien yang bisa di Hubungi: ${data.no_ekstensien}

+

Bagian /Instalasi: ${data.bagian_instalasi || '-'}

+

Ekstensien yang bisa di Hubungi: ${data.no_ekstensien || '-'}

`} @@ -126,6 +128,7 @@ function fetchDetailOrder(order_id){ el.disabled = true; datatablePending.bootstrapTable('refresh') showToast('Status berhasil diperbarui!'); + getReminderVerifikasiMakanan() }) .catch(err => { console.error('Gagal update status:', err); diff --git a/public/js/pesanan_pending/dt.js b/public/js/pesanan_pending/dt.js index 1bb0528..02bace0 100644 --- a/public/js/pesanan_pending/dt.js +++ b/public/js/pesanan_pending/dt.js @@ -20,7 +20,7 @@ pageSize: 10, pageList: [10, 20, 30, 40, 50, 100, 200], cookie: true, - cookieIdTable: "table_rma_ssc_id", + cookieIdTable: "datatablePesananPending", icons: { refresh: "fas fa-sync-alt", // atau ganti ke icon lain columns: "fas fa-th-large" @@ -115,7 +115,6 @@ const progress = parseInt(row.progress) || 0; const total = row.total_detail || 0; const selesai = row.selesai_detail || 0; - return `
@@ -135,6 +134,20 @@ title: "Pemesan", field:'nama_pemesan', sortable: true, + }, + { + title:'Bukti Pembayaran', + formatter: function(value, row){ + if(row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran){ + return ` + + Lihat Bukti + + `; + }else if(row?.cara_pembayaran === 'Billing'){ + return `No.MR: ${row?.medical_record || '-'}`; + } + } }, { title: "Total Harga Pesanan", @@ -162,7 +175,8 @@ title: "Kategori Customer", field: 'jenis_customer', sortable: true, - } + }, + ], }); } diff --git a/public/js/pesanan_pending/of_dt.js b/public/js/pesanan_pending/of_dt.js new file mode 100644 index 0000000..f73a1d8 --- /dev/null +++ b/public/js/pesanan_pending/of_dt.js @@ -0,0 +1,288 @@ +document.addEventListener('DOMContentLoaded', function () { + const $timeLabel = $("#confirm_pekerjaan_time"); + $timeLabel.text("Hari Ini"); + + // Init Date Picker + flatpickr("#tanggal_offcanvas", { + dateFormat: "Y-m-d", + mode: "multiple", + locale: "id", + onValueUpdate: function (selectedDates) { + const selectedFormatted = selectedDates.map(d => + `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}` + ); + + initPekerjaanDt(selectedFormatted); + updateTimeLabel(selectedFormatted); + } + }); + + initPekerjaanDt(); +}); + +// Update Label Tanggal +function updateTimeLabel(dates) { + const $timeLabel = $("#confirm_pekerjaan_time"); + + if (dates.length === 0) { + $timeLabel.text("Hari Ini"); + return; + } + + let label = dates.length === 1 + ? dates[0] + : dates.length === 2 + ? dates.join(" dan ") + : `${dates.slice(0, -1).join(", ")}, dan ${dates.slice(-1)}`; + + $timeLabel.text(`: ${label}`); +} + +// Init Table +function initPekerjaanDt(selectDate = []) { + let selectedRows = []; + + datatableOfPekerjaan.bootstrapTable('destroy').bootstrapTable({ + url: "/dashboard/datatable/pekerjaan", + method: 'get', + queryParams: params => ({ ...params, tanggal: selectDate }), + showColumns: true, + showColumnsToggleAll: true, + showRefresh: true, + sortable: true, + search: true, + searchOnEnterKey: false, + searchHighlight: true, + pagination: true, + serverSide: true, + pageSize: 10, + pageList: [10, 20, 30, 40, 50, 100, 200], + cookie: true, + cookieIdTable: "datatableVerifikasiMakananOffcanvas", + icons: { refresh: "fas fa-sync-alt", columns: "fas fa-th-large" }, + columns: getTableColumns(), + }); + + // Checkbox Handling + $(document).off('click', '#selectAll').on('click', '#selectAll', function () { + const isChecked = this.checked; + selectedRows = isChecked + ? $(".rowCheckbox").map(function () { return { order_detail_id: $(this).data("order_detail_id") }; }).get() + : []; + $(".rowCheckbox").prop("checked", isChecked); + toggleLabelButton(selectedRows.length > 0); + }); + + $(document).off('change', '.rowCheckbox').on('change', '.rowCheckbox', function () { + const id = $(this).data("order_detail_id"); + if (this.checked) { + if (!selectedRows.find(r => r.order_detail_id === id)) selectedRows.push({ order_detail_id: id }); + } else { + selectedRows = selectedRows.filter(r => r.order_detail_id !== id); + } + toggleLabelButton(selectedRows.length > 0); + }); + + window.getSelectedRowsForLabel = () => selectedRows; +} + +// Toggle Cetak Label Button +function toggleLabelButton(enable) { + $('#buttonLabel').prop("disabled", !enable); +} + +// Download Label +function labelDownload() { + const ids = getSelectedRowsForLabel().map(item => item.order_detail_id); + window.open(`https://smart.rsabhk.co.id:2222/service-reporting/label-cetering/${ids}`, '_blank'); +} + +// Table Columns +function getTableColumns() { + return [ + { + title: '', + field: 'order_id', + align: 'center', + formatter: (v, r) => `` + }, + { + title: "Action", + formatter: (v, r) => { + let btns = ''; + if (r?.status_order !== "Selesai") { + btns += ` + `; + } + btns += ` + `; + return `
${btns}
`; + } + }, + { title: "No.Order", field: 'order.no_order', sortable: true }, + { + title: "Status", + formatter: (v, r) => { + const status = r?.status_order; + const badgeClass = status === "Selesai" ? 'bg-success text-dark' : 'bg-primary'; + return `${status}`; + } + }, + { title: "Menu", formatter: (v, r) => r?.menu?.nama_menu || r?.paket_menu?.nama_paket, sortable: true }, + { + title: "Karbohidrat", + formatter: (v, r) => { + if (!r?.karbohidrat) return ''; + const nama = r.karbohidrat.nama_karbohidrat || ''; + const kalori = r.karbohidrat.nilai_kalori ? ` (${r.karbohidrat.nilai_kalori} kkal)` : ''; + return nama + kalori; + }, + sortable: true, + }, + { + title: "Pemesan", + formatter: (v, r) => ` +
    +
  • ${r?.order?.nama_pemesan ?? '-'}
  • +
  • ${r?.order?.jenis_customer ?? '-'}
  • +
` + }, + { title: "Tgl Antar", field: 'tgl_antar' }, + { title: "Waktu Pemesanan", field: 'type', sortable: true }, + { title: "Catatan", field: 'catatan', sortable: true }, + ]; +} + + +function detailOrder(id){ + const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')); + offcanvas.hide(); + new bootstrap.Modal(modalDetailOrder).show(); + fetch(`/dashboard/pekerjaan/detail/${id}`) + .then(res => res.json()) + .then(res => { + const data = res.data; + document.getElementById('pesanan_container').innerHTML = ''; + document.getElementById('confirm_nama_pesanan').textContent = data?.order?.nama_pemesan; + let html = ''; + html += ` +
+
+
+
+ Foto Menu +
+
+

Nama Menu: ${data?.menu?.nama_menu || data?.paket_menu?.nama_menu}

+

Tanggal Antar: ${data?.tgl_antar || 0}

+

Jumlah: ${data?.jumlah || 0}

+

Harga Satuan: Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}

+

Status Pesanan: + + ${data?.status_order} + +

+
+

Pemesan: ${data?.order?.nama_pemesan || '-'}

+

Jenis Kelamin: ${data?.order?.jenis_kelamin || '-'}

+

Jenis Customer: ${data?.order?.jenis_customer || '-'}

+ ${data?.order?.jenis_customer === "Masyarakat Umum" ? + `

Alamat: ${data?.order?.alamat || '-'}

+ ` : data?.order?.jenis_customer === "Karyawan RSAB Harapan Kita" ? ` +

Bagian /Instalasi: ${data?.order?.bagian_instalasi || '-'}

+

No Ekstensien: ${data?.order?.no_ekstensien || '-'}

+ ` :` +

Nama Pasien: ${data?.order?.nama_pasien || '-'}

+

Ruang Perawatan: ${data?.order?.ruang_perawatan || '-'}

+

Nomor Kamar Perawatan: ${data?.order?.no_kamar_perawatan || '-'}

+

Kelas Perawatan: ${data?.order?.kelas_perawatan || '-'}

+ ` + } +
+
+
+
+
+ + ` + + document.getElementById('pesanan_container').innerHTML = html; + document.getElementById('modalDetailOrderOf').addEventListener('hidden.bs.modal', () => { + new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')).show() + }, { once:true}); + }) + .catch(error => { + console.error(error); + + }) +} + + +function exportPekerjaan(){ + const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')); + offcanvas.hide(); + new bootstrap.Modal(modalExport).show(); + document.getElementById('formExport').setAttribute('action', '/dashboard/pekerjaan/export') +} + +function approve(e){ + const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')); + offcanvas.hide(); + const data = $(e).data(); + new bootstrap.Modal(modalActionOrderPekerjaan).show(); + $("#confirmActionApproveOrder").text(data?.menu + ' (' + data?.type +')') + $("#confirmNoOrder").text(data?.no_order + ' (' + data?.nama_pemesan +')') + document.getElementById('formActionApproveOrder').setAttribute(`action`, `/dashboard/pending/update-detail-status/${data.id}`) + document.getElementById('modalActionApproveOrder').addEventListener('hidden.bs.modal', () => { + new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')).show() + }, { once:true}); +} + + +document.getElementById('formActionApproveOrder').addEventListener('submit', function (e) { + e.preventDefault(); + const form = this; + const actionUrl = form.getAttribute('action'); + + fetch(actionUrl, { + method: 'POST', + headers: { + 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value, + } + }).then(async (res) => { + const data = await res.json(); + if (res.status) { + Swal.fire({ + icon: 'success', + title: 'Berhasil', + text: 'Pesanan berhasil diselesaikan!', + timer: 2000, + showConfirmButton: false, + backdrop: true, + }); + datatableOfPekerjaan.bootstrapTable('refresh'); + getReminderVerifikasiMakanan() + bootstrap.Modal.getInstance(modalActionOrderPekerjaan).hide(); + } else { + throw new Error(data.message || 'Terjadi kesalahan saat mengubah status.'); + } + }).catch(err => { + console.error(err); + Swal.fire({ + icon: 'error', + title: 'Gagal', + text: err, + }); + }); +}); diff --git a/public/js/pesanan_selesai/detail_order.js b/public/js/pesanan_selesai/detail_order.js index f2612bf..dc95636 100644 --- a/public/js/pesanan_selesai/detail_order.js +++ b/public/js/pesanan_selesai/detail_order.js @@ -24,7 +24,7 @@ function fetchDetailOrder(order_id){ ${detail?.status_order}

- +

Catatan : ${detail?.catatan || '-'}

@@ -35,6 +35,7 @@ function fetchDetailOrder(order_id){ const html = `
+ ${data.bukti_pembayaran ? `
Bukti Pembayaran
-
+
` : ''} -
+
${data.nama_pemesan}
@@ -68,7 +69,10 @@ function fetchDetailOrder(order_id){

No Order: ${data.no_order}

-

Tipe Pembayaran: ${data.cara_pembayaran}

+

Metode Pembayaran: ${data.cara_pembayaran}

+ ${data?.cara_pembayaran === 'Billing' ? ` +

No.Medical Record: ${data.medical_record}

+ `: ''}

Tanggal Pembayaran: ${data.tgl_pembayaran || '-'}

Total Harga: Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}

diff --git a/public/js/semua_pesanan/_init.js b/public/js/semua_pesanan/_init.js new file mode 100644 index 0000000..d8bbd03 --- /dev/null +++ b/public/js/semua_pesanan/_init.js @@ -0,0 +1,3 @@ +const datatableSemuaPesanan = $("#datatableSemuaPesanan") + +const infoPesanan = document.getElementById('infoPesanan') diff --git a/public/js/semua_pesanan/action.js b/public/js/semua_pesanan/action.js new file mode 100644 index 0000000..509795c --- /dev/null +++ b/public/js/semua_pesanan/action.js @@ -0,0 +1,115 @@ +function fetchDetailOrder(order_id){ + fetch(`/dashboard/pending/action-progress-order/${order_id}`) + .then(res => res.json()) + .then(res => { + const data = res; + document.getElementById('pesanan_container').innerHTML ='' + // Generate HTML untuk order_detail + const detailHTML = (data?.order_detail || []).map(detail => { + return ` +
+
+
+
+ Foto Menu +
+
+

Nama Menu: ${detail?.menu?.nama_menu || '-'}

+

Jumlah: ${detail?.jumlah || 0}

+

Tanggal Pesan: ${detail?.tgl_antar || 0}

+

Harga: Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}

+

Status Pesanan: + + ${detail?.status_order} + +

+

Catatan : ${detail?.catatan || '-'}

+
+
+
+
+ `; + }).join(''); + + const html = ` +
+ + ${data.bukti_pembayaran ? ` +
+
+ + Bukti Pembayaran + +
Bukti Pembayaran
+
+
` : ''} + + +
+
+
+
${data.nama_pemesan}
+

Jenis Customer: ${data.jenis_customer}

+ + ${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? ` +
+

Nama Pasien: ${data.nama_pasien}

+

Nomor Kamar: ${data.no_kamar_perawatan}

+

Ruang Perawatan: ${data.ruang_perawatan}

+

Kelas Perawatan: ${data.kelas_perawatan}

+
` : ` +
+

Bagian / Instalasi: ${data.bagian_instalasi}

+

Ekstensien: ${data.no_ekstensien || '-'}

+
`} + +
+ +
+

No Order: ${data.no_order}

+

Metode Pembayaran: ${data.cara_pembayaran}

+ ${data?.cara_pembayaran === 'Billing' ? ` +

No.Medical Record: ${data.medical_record}

+ `: ''} +

Tanggal Pembayaran: ${data.tgl_pembayaran || '-'}

+

Total Harga: Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}

+
+ +
+
+ + ${data.status_order} + +
+
+
+
+
+ + +
+ +
+ ${detailHTML} +
+ `; + + document.getElementById('pesanan_container').innerHTML = html; + + }) + .catch(err => { + document.getElementById('pesanan_container').innerHTML = '

Terjadi kesalahan saat memuat data.

'; + console.error(err); + }); + +} + +function orderLunas(order_id){ + new bootstrap.Modal(infoPesanan).show(); + fetchDetailOrder(order_id) +} + diff --git a/public/js/semua_pesanan/dt.js b/public/js/semua_pesanan/dt.js new file mode 100644 index 0000000..d0c4b8f --- /dev/null +++ b/public/js/semua_pesanan/dt.js @@ -0,0 +1,194 @@ + + function initDt(selectDate = []){ + datatableSemuaPesanan.bootstrapTable('destroy') + datatableSemuaPesanan.bootstrapTable({ + url: "/dashboard/datatable/semua-pesanan", + method:'get', + queryParams:function(params){ + params.tanggal = selectDate; + return params; + }, + showColumns: true, + showColumnsToggleAll: true, + showRefresh: true, + sortable: true, + search: true, + searchOnEnterKey: false, + searchHighlight: true, + pagination: true, + serverSide:true, + pageSize: 10, + pageList: [10, 20, 30, 40, 50, 100, 200], + cookie: true, + cookieIdTable: "datatableSemuaPesanan", + icons: { + refresh: "fas fa-sync-alt", // atau ganti ke icon lain + columns: "fas fa-th-large" + }, + + columns: [ + { + title: "Action", + field:'order_id', + formatter: function(value, row) { + let buttons = '' + if(row?.status_order === "Dibatalkan") return '' + + if(row?.status_order === "Lunas"){ + buttons += ` + + ` + } + + return ` +
+ ${buttons} +
+ `; + } + }, + + { + title: "Pemesan", + field:'nama_pemesan', + sortable: true, + }, + { + title: "No.Order", + field: 'no_order', + sortable: true, + }, + { + title: "Kategori Customer", + field: 'jenis_customer', + sortable: true, + }, + { + title: "Cara Pembayaran", + field: 'cara_pembayaran', + sortable: true, + }, + { + title: "Status Pembayaran", + field: 'status_order', + sortable: true, + formatter: function(value, row) { + const status = value; + let badgeClass = 'bg-secondary'; + if (status === "Belum Bayar") { + badgeClass = 'bg-warning text-dark'; + } else if (status === "Menunggu Konfirmasi Pembayaran") { + badgeClass = 'bg-primary'; + } else if (status === "Lunas" || status === "Sudah Bayar") { + badgeClass = 'bg-success text-dark'; + } else if(status === "Dibatalkan"){ + badgeClass = 'bg-danger'; + } + return ` + ${status} + ${status === 'Dibatalkan' && row.note_dibatalkan ? ` +
+ ${row.note_dibatalkan} +
+ ` : ''} + `; + } + }, + { + title: "Status Pesanan", + formatter: function(value, row) { + const progress = parseInt(row.progress) || 0; + const total = row.total_detail || 0; + const selesai = row.selesai_detail || 0; + return ` +
+
+
+ ${progress}% +
+
+ ${selesai} / ${total} selesai +
+ `; + }, + sortable: true, + }, + { + title:'Bukti Pembayaran', + formatter: function(value, row){ + if(row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran){ + return ` + + Lihat Bukti + + `; + }else if(row?.cara_pembayaran === 'Billing'){ + return `No.MR: ${row?.medical_record || '-'}`; + } + } + }, + { + title: "Total Harga Pesanan", + field:'total_harga', + formatter: function(value, row){ + return 'Rp ' + parseInt(row.total_harga).toLocaleString('id-ID') + } + }, + { + title: "Tgl Pemesanan", + formatter: function(value, row) { + if (!row?.entry_at) return '-'; + const date = new Date(row.entry_at); + return date.toLocaleString('id-ID', { + day: '2-digit', + month: 'short', // Bisa diganti 'long' kalau mau 'Juli' bukan 'Jul' + year: 'numeric', + hour: '2-digit', + minute: '2-digit', + hour12: false // pakai format 24 jam + }); + }, + }, + + + ], + }); + } + + document.addEventListener('DOMContentLoaded', function () { + flatpickr('#tanggal', { + dateFormat: "Y-m-d", + mode: "multiple", + locale: "id", // opsional: agar hari/bulan dalam Bahasa Indonesia + onValueUpdate: function(selectedDates, dateStr, instance) { + const selectedFormattedDates = selectedDates.map(d => { + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; + }) + initDt(selectedFormattedDates) + if(selectedFormattedDates.length > 0){ + const tanggalList = selectedFormattedDates; + + let tanggalRapi = ''; + if (tanggalList.length === 1) { + tanggalRapi = tanggalList[0]; + } else if (tanggalList.length === 2) { + tanggalRapi = tanggalList.join(' dan '); + } else if (tanggalList.length > 2) { + tanggalRapi = tanggalList.slice(0, -1).join(', ') + ', dan ' + tanggalList.slice(-1); + } + $("#confirm_date_pesanan_pending").text(': ' + tanggalRapi) + }else{ + $("#confirm_date_pesanan_pending").text(''); + } + } + }); + $("#confirm_date_pesanan_pending").text('Hari Ini'); + initDt(); + }); diff --git a/public/logo/logo_rsabhk.png b/public/logo/logo_rsabhk.png new file mode 100644 index 0000000000000000000000000000000000000000..548c8f14e956c86dd9463a86c01bbdb0446fe3cd GIT binary patch literal 76361 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%0A5n*!6biW^q@i@R}d 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%0AoY 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 KJnNyJ&;J4Z*8eg9 literal 0 HcmV?d00001 diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php index d040976..499d6e2 100644 --- a/resources/views/dashboard/index.blade.php +++ b/resources/views/dashboard/index.blade.php @@ -30,9 +30,11 @@
-
Pesanan Hari Ini
-

23

- Data tanggal {{ \Carbon\Carbon::now()->format('d M Y') }} + +
Pesanan Hari Ini
+

23

+ Data tanggal {{ \Carbon\Carbon::now()->format('d M Y') }} +
@@ -50,9 +52,11 @@
-
Konfirmasi Pesanan
-

8

- Menunggu Konfirmasi / Pembayaran + +
Konfirmasi Pesanan
+

8

+ Menunggu Konfirmasi / Pembayaran +
@@ -63,9 +67,11 @@
-
Total Nilai Transaksi
-

Rp 1.240.000

- Akumulasi dari pesanan + +
Total Nilai Transaksi
+

Rp 1.240.000

+ Akumulasi dari pesanan +
@@ -73,9 +79,11 @@
-
Pesanan Lunas, Menunggu Pengambilan
-

5

- Pembayaran sudah lunas, namun pesanan belum diambil karena tanggal pengambilan belum sesuai. + +
Pesanan Lunas, Menunggu Pengambilan
+

5

+ Pembayaran sudah lunas, namun pesanan belum diambil karena tanggal pengambilan belum sesuai. +
@@ -95,9 +103,11 @@
-
Karyawan RSAB Harapan Kita
-

Rp 1.240.000

- Total Nilai Transaksi Karyawan RSAB Harapan Kita + +
Karyawan RSAB Harapan Kita
+

Rp 1.240.000

+ Total Nilai Transaksi Karyawan RSAB Harapan Kita +
@@ -105,9 +115,11 @@
-
Keluarga Pasien / Penunggu Pasien
-

Rp 1.240.000

- Total Nilai Transaksi Keluarga Pasien / Penunggu Pasien + +
Keluarga Pasien / Penunggu Pasien
+

Rp 1.240.000

+ Total Nilai Transaksi Keluarga Pasien / Penunggu Pasien +
@@ -115,9 +127,11 @@
-
Masyarakat Umum
-

Rp 1.240.000

- Total Nilai Transaksi Masyarakat Umum + +
Masyarakat Umum
+

Rp 1.240.000

+ Total Nilai Transaksi Masyarakat Umum +
diff --git a/resources/views/dashboard/master/menu/modal/add.blade.php b/resources/views/dashboard/master/menu/modal/add.blade.php index cbc590b..6c883fe 100644 --- a/resources/views/dashboard/master/menu/modal/add.blade.php +++ b/resources/views/dashboard/master/menu/modal/add.blade.php @@ -90,9 +90,9 @@
- +
@@ -119,7 +119,8 @@
- + +
Gunakan Key Tab untuk menambahkan tanggal.
diff --git a/resources/views/dashboard/master/menu/modal/edit.blade.php b/resources/views/dashboard/master/menu/modal/edit.blade.php index 29fb6c3..12fcefb 100644 --- a/resources/views/dashboard/master/menu/modal/edit.blade.php +++ b/resources/views/dashboard/master/menu/modal/edit.blade.php @@ -85,9 +85,9 @@
- +
@@ -114,7 +114,8 @@
- + +
Gunakan Key Tab untuk menambahkan tanggal.
diff --git a/resources/views/dashboard/partials/sidenav.blade.php b/resources/views/dashboard/partials/sidenav.blade.php index bf9097e..323a9df 100644 --- a/resources/views/dashboard/partials/sidenav.blade.php +++ b/resources/views/dashboard/partials/sidenav.blade.php @@ -1,10 +1,10 @@ diff --git a/resources/views/dashboard/pesanan/components/infoPesanan.blade.php b/resources/views/dashboard/pesanan/components/infoPesanan.blade.php new file mode 100644 index 0000000..92b2a85 --- /dev/null +++ b/resources/views/dashboard/pesanan/components/infoPesanan.blade.php @@ -0,0 +1,24 @@ + + + diff --git a/resources/views/dashboard/pesanan/components/modalExport.blade.php b/resources/views/dashboard/pesanan/components/modalExport.blade.php new file mode 100644 index 0000000..6d68df0 --- /dev/null +++ b/resources/views/dashboard/pesanan/components/modalExport.blade.php @@ -0,0 +1,70 @@ + + + diff --git a/resources/views/dashboard/pesanan/laporan/pesanan/index.blade.php b/resources/views/dashboard/pesanan/laporan/pesanan/index.blade.php new file mode 100644 index 0000000..d597cdd --- /dev/null +++ b/resources/views/dashboard/pesanan/laporan/pesanan/index.blade.php @@ -0,0 +1,56 @@ +@extends('dashboard.layouts.main') + +@section('body_main') +
+ +

+ Dashboard / Laporan Pesanan +

+ + +
+
+ +
+ Laporan Pesanan +
+ + +
+ + + + + +
+ + + + +
+
+
+ +
+
+
+
+
+ + + + + + + + +@endsection diff --git a/resources/views/dashboard/pesanan/pekerjaan/modal/export.blade.php b/resources/views/dashboard/pesanan/pekerjaan/modal/export.blade.php index 45cf30e..75b7454 100644 --- a/resources/views/dashboard/pesanan/pekerjaan/modal/export.blade.php +++ b/resources/views/dashboard/pesanan/pekerjaan/modal/export.blade.php @@ -18,13 +18,13 @@
- +
- +
@@ -41,3 +41,10 @@
+ diff --git a/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php b/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php index 9877428..d4be764 100644 --- a/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php +++ b/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php @@ -8,15 +8,13 @@ font-family: Arial, sans-serif; font-size: 10.5px; line-height: 1.5; - margin: 40px; + margin: 20px; color: #333; } .header { - text-align: center; margin-bottom: 10px; padding-bottom: 10px; - border-bottom: 1px solid #ccc; } .header .sub-title { @@ -69,8 +67,17 @@ th:nth-child(7), td:nth-child(7) { width: 15%; /* buat lebih panjang dari kolom lain */ } - th:nth-child(4), td:nth-child(4) { width: 60px; text-align: center; } - th:nth-child(6), td:nth-child(6) { width: 110px; text-align: center; } + + th:nth-child(4), td:nth-child(4) { + width: 60px; + text-align: center; + } + + th:nth-child(6), td:nth-child(6) { + width: 110px; + text-align: center; + } + .keterangan { font-size: 10px; line-height: 1.4; @@ -87,15 +94,21 @@ -
-

Daftar Pesanan

- @if($startDate === $endDate) -
Periode: {{ $startDate }}
- @else -
Periode: {{ $startDate }} - {{ $endDate }}
- @endif -
RSAB Harapan Kita
+
+
+ Logo RSAB +
+
+

Daftar Pesanan

+ @if($startDate === $endDate) +
Periode: {{ $startDate }}
+ @else +
Periode: {{ $startDate }} - {{ $endDate }}
+ @endif +
RSAB Harapan Kita
+
+
@@ -111,6 +124,7 @@ Tanggal Antar Waktu Makan Menu + Karbohidrat Keterangan Jumlah Harga Satuan (Rp) @@ -134,6 +148,13 @@ {{ $row['type'] ?? '-' }} {{ $row['menu']['nama_menu'] ?? '-' }} + + @if($row['karbohidrat']) + {{ $row['karbohidrat']['nama_karbohidrat'] }} ({{ $row['karbohidrat']['nilai_kalori'] ? $row['karbohidrat']['nilai_kalori'] . ' kkal' : '-' }}) + @else + - + @endif + @php $jenis = strtolower($row['order']['jenis_customer'] ?? ''); @@ -156,7 +177,7 @@ @empty - Tidak ada data + Tidak ada data @endforelse @@ -165,6 +186,5 @@ - diff --git a/resources/views/dashboard/pesanan/pending/index.blade.php b/resources/views/dashboard/pesanan/pending/index.blade.php index fd090db..3dd3278 100644 --- a/resources/views/dashboard/pesanan/pending/index.blade.php +++ b/resources/views/dashboard/pesanan/pending/index.blade.php @@ -12,6 +12,9 @@
Konfirmasi Pesanan
+ @@ -35,13 +38,20 @@
+@include('dashboard.pesanan.pending.modal.detail') @include('dashboard.pesanan.pending.modal.action') @include('dashboard.pesanan.pending.modal.confirmBilling') @include('dashboard.pesanan.pending.modal.actionProgressPesanan') @include('dashboard.pesanan.pending.modal.export') +@include('dashboard.pesanan.pending.offcanvas.konfirmasiPesanan') +@include('dashboard.pesanan.pending.modal.actionPekerjaan') + + + + @endsection diff --git a/resources/views/dashboard/pesanan/pending/modal/actionPekerjaan.blade.php b/resources/views/dashboard/pesanan/pending/modal/actionPekerjaan.blade.php new file mode 100644 index 0000000..f102cee --- /dev/null +++ b/resources/views/dashboard/pesanan/pending/modal/actionPekerjaan.blade.php @@ -0,0 +1,29 @@ + + diff --git a/resources/views/dashboard/pesanan/pending/modal/actionProgressPesanan.blade.php b/resources/views/dashboard/pesanan/pending/modal/actionProgressPesanan.blade.php index 327ebc9..0213206 100644 --- a/resources/views/dashboard/pesanan/pending/modal/actionProgressPesanan.blade.php +++ b/resources/views/dashboard/pesanan/pending/modal/actionProgressPesanan.blade.php @@ -16,11 +16,8 @@ - -
+ @csrf
+ diff --git a/resources/views/dashboard/pesanan/pending/offcanvas/konfirmasiPesanan.blade.php b/resources/views/dashboard/pesanan/pending/offcanvas/konfirmasiPesanan.blade.php new file mode 100644 index 0000000..647d389 --- /dev/null +++ b/resources/views/dashboard/pesanan/pending/offcanvas/konfirmasiPesanan.blade.php @@ -0,0 +1,41 @@ +
+ +
+
+ Verifikasi Makanan +
+ +
+ +
+ +
+ + + + + + + +
+ + + + +
+
+ + +
+
+
+
+
diff --git a/resources/views/dashboard/pesanan/pending/pdf.blade.php b/resources/views/dashboard/pesanan/pending/pdf.blade.php index 8b45f11..9a40815 100644 --- a/resources/views/dashboard/pesanan/pending/pdf.blade.php +++ b/resources/views/dashboard/pesanan/pending/pdf.blade.php @@ -8,17 +8,16 @@ font-family: Arial, sans-serif; font-size: 10px; line-height: 1.5; - margin: 40px; + margin: 20px; color: #333; } .header { - text-align: center; margin-bottom: 10px; padding-bottom: 10px; - border-bottom: 1px solid #ccc; } + .header h2 { margin: 0; font-size: 20px; @@ -83,13 +82,20 @@
-

Laporan Konfirmasi Pesanan

- @if ($startDate === $endDate) -
Periode: {{ $startDate }}
- @else -
Periode: {{ $startDate }} - {{ $endDate }}
- @endif -
RSAB Harapan Kita
+
+
+ Logo RSAB +
+
+

{{ $laporan ?? 'Laporan Konfirmasi Pesanan' }}

+ @if($startDate === $endDate) +
Periode: {{ $startDate }}
+ @else +
Periode: {{ $startDate }} - {{ $endDate }}
+ @endif +
RSAB Harapan Kita
+
+
@@ -118,7 +124,7 @@ {{ $i === 0 ? $no++ : '' }} {{ $i === 0 ? $order->no_order : '' }} - {{ $i === 0 ? ($order->status_order === "Belum Bayar" ? $order->status_order : $order->status_order . ' ('. $order->cara_pembayaran .')' ) : '' }} + {{ $i === 0 ? (($order->status_order === "Belum Bayar" || $order->status_order === "Dibatalkan" ) ? $order->status_order : $order->status_order . ' ('. $order->cara_pembayaran .')' ) : '' }} @if ($i === 0) {{ $order->nama_pemesan }} diff --git a/resources/views/dashboard/pesanan/selesai/modal/export.blade.php b/resources/views/dashboard/pesanan/selesai/modal/export.blade.php index 3e318cb..6b27c21 100644 --- a/resources/views/dashboard/pesanan/selesai/modal/export.blade.php +++ b/resources/views/dashboard/pesanan/selesai/modal/export.blade.php @@ -18,13 +18,13 @@
- +
- +
@@ -41,3 +41,10 @@
+ diff --git a/resources/views/dashboard/pesanan/selesai/pdf.blade.php b/resources/views/dashboard/pesanan/selesai/pdf.blade.php index 6a65939..c1e37f8 100644 --- a/resources/views/dashboard/pesanan/selesai/pdf.blade.php +++ b/resources/views/dashboard/pesanan/selesai/pdf.blade.php @@ -8,17 +8,16 @@ font-family: Arial, sans-serif; font-size: 11px; line-height: 1.5; - margin: 40px; + margin: 20px; color: #333; } .header { - text-align: center; margin-bottom: 10px; padding-bottom: 10px; - border-bottom: 1px solid #ccc; } + .header h2 { margin: 0; font-size: 20px; @@ -89,13 +88,20 @@
-

Laporan Pesanan Selesai

- @if($startDate === $endDate) -
Periode: {{ $startDate }}
- @else -
Periode: {{ $startDate }} - {{ $endDate }}
- @endif -
RSAB Harapan Kita
+
+
+ Logo RSAB +
+
+

Laporan Pesanan Selesai

+ @if($startDate === $endDate) +
Periode: {{ $startDate }}
+ @else +
Periode: {{ $startDate }} - {{ $endDate }}
+ @endif +
RSAB Harapan Kita
+
+
diff --git a/resources/views/dashboard/pesanan/semua/index.blade.php b/resources/views/dashboard/pesanan/semua/index.blade.php new file mode 100644 index 0000000..3525760 --- /dev/null +++ b/resources/views/dashboard/pesanan/semua/index.blade.php @@ -0,0 +1,76 @@ +@extends('dashboard.layouts.main') + +@section('body_main') +
+ +

+ Dashboard / Semua Pesanan +

+ + +
+
+
Semua Pesanan
+
+
+ + + + +
+
+ +
+
+
+
+
+
+ + + + + + + +@endsection diff --git a/resources/views/guest/check_order/index.blade.php b/resources/views/guest/check_order/index.blade.php index af9e35f..38d4dfd 100644 --- a/resources/views/guest/check_order/index.blade.php +++ b/resources/views/guest/check_order/index.blade.php @@ -92,6 +92,7 @@ : data.status_order === 'Belum Bayar' ? '' : 'bg-success'}"> ${item?.status_order}

+

Catatan: ${item?.catatan || '-'}

diff --git a/resources/views/guest/checkout/step/step2.blade.php b/resources/views/guest/checkout/step/step2.blade.php index 1627779..0a2554d 100644 --- a/resources/views/guest/checkout/step/step2.blade.php +++ b/resources/views/guest/checkout/step/step2.blade.php @@ -24,10 +24,10 @@ Menu Normal: Dipesan maksimal H-1 sebelum pukul 13.00 WIB.
  • - Menu Same Day: Dipesan pada hari yang sama setelah pukul 13.00 WIB. + Menu Sameday:.
      -
    • Makan Siang: maksimal pukul 10.00 WIB
    • -
    • Makan Sore: maksimal pukul 13.00 WIB
    • +
    • Makan Siang: Dipesan maksimal pukul 10.00 WIB
    • +
    • Makan Sore: Dipesan maksimal pukul 13.00 WIB
  • @@ -60,10 +60,10 @@ Menu Normal: Dipesan maksimal H-1 sebelum pukul 13.00 WIB.
  • - Menu Same Day: Dipesan pada hari yang sama setelah pukul 13.00 WIB. + Menu Sameday:.
      -
    • Makan Siang: maksimal pukul 10.00 WIB
    • -
    • Makan Sore: maksimal pukul 13.00 WIB
    • +
    • Makan Siang: Dipesan maksimal pukul 10.00 WIB
    • +
    • Makan Sore: Dipesan maksimal pukul 13.00 WIB
  • diff --git a/resources/views/guest/checkout/step/step3.blade.php b/resources/views/guest/checkout/step/step3.blade.php index 4d7c591..f4be168 100644 --- a/resources/views/guest/checkout/step/step3.blade.php +++ b/resources/views/guest/checkout/step/step3.blade.php @@ -101,6 +101,10 @@
  • +
    diff --git a/resources/views/guest/index.blade.php b/resources/views/guest/index.blade.php index f9d15c1..90d2c38 100644 --- a/resources/views/guest/index.blade.php +++ b/resources/views/guest/index.blade.php @@ -72,6 +72,9 @@ Konsultasi Gizi!  Butuh rekomendasi menu sesuai kondisi Anda?  Lihat jadwal konsultasi & daftar sekarang. + Butuh bantuan? Hubungi WhatsApp Instalasi Gizi  + 08815611382   + Jam kerja: 08.00 – 15.00 WIB @@ -85,10 +88,10 @@ @@ -200,6 +193,6 @@ }); - + @endsection diff --git a/resources/views/guest/layout/partials/header.blade.php b/resources/views/guest/layout/partials/header.blade.php index 66af89c..3beef21 100644 --- a/resources/views/guest/layout/partials/header.blade.php +++ b/resources/views/guest/layout/partials/header.blade.php @@ -6,8 +6,8 @@