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 0000000..548c8f1 Binary files /dev/null and b/public/logo/logo_rsabhk.png differ 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 @@