From 265e62d456bba8803aa3afdcc2f74020cc3394de Mon Sep 17 00:00:00 2001 From: JokoPrasetio Date: Wed, 13 Aug 2025 14:37:10 +0700 Subject: [PATCH] laporan done --- app/Http/Controllers/PesananController.php | 448 +++++++++++++++--- app/Mail/NotifikasiCustomer.php | 45 +- app/Mail/NotifikasiKonfirmasiPembayaran.php | 33 +- app/Mail/NotifikasiPembayaran.php | 20 +- app/Models/Order.php | 3 +- public/js/count/konfirmasiPesanan.js | 5 - public/js/laporan_pesanan/action.js | 18 +- public/js/laporan_pesanan/dt.js | 26 +- public/js/pekerjaan/action.js | 7 +- public/js/pesanan_pending/_init.js | 1 + public/js/pesanan_pending/of_dt.js | 26 +- public/js/pesanan_selesai/detail_order.js | 121 ++--- public/js/pesanan_selesai/dt.js | 32 ++ public/js/semua_pesanan/_init.js | 2 + public/js/semua_pesanan/action.js | 128 ++--- public/js/semua_pesanan/dt.js | 27 +- .../dashboard/master/menu/modal/add.blade.php | 6 + .../master/menu/modal/edit.blade.php | 6 + .../pesanan/components/modalExport.blade.php | 23 +- .../pesanan/laporan/pesanan/index.blade.php | 2 +- .../laporan/pesanan/pdfPendapatan.blade.php | 153 ++++++ .../laporan/pesanan/pdfPesanan.blade.php | 161 +++++++ .../pesanan/pekerjaan/index.blade.php | 3 +- .../dashboard/pesanan/pending/index.blade.php | 7 +- .../pending/modal/confirmBilling.blade.php | 12 +- .../pesanan/pending/modal/export.blade.php | 16 +- .../dashboard/pesanan/selesai/index.blade.php | 3 +- .../pesanan/selesai/modal/export.blade.php | 14 +- .../dashboard/pesanan/semua/index.blade.php | 4 + resources/views/guest/layout_mail.blade.php | 3 +- resources/views/mail_view/customer.blade.php | 37 ++ .../mail_view/konfirmasi_pesanan.blade.php | 33 ++ .../views/mail_view/pembayaran.blade.php | 14 + routes/web.php | 3 +- 34 files changed, 1146 insertions(+), 296 deletions(-) create mode 100644 resources/views/dashboard/pesanan/laporan/pesanan/pdfPendapatan.blade.php create mode 100644 resources/views/dashboard/pesanan/laporan/pesanan/pdfPesanan.blade.php create mode 100644 resources/views/mail_view/customer.blade.php create mode 100644 resources/views/mail_view/konfirmasi_pesanan.blade.php create mode 100644 resources/views/mail_view/pembayaran.blade.php diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php index 1565c26..51aa947 100644 --- a/app/Http/Controllers/PesananController.php +++ b/app/Http/Controllers/PesananController.php @@ -129,6 +129,7 @@ class PesananController extends Controller public function actionOrderViaBilling(Request $request, string $order_id){ DB::connection('dbOrderGizi')->beginTransaction(); try { + $order = Order::where('order_id', $order_id)->first(); $payload = [ 'pegawai_id_confirm_order' => auth()->user()->id, @@ -137,6 +138,11 @@ class PesananController extends Controller 'status_order' => 'Lunas', 'cara_pembayaran' => 'Billing' ]; + if($request->hasFile('evidence_medical_record')){ + $file = $request->file('evidence_medical_record'); + $path = $file->store('evidence_medical_record', 'public'); + $payload['evidence_medical_record'] = $path; + } $order->update($payload); if($order->email){ @@ -210,6 +216,8 @@ class PesananController extends Controller 'o.status_order', 'o.bukti_pembayaran', 'o.note_dibatalkan', + 'o.medical_record', + 'o.evidence_medical_record', 'od.status_order as detail_status_order' )->get()->groupBy('order_id'); @@ -228,6 +236,8 @@ class PesananController extends Controller 'status_order' => $first->status_order, 'bukti_pembayaran' => $first->bukti_pembayaran, 'cara_pembayaran' => $first->cara_pembayaran, + 'medical_record' => $first->medical_record, + 'evidence_medical_record' => $first->evidence_medical_record, 'progress' => $progress, 'total_detail' => $totalDetail, 'selesai_detail' => $selesaiDetail, @@ -284,13 +294,28 @@ class PesananController extends Controller public function exportPekerjaan(){ $startDate = request('start_date'); $endDate = request('end_date'); - $now = Carbon::now()->format('Y-m-d H-i'); - $orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order', 'karbohidrat'])->whereHas('order', function($q){ + $type_customer = request('type_customer'); + $type = request('type'); + + $orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order', 'karbohidrat'])->whereHas('order', function($q) use($type_customer){ $q->where('status_order', 'Lunas'); + if($type_customer !== 'all'){ + $q->where('jenis_customer', $type_customer); + } })->whereBetween('tgl_antar', [$startDate, $endDate])->get(); + + if($type === 'pdf'){ + return $this->helperPdfPekerjaan($orderDetail, $startDate, $endDate); + }else{ + return $this->helperExcelPekerjaan($orderDetail, $startDate, $endDate); + } + } + + public function helperPdfPekerjaan($orderDetail, $startDate, $endDate){ $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); - $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y'); + $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y'); $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y'); + $now = Carbon::now()->format('Y-m-d H-i'); $data = [ 'pekerjaan' => $orderDetail, 'waktu_cetak' => $waktu_cetak, @@ -301,35 +326,202 @@ class PesananController extends Controller return $pdf->stream("daftar-pesanan-{$now}.pdf"); } + public function helperExcelPekerjaan($orderDetail, $startDate, $endDate){ + $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', "Menu Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}"); + $sheet->mergeCells('A1:K1'); + $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14); + $sheet->getStyle('A1')->getAlignment()->setHorizontal('center'); + + $sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}"); + $sheet->mergeCells('A2:K2'); + $sheet->getStyle('A2')->getAlignment()->setHorizontal('center'); + + // Header tabel + $headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Status Pesanan", "Menu Pesanan", "Karbohidrat", "Jumlah", "Tanggal Antar", "Waktu Makan", "Catatan"]; + $sheet->fromArray($headers, null, 'A4'); + $sheet->getStyle('A4:K4')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER], + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + ] + ] + ]); + $sheet->getStyle('A4:K4')->getFont()->setBold(true); + $sheet->getStyle('A4:K4')->getAlignment()->setHorizontal('center'); + $sheet->getStyle('A4:K4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + // Isi data + $row = 5; + foreach ($orderDetail as $index => $item) { + $sheet->setCellValue("A{$row}", $index + 1); + $sheet->setCellValue("B{$row}", $item?->order?->no_order); + $sheet->setCellValue("C{$row}", $item?->order?->nama_pemesan); + $sheet->setCellValue("D{$row}", $item?->order?->jenis_customer); + $sheet->setCellValue("E{$row}", $item?->status_order ?? "-"); + $sheet->setCellValue("F{$row}", $item?->menu?->nama_menu ?? '-'); + $karbohidratNama = $item?->karbohidrat?->nama_karbohidrat ?? '-'; + $karbohidratNilai = $item?->karbohidrat?->nilai_kalori ?? '-'; + $sheet->setCellValue("G{$row}", $karbohidratNama . ($karbohidratNilai !== '-' ? " ({$karbohidratNilai} Kkal)" : '')); + $sheet->setCellValue("H{$row}", $item?->jumlah ?? '-'); + $sheet->setCellValue("I{$row}", $item?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar"); + $sheet->setCellValue("J{$row}", $item?->type ?? "-"); + $sheet->setCellValue("K{$row}", $item?->catatan ?? "-"); + // Border tiap baris + $sheet->getStyle("A{$row}:K{$row}")->getBorders()->getAllBorders() + ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + $row++; + } + // Auto size kolom + foreach(range('A', 'K') as $col){ + $sheet->getColumnDimension($col)->setAutoSize(true); + } + $lastRow = $row - 1; + $sheet->setAutoFilter("A4:K{$lastRow}"); + // Download file + $fileName = 'menu-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 exportPending(){ $startDate = Carbon::parse(request('start_date'))->startOfDay(); $endDate = Carbon::parse(request('end_date'))->endOfDay(); - $order = Order::where('statusenabled', true) + $type = request('type'); + $type_customer = request('type_customer'); + $query = Order::where('statusenabled', true) ->whereBetween('entry_at', [$startDate, $endDate]) - ->with('orderDetail') - ->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'); + ->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing']); + if($type_customer !== 'all'){ + $query->where('jenis_customer', $type_customer); + } + $order = $query->with('orderDetail')->get(); + $title= 'konfirmasi-pesanan'; + $titlePdf = 'LAPORAN KONFIRMASI PESANAN'; + if($type === 'pdf'){ + return $this->pdfHelper($startDate, $endDate, $order, $titlePdf, $title); + }else{ + return $this->excelHelper($startDate, $endDate, $order, $title); + } - $data = [ - 'laporan' => 'LAPORAN KONFIRMASI 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 pdfHelper($startDate, $endDate, $order, $titlePdf, $title){ + $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' => $titlePdf, + 'waktu_cetak' => $waktu_cetak, + 'orders' => $order, + 'startDate' => $startDateFormatted, + 'endDate' => $endDateFormatted + ]; + $pdf = Pdf::loadView('dashboard.pesanan.pending.pdf', $data); + + return $pdf->stream($title . now()->format('Ymd-His') . '.pdf'); + } + + public function excelHelper($startDate, $endDate, $order, $title){ + $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:P1'); + $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14); + $sheet->getStyle('A1')->getAlignment()->setHorizontal('center'); + + $sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}"); + $sheet->mergeCells('A2:P2'); + $sheet->getStyle('A2')->getAlignment()->setHorizontal('center'); + + // Header tabel + $headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Status Pembayaran", "Jenis Kelamin", "NO.HP/WA", "Email" , "Cara Pembayaran", "Tanggal Pesan", "Harga Total", "Menu Pesanan", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan", "Catatan"]; + $sheet->fromArray($headers, null, 'A4'); + $sheet->getStyle('A4:Q4')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER], + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + ] + ] + ]); + $sheet->getStyle('A4:Q4')->getFont()->setBold(true); + $sheet->getStyle('A4:Q4')->getAlignment()->setHorizontal('center'); + $sheet->getStyle('A4:Q4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + + // Isi data + $row = 5; + foreach ($order as $index => $item) { + foreach($item->orderDetail as $detail){ + $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}", $item->status_order); + $sheet->setCellValue("F{$row}", $item->jenis_kelamin); + $sheet->setCellValue("G{$row}", $item->no_wa); + $sheet->setCellValue("H{$row}", $item->email); + $sheet->setCellValue("I{$row}", $item->cara_pembayaran); + $sheet->setCellValue("J{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i')); + $sheet->setCellValue("K{$row}", $item->total_harga); + + $sheet->setCellValue("L{$row}", $detail?->menu?->nama_menu ?? '-'); + $sheet->setCellValue("M{$row}", $detail?->jumlah ?? '-'); + $sheet->setCellValue("N{$row}", $detail?->status_order ?? "-"); + $sheet->setCellValue("O{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar"); + $sheet->setCellValue("P{$row}", $detail?->type ?? "-"); + $sheet->setCellValue("Q{$row}", $detail?->catatan ?? "-"); + // Border tiap baris + $sheet->getStyle("A{$row}:Q{$row}")->getBorders()->getAllBorders() + ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + + $row++; + } + } + + // Auto size kolom + foreach(range('A', 'Q') as $col){ + $sheet->getColumnDimension($col)->setAutoSize(true); + } + $lastRow = $row - 1; + $sheet->setAutoFilter("A4:Q{$lastRow}"); + // Download file + $fileName = $title . 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 exportSelesai(){ $startDate = Carbon::parse(request('start_date'))->startOfDay(); $endDate = Carbon::parse(request('end_date'))->endOfDay(); - + $type = request('type'); $order = Order::where('statusenabled', true) ->whereBetween('entry_at', [$startDate, $endDate]) ->with('orderDetail') @@ -338,20 +530,14 @@ class PesananController extends Controller $q->where('status_order', '!=', 'Selesai'); }) ->get(); + $title= 'pesanan-selesai'; + $titlePdf = 'LAPORAN PESANAN SELESAI'; - $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 = [ - 'waktu_cetak' => $waktu_cetak, - 'orders' => $order, - 'startDate' => $startDateFormatted, - 'endDate' => $endDateFormatted - ]; - $pdf = Pdf::loadView('dashboard.pesanan.selesai.pdf', $data); - - return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf'); + if($type === 'pdf'){ + return $this->pdfHelper($startDate, $endDate, $order, $titlePdf, $title); + }else{ + return $this->excelHelper($startDate, $endDate, $order, $title); + } } public function countKonfirmasiPesanan(){ @@ -405,6 +591,7 @@ class PesananController extends Controller 'bukti_pembayaran' => $first->bukti_pembayaran, 'cara_pembayaran' => $first->cara_pembayaran, 'medical_record' => $first->medical_record, + 'evidence_medical_record' => $first->evidence_medical_record, 'progress' => $progress, 'total_detail' => $totalDetail, 'selesai_detail' => $selesaiDetail, @@ -440,6 +627,7 @@ class PesananController extends Controller 'o.bukti_pembayaran', 'o.note_dibatalkan', 'o.medical_record', + 'o.evidence_medical_record', 'od.status_order as detail_status_order' )->get()->groupBy('order_id'); return $data; @@ -477,7 +665,7 @@ class PesananController extends Controller 'startDate' => $startDateFormatted, 'endDate' => $endDateFormatted ]; - $pdf = Pdf::loadView('dashboard.pesanan.pending.pdf', $data); + $pdf = Pdf::loadView('dashboard.pesanan.laporan.pesanan.pdfPesanan', $data); return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf'); } @@ -490,43 +678,61 @@ class PesananController extends Controller $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}"); - $sheet->mergeCells('A1:G1'); + $sheet->mergeCells('A1:P1'); $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->mergeCells('A2:P2'); $sheet->getStyle('A2')->getAlignment()->setHorizontal('center'); // Header tabel - $headers = ["No", "Nomor Order", "Nama Customer", "Jenis Customer", "Tanggal Pesanan", "Total", "Detail Pesanan"]; + $headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Jenis Kelamin", "NO.HP/WA", "Email" , "Cara Pembayaran", "Tanggal Pesan", "Harga Total", "Menu Pesanan", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan", "Catatan"]; $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); + $sheet->getStyle('A4:P4')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER], + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + ] + ] + ]); + $sheet->getStyle('A4:P4')->getFont()->setBold(true); + $sheet->getStyle('A4:P4')->getAlignment()->setHorizontal('center'); + $sheet->getStyle('A4:P4')->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(', ')); + foreach($item->orderDetail as $detail){ + $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}", $item->jenis_kelamin); + $sheet->setCellValue("F{$row}", $item->no_wa); + $sheet->setCellValue("G{$row}", $item->email); + $sheet->setCellValue("H{$row}", $item->cara_pembayaran); + $sheet->setCellValue("I{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i')); + $sheet->setCellValue("J{$row}", $item->total_harga); - // Border tiap baris - $sheet->getStyle("A{$row}:G{$row}")->getBorders()->getAllBorders() + $sheet->setCellValue("K{$row}", $detail?->menu?->nama_menu ?? '-'); + $sheet->setCellValue("L{$row}", $detail?->jumlah ?? '-'); + $sheet->setCellValue("M{$row}", $detail?->status_order ?? "-"); + $sheet->setCellValue("N{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar"); + $sheet->setCellValue("O{$row}", $detail?->type ?? "-"); + $sheet->setCellValue("P{$row}", $detail?->catatan ?? "-"); + // Border tiap baris + $sheet->getStyle("A{$row}:P{$row}")->getBorders()->getAllBorders() ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); - $row++; + $row++; + } } // Auto size kolom - foreach(range('A', 'G') as $col){ + foreach(range('A', 'P') as $col){ $sheet->getColumnDimension($col)->setAutoSize(true); } $lastRow = $row - 1; @@ -544,6 +750,139 @@ class PesananController extends Controller exit; } + public function exportLaporanPendapatan(){ + $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])->get(); + + if($type === 'pdf'){ + return $this->pdfPendapatan($startDate, $endDate, $order); + }else{ + return $this->excelPendapatan($startDate, $endDate, $order); + } + } + + public function exportSemuaPesanan(){ + $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) + ->whereBetween('entry_at', [$startDate, $endDate]); + if($type_customer !== 'all'){ + $query->where('jenis_customer', $type_customer); + } + $order = $query->with('orderDetail')->get(); + $title= 'semua-pesanan'; + $titlePdf = 'LAPORAN SEMUA PESANAN'; + if($type === 'pdf'){ + return $this->pdfHelper($startDate, $endDate, $order, $titlePdf, $title); + }else{ + return $this->excelHelper($startDate, $endDate, $order, $title); + } + } + + public function pdfPendapatan($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 Pendapatan', + 'waktu_cetak' => $waktu_cetak, + 'orders' => $order, + 'startDate' => $startDateFormatted, + 'endDate' => $endDateFormatted + ]; + $pdf = Pdf::loadView('dashboard.pesanan.laporan.pesanan.pdfPendapatan', $data); + + return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf'); + } + + public function excelPendapatan($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 Pendapatan 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 Pemesan", "Jenis Customer", "Cara Pembayaran", "Tanggal Pesan", "Harga Total"]; + $sheet->fromArray($headers, null, 'A4'); + $sheet->getStyle('A4:G4')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER], + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + ] + ] + ]); + $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; + $totalPendapatan = 0; + 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}", $item->cara_pembayaran); + $sheet->setCellValue("F{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i')); + $sheet->setCellValue("G{$row}", $item->total_harga); + $totalPendapatan += $item->total_harga; + // Border tiap baris + $sheet->getStyle("A{$row}:G{$row}")->getBorders()->getAllBorders() + ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + $row++; + } + $sheet->setCellValue("F{$row}", "Total Pendapatan"); + $sheet->setCellValue("G{$row}", $totalPendapatan); + $sheet->getStyle("F{$row}:G{$row}")->applyFromArray([ + 'font' => ['bold' => true], + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN + ] + ] + ]); + + + // Auto size kolom + foreach(range('A', 'G') as $col){ + $sheet->getColumnDimension($col)->setAutoSize(true); + } + $lastRow = $row - 1; + $sheet->setAutoFilter("A4:G{$lastRow}"); + // Download file + $fileName = 'laporan-pendapatan-' . 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 = [ @@ -580,6 +919,7 @@ class PesananController extends Controller 'o.bukti_pembayaran', 'o.note_dibatalkan', 'o.medical_record', + 'o.evidence_medical_record', 'od.status_order as detail_status_order' )->get()->groupBy('order_id'); @@ -598,6 +938,8 @@ class PesananController extends Controller 'status_order' => $first->status_order, 'bukti_pembayaran' => $first->bukti_pembayaran, 'cara_pembayaran' => $first->cara_pembayaran, + 'medical_record' => $first->medical_record, + 'evidence_medical_record' => $first->evidence_medical_record, 'progress' => $progress, 'total_detail' => $totalDetail, 'selesai_detail' => $selesaiDetail, diff --git a/app/Mail/NotifikasiCustomer.php b/app/Mail/NotifikasiCustomer.php index 5cad41a..b2b19cd 100644 --- a/app/Mail/NotifikasiCustomer.php +++ b/app/Mail/NotifikasiCustomer.php @@ -30,44 +30,11 @@ class NotifikasiCustomer extends Mailable * Get the message content definition. */ public function build(){ - return $this->subject('Konfirmasi Pesanan Anda')->html(" -
-

✅ Pesanan Berhasil!

-

Halo, {$this->pemesan},

-

Terima kasih telah melakukan pemesanan. Berikut detail pesanan Anda:

- - - - - - - - - - - - - - - - - - -
No. Order{$this->noOrder}
Tanggal" . now()->format('d M Y H:i') . "
StatusMenunggu Pembayaran
Nominal Harus BayarRp ". number_format($this->total_harga, 0,',', '.') - ."
- -

Silakan segera lakukan pembayaran ke rekening berikut:

- - -

Jika Anda tidak merasa melakukan pesanan ini, abaikan email ini.

- -
-

© " . date('Y') . " RSAB Harapan Kita

-
- "); + return $this->subject('Konfirmasi Pesanan Anda')->view('mail_view.customer') + ->with([ + 'pemesan' => $this->pemesan, + 'noOrder' => $this->noOrder, + 'total_harga' => $this->total_harga + ]); } } diff --git a/app/Mail/NotifikasiKonfirmasiPembayaran.php b/app/Mail/NotifikasiKonfirmasiPembayaran.php index 799922b..823704b 100644 --- a/app/Mail/NotifikasiKonfirmasiPembayaran.php +++ b/app/Mail/NotifikasiKonfirmasiPembayaran.php @@ -30,32 +30,13 @@ class NotifikasiKonfirmasiPembayaran extends Mailable * Get the message content definition. */ public function build(){ - return $this->subject('Pembayaran Telah Dikonfirmasi')->html(" -
-

✅ Pembayaran Berhasil Diverifikasi

-

Halo, {$this->pemesan},

-

Pembayaran kamu untuk pesanan #{$this->noOrder} telah berhasil kami verifikasi.

+ return $this->subject('Pembayaran Telah Dikonfirmasi') + ->view('mail_view.konfirmasi_pesanan') + ->with([ + 'pemesan' => $this->pemesan, + 'noOrder' => $this->noOrder, + 'total_harga' => $this->total_harga, + ]); - - - - - - - - - - - - - -
Nomor Order{$this->noOrder}
Total PembayaranRp " . number_format($this->total_harga, 0, ',', '.') . "
StatusPembayaran Diterima
- -

Pesanan kamu sedang kami proses. Silakan tunggu pemberitahuan berikutnya untuk pengambilan makanan.

- -
-

© " . date('Y') . " RSAB Harapan Kita

-
- "); } } diff --git a/app/Mail/NotifikasiPembayaran.php b/app/Mail/NotifikasiPembayaran.php index f792a63..02dea9b 100644 --- a/app/Mail/NotifikasiPembayaran.php +++ b/app/Mail/NotifikasiPembayaran.php @@ -28,20 +28,10 @@ class NotifikasiPembayaran extends Mailable * Get the message content definition. */ public function build(){ - return $this->subject('Pembayaran Diterima - Menunggu Konfirmasi')->html(" -
-

Menunggu Konfirmasi Pembayaran

-

Halo, {$this->pemesan},

-

Kami telah menerima bukti pembayaran untuk pesanan kamu dengan nomor {$this->noOrder}.

-

Tim kami akan segera memverifikasi pembayaran tersebut.

- -

Mohon tunggu konfirmasi selanjutnya dari admin. Kami akan kirimkan email ketika pembayaran telah diverifikasi.

- -

Terima kasih telah melakukan pemesanan.

- -
-

© " . date('Y') . " RSAB Harapan Kita

-
- "); + return $this->subject('Pembayaran Diterima - Menunggu Konfirmasi')->view('mail_view.pembayaran') + ->with([ + 'pemesan' => $this->pemesan, + 'noOrder' => $this->noOrder, + ]); } } diff --git a/app/Models/Order.php b/app/Models/Order.php index 65db063..e9ab8fe 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -37,7 +37,8 @@ class Order extends Model 'note_dibatalkan', 'email', 'alamat', - 'medical_record' + 'medical_record', + 'evidence_medical_record' ]; protected $cast = [ diff --git a/public/js/count/konfirmasiPesanan.js b/public/js/count/konfirmasiPesanan.js index afa2ead..a663f06 100644 --- a/public/js/count/konfirmasiPesanan.js +++ b/public/js/count/konfirmasiPesanan.js @@ -25,19 +25,14 @@ 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/action.js b/public/js/laporan_pesanan/action.js index 486db80..06d4579 100644 --- a/public/js/laporan_pesanan/action.js +++ b/public/js/laporan_pesanan/action.js @@ -11,7 +11,7 @@ function fetchDetailOrder(order_id){
- Foto Menu + Foto Menu

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

@@ -38,10 +38,12 @@ function fetchDetailOrder(order_id){ ${data.bukti_pembayaran ? `
- Bukti Pembayaran + + Bukti Pembayaran +
Bukti Pembayaran
` : ''} @@ -51,7 +53,11 @@ function fetchDetailOrder(order_id){
${data.nama_pemesan}
-

Jenis Customer: ${data.jenis_customer}

+

Jenis Kelamin: ${data?.jenis_kelamin}

+

Jenis Customer: ${data?.jenis_customer}

+

Email: ${data?.email || '-'}

+

No.Hp / WA: ${data?.no_wa || '-'}

+

Tinggi Badan / Berat Badan: ${data?.tinggi_badan || '-'} / ${data?.berat_badan || '-'}

${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? `
diff --git a/public/js/laporan_pesanan/dt.js b/public/js/laporan_pesanan/dt.js index 6973105..c56b06b 100644 --- a/public/js/laporan_pesanan/dt.js +++ b/public/js/laporan_pesanan/dt.js @@ -110,17 +110,35 @@ sortable: true, }, { - title:'Bukti Pembayaran', - formatter: function(value, row){ - if(row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran){ + title: 'Bukti Pembayaran', + formatter: function (value, row) { + if (row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran) { return ` Lihat Bukti `; - }else if(row?.cara_pembayaran === 'Billing'){ + } + + if (row?.cara_pembayaran === 'Billing') { + if (row?.evidence_medical_record) { + return ` + + `; + } return `No.MR: ${row?.medical_record || '-'}`; } + + return ''; } }, { diff --git a/public/js/pekerjaan/action.js b/public/js/pekerjaan/action.js index 9b9b9ed..7f75fc3 100644 --- a/public/js/pekerjaan/action.js +++ b/public/js/pekerjaan/action.js @@ -12,7 +12,7 @@ function detailOrder(id){
- Foto Menu + Foto Menu

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

@@ -24,10 +24,13 @@ function detailOrder(id){ ${data?.status_order}

+

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


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

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

-

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

+

No.HP / WA: ${data?.order?.no_wa || '-'}

+

Email: ${data?.order?.email || '-'}

+

Tinggi Badan / Berat Badan: ${data?.order?.tinggi_badan || '-'} / ${data?.order?.berat_badan || '-'}

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

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

` : data?.order?.jenis_customer === "Karyawan RSAB Harapan Kita" ? ` diff --git a/public/js/pesanan_pending/_init.js b/public/js/pesanan_pending/_init.js index 41e17fe..d99fd3d 100644 --- a/public/js/pesanan_pending/_init.js +++ b/public/js/pesanan_pending/_init.js @@ -13,6 +13,7 @@ const formActionProgressOrder = $("#formActionProgressOrder") const modalExport = document.getElementById('modalExportPending'); +const modalExportPekerjaan = document.getElementById('modalExportPekerjaan'); const datatableOfPekerjaan = $("#datatableVerifikasiMakananOffcanvas") const modalDetailOrder = document.getElementById('modalDetailOrderOf'); diff --git a/public/js/pesanan_pending/of_dt.js b/public/js/pesanan_pending/of_dt.js index f73a1d8..cac7d45 100644 --- a/public/js/pesanan_pending/of_dt.js +++ b/public/js/pesanan_pending/of_dt.js @@ -18,8 +18,26 @@ document.addEventListener('DOMContentLoaded', function () { }); initPekerjaanDt(); + getReminderVerifikasiMakananOffCanvas() }); +const getReminderVerifikasiMakananOffCanvas = () => { + $.ajax({ + url: `/dashboard/count/verifikasi-pesanan`, + success: function (response) { + const konfirmasiPesanan = document.getElementById("konfirmasi_pesanan_offcanvas"); + let count = response.count; + + konfirmasiPesanan.classList.remove('d-none'); + if(count === 0){ + konfirmasiPesanan.classList.add('d-none'); + } + konfirmasiPesanan.innerText = count; + }, + }); +}; + + // Update Label Tanggal function updateTimeLabel(dates) { const $timeLabel = $("#confirm_pekerjaan_time"); @@ -190,9 +208,10 @@ function detailOrder(id){

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

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

+

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


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

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

@@ -232,8 +251,8 @@ function detailOrder(id){ 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') + new bootstrap.Modal(modalExportPekerjaan).show(); + // document.getElementById('formExport').setAttribute('action', '/dashboard/pekerjaan/export') } function approve(e){ @@ -273,6 +292,7 @@ document.getElementById('formActionApproveOrder').addEventListener('submit', fun }); datatableOfPekerjaan.bootstrapTable('refresh'); getReminderVerifikasiMakanan() + getReminderVerifikasiMakananOffCanvas() bootstrap.Modal.getInstance(modalActionOrderPekerjaan).hide(); } else { throw new Error(data.message || 'Terjadi kesalahan saat mengubah status.'); diff --git a/public/js/pesanan_selesai/detail_order.js b/public/js/pesanan_selesai/detail_order.js index dc95636..2d7d545 100644 --- a/public/js/pesanan_selesai/detail_order.js +++ b/public/js/pesanan_selesai/detail_order.js @@ -11,7 +11,7 @@ function fetchDetailOrder(order_id){
- Foto Menu + Foto Menu

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

@@ -33,68 +33,79 @@ function fetchDetailOrder(order_id){ }).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.bukti_pembayaran ? ` +
+
+ Bukti Pembayaran +
Bukti Pembayaran
+
+ ` : ''} -
-
- - ${data.status_order} - + +
+
+
+
${data?.nama_pemesan}
+

Jenis Customer: ${data?.jenis_customer}

+

Email: ${data?.email || '-'}

+

No.Hp / WA: ${data?.no_wa || '-'}

+

Tinggi Badan / Berat Badan: ${data?.tinggi_badan || '-'} / ${data?.berat_badan || '-'}

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

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

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

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

+

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

+ ` + : ` +

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

+

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

+

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

+

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

+ ` + } + +
+ +
+

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} -
- `; +
+ ${detailHTML} +
+ `; document.getElementById('pesanan_container').innerHTML = html; diff --git a/public/js/pesanan_selesai/dt.js b/public/js/pesanan_selesai/dt.js index daf0452..b85479c 100644 --- a/public/js/pesanan_selesai/dt.js +++ b/public/js/pesanan_selesai/dt.js @@ -57,6 +57,38 @@ field: 'cara_pembayaran', sortable: true, }, + { + title: 'Bukti Pembayaran', + formatter: function (value, row) { + if (row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran) { + return ` + + Lihat Bukti + + `; + } + + if (row?.cara_pembayaran === 'Billing') { + if (row?.evidence_medical_record) { + return ` + + `; + } + return `No.MR: ${row?.medical_record || '-'}`; + } + + return ''; + } + }, { title: "Status Pembayaran", field: 'status_order', diff --git a/public/js/semua_pesanan/_init.js b/public/js/semua_pesanan/_init.js index d8bbd03..2f0de52 100644 --- a/public/js/semua_pesanan/_init.js +++ b/public/js/semua_pesanan/_init.js @@ -1,3 +1,5 @@ const datatableSemuaPesanan = $("#datatableSemuaPesanan") const infoPesanan = document.getElementById('infoPesanan') + +const modalExport = document.getElementById('exportSemuaPesananModal') diff --git a/public/js/semua_pesanan/action.js b/public/js/semua_pesanan/action.js index 509795c..53a3e89 100644 --- a/public/js/semua_pesanan/action.js +++ b/public/js/semua_pesanan/action.js @@ -20,7 +20,7 @@ function fetchDetailOrder(order_id){

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

Status Pesanan: + id="status_badge_${detail?.order_detail_id}"> ${detail?.status_order}

@@ -33,70 +33,80 @@ function fetchDetailOrder(order_id){ }).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.bukti_pembayaran ? ` +
+
+ Bukti Pembayaran +
Bukti Pembayaran
+
+ ` : ''} -
-
- - ${data.status_order} - + +
+
+
+
${data?.nama_pemesan}
+

Jenis Kelamin: ${data?.jenis_kelamin}

+

Jenis Customer: ${data?.jenis_customer}

+

Email: ${data?.email || '-'}

+

No.Hp / WA: ${data?.no_wa || '-'}

+

Tinggi Badan / Berat Badan: ${data?.tinggi_badan || '-'} / ${data?.berat_badan || '-'}

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

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

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

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

+

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

+ ` + : ` +

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

+

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

+

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

+

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

+ ` + } + +
+ +
+

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} -
- `; +
+ ${detailHTML} +
+ `; document.getElementById('pesanan_container').innerHTML = html; @@ -113,3 +123,7 @@ function orderLunas(order_id){ fetchDetailOrder(order_id) } + +function exportSemuaPesanan(){ + new bootstrap.Modal(modalExport).show(); +} diff --git a/public/js/semua_pesanan/dt.js b/public/js/semua_pesanan/dt.js index d0c4b8f..a9c6aa7 100644 --- a/public/js/semua_pesanan/dt.js +++ b/public/js/semua_pesanan/dt.js @@ -31,6 +31,7 @@ title: "Action", field:'order_id', formatter: function(value, row) { + let buttons = '' if(row?.status_order === "Dibatalkan") return '' @@ -118,17 +119,35 @@ sortable: true, }, { - title:'Bukti Pembayaran', - formatter: function(value, row){ - if(row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran){ + title: 'Bukti Pembayaran', + formatter: function (value, row) { + if (row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran) { return ` Lihat Bukti `; - }else if(row?.cara_pembayaran === 'Billing'){ + } + + if (row?.cara_pembayaran === 'Billing') { + if (row?.evidence_medical_record) { + return ` + + `; + } return `No.MR: ${row?.medical_record || '-'}`; } + + return ''; } }, { diff --git a/resources/views/dashboard/master/menu/modal/add.blade.php b/resources/views/dashboard/master/menu/modal/add.blade.php index 6c883fe..dffc1a5 100644 --- a/resources/views/dashboard/master/menu/modal/add.blade.php +++ b/resources/views/dashboard/master/menu/modal/add.blade.php @@ -101,6 +101,12 @@ Menu Normal
+
+ + +
diff --git a/resources/views/dashboard/master/menu/modal/edit.blade.php b/resources/views/dashboard/master/menu/modal/edit.blade.php index 12fcefb..e9bc2f3 100644 --- a/resources/views/dashboard/master/menu/modal/edit.blade.php +++ b/resources/views/dashboard/master/menu/modal/edit.blade.php @@ -96,6 +96,12 @@ Menu Normal
+
+ + +
diff --git a/resources/views/dashboard/pesanan/components/modalExport.blade.php b/resources/views/dashboard/pesanan/components/modalExport.blade.php index 6d68df0..58c52a7 100644 --- a/resources/views/dashboard/pesanan/components/modalExport.blade.php +++ b/resources/views/dashboard/pesanan/components/modalExport.blade.php @@ -19,6 +19,7 @@
@@ -38,13 +39,13 @@
- +
- +
@@ -62,9 +63,15 @@
+ document.addEventListener('DOMContentLoaded', function() { + const today = new Date().toISOString().split('T')[0]; + + document.querySelectorAll('input[id^="start_date_"]').forEach(input => { + input.value = today; + }); + + document.querySelectorAll('input[id^="end_date_"]').forEach(input => { + input.value = today; + }); + }); + diff --git a/resources/views/dashboard/pesanan/laporan/pesanan/index.blade.php b/resources/views/dashboard/pesanan/laporan/pesanan/index.blade.php index d597cdd..7fcc7d6 100644 --- a/resources/views/dashboard/pesanan/laporan/pesanan/index.blade.php +++ b/resources/views/dashboard/pesanan/laporan/pesanan/index.blade.php @@ -49,7 +49,7 @@ - + diff --git a/resources/views/dashboard/pesanan/laporan/pesanan/pdfPendapatan.blade.php b/resources/views/dashboard/pesanan/laporan/pesanan/pdfPendapatan.blade.php new file mode 100644 index 0000000..dc9c60f --- /dev/null +++ b/resources/views/dashboard/pesanan/laporan/pesanan/pdfPendapatan.blade.php @@ -0,0 +1,153 @@ + + + + + Laporan Pendapatan + + + + +
+
+
+ Logo RSAB +
+
+

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

+ @if($startDate === $endDate) +
Periode: {{ $startDate }}
+ @else +
Periode: {{ $startDate }} - {{ $endDate }}
+ @endif +
RSAB Harapan Kita
+
+
+
+ +
+ Dicetak pada: {{ $waktu_cetak }} +
+ + + + + + + + + + + + + + + @php + $no = 1; + $totalPendapatan = 0; + @endphp + @forelse ($orders as $order) + + + + + + + + + @php + $totalPendapatan += $order->total_harga; + @endphp + @empty + + + + @endforelse + + + + + + + +
NoNo OrderStatus BayarNama PemesanJenis CustomerHarga Total
{{ $no++ }}{{ $order->no_order }}{{ $order->status_order . ' ('. $order->cara_pembayaran .')' }}{{ $order->nama_pemesan }}{{ $order->jenis_customer }}Rp {{ number_format($order->total_harga, 0, '.', '.') }}
Tidak ada data pendapatan
Total Pendapatan:Rp {{ number_format($totalPendapatan, 0, '.', '.') }}
+ + + + + diff --git a/resources/views/dashboard/pesanan/laporan/pesanan/pdfPesanan.blade.php b/resources/views/dashboard/pesanan/laporan/pesanan/pdfPesanan.blade.php new file mode 100644 index 0000000..9a40815 --- /dev/null +++ b/resources/views/dashboard/pesanan/laporan/pesanan/pdfPesanan.blade.php @@ -0,0 +1,161 @@ + + + + + Laporan Pesanan Pending + + + + +
+
+
+ Logo RSAB +
+
+

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

+ @if($startDate === $endDate) +
Periode: {{ $startDate }}
+ @else +
Periode: {{ $startDate }} - {{ $endDate }}
+ @endif +
RSAB Harapan Kita
+
+
+
+ +
+ Dicetak pada: {{ $waktu_cetak }} +
+ + + + + + + + + + + + + + + + + + @php $no = 1; @endphp + @forelse ($orders as $order) + @foreach ($order->orderDetail as $i => $detail) + + + + + + + + + + + + + @endforeach + @empty + + + + @endforelse + +
NoNo OrderStatus BayarNama PemesanMenuStatus OrderJumlahHarga Satuan (Rp)Tanggal AntarWaktu Makan
{{ $i === 0 ? $no++ : '' }}{{ $i === 0 ? $order->no_order : '' }}{{ $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 }} + @if ($order->jenis_customer) +
({{ $order->jenis_customer }}) + @endif + @endif +
{{ $detail->menu->nama_menu ?? '-' }}{{ $detail->status_order ?? '-' }}{{ $detail->jumlah }}{{ number_format($detail->harga_satuan, 0, ',', '.') }} + {{ $detail->tgl_antar + ? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y') + : '-' }} + {{ $detail->type }}
Tidak ada data pesanan
+ + + + + diff --git a/resources/views/dashboard/pesanan/pekerjaan/index.blade.php b/resources/views/dashboard/pesanan/pekerjaan/index.blade.php index 5a0ab7a..c09752d 100644 --- a/resources/views/dashboard/pesanan/pekerjaan/index.blade.php +++ b/resources/views/dashboard/pesanan/pekerjaan/index.blade.php @@ -48,8 +48,7 @@ @include('dashboard.pesanan.pekerjaan.modal.detail') @include('dashboard.pesanan.pekerjaan.modal.action') - @include('dashboard.pesanan.pekerjaan.modal.export') - + diff --git a/resources/views/dashboard/pesanan/pending/index.blade.php b/resources/views/dashboard/pesanan/pending/index.blade.php index 3dd3278..558d99c 100644 --- a/resources/views/dashboard/pesanan/pending/index.blade.php +++ b/resources/views/dashboard/pesanan/pending/index.blade.php @@ -38,11 +38,14 @@
+ + + @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.modal.export') --}} @include('dashboard.pesanan.pending.offcanvas.konfirmasiPesanan') @include('dashboard.pesanan.pending.modal.actionPekerjaan') @@ -52,6 +55,6 @@ - +{{-- offcanvas --}} @endsection diff --git a/resources/views/dashboard/pesanan/pending/modal/confirmBilling.blade.php b/resources/views/dashboard/pesanan/pending/modal/confirmBilling.blade.php index 7bc5818..174e8c3 100644 --- a/resources/views/dashboard/pesanan/pending/modal/confirmBilling.blade.php +++ b/resources/views/dashboard/pesanan/pending/modal/confirmBilling.blade.php @@ -5,16 +5,20 @@ -
+ @csrf @method('put') -