laporan done

This commit is contained in:
JokoPrasetio 2025-08-13 14:37:10 +07:00
parent c1dfa20b0f
commit 265e62d456
34 changed files with 1146 additions and 296 deletions

View File

@ -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,

View File

@ -30,44 +30,11 @@ class NotifikasiCustomer extends Mailable
* Get the message content definition.
*/
public function build(){
return $this->subject('Konfirmasi Pesanan Anda')->html("
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
<h2 style='color: #28a745;'> Pesanan Berhasil!</h2>
<p>Halo, <strong>{$this->pemesan}</strong>,</p>
<p>Terima kasih telah melakukan pemesanan. Berikut detail pesanan Anda:</p>
<table style='width: 100%; border-collapse: collapse; margin-top: 16px;'>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>No. Order</td>
<td style='padding: 8px; border: 1px solid #ddd;'>{$this->noOrder}</td>
</tr>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Tanggal</td>
<td style='padding: 8px; border: 1px solid #ddd;'>" . now()->format('d M Y H:i') . "</td>
</tr>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Status</td>
<td style='padding: 8px; border: 1px solid #ddd; color: green;'>Menunggu Pembayaran</td>
</tr>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Nominal Harus Bayar</td>
<td style='padding: 8px; border: 1px solid #ddd; color: green;'>Rp ". number_format($this->total_harga, 0,',', '.')
."</td>
</tr>
</table>
<p style='margin-top: 24px;'>Silakan segera lakukan pembayaran ke rekening berikut:</p>
<ul style='list-style: none; padding: 0;'>
<li><strong>Bank:</strong> BCA</li>
<li><strong>Nomor Rekening:</strong> 1234-5678-9101</li>
<li><strong>Atas Nama:</strong> RSAB Harapan Kita</li>
</ul>
<p style='margin-top: 24px; font-size: 14px; color: #555;'>Jika Anda tidak merasa melakukan pesanan ini, abaikan email ini.</p>
<hr style='margin-top: 40px;'>
<p style='text-align: center; font-size: 12px; color: #888;'>© " . date('Y') . " RSAB Harapan Kita</p>
</div>
");
return $this->subject('Konfirmasi Pesanan Anda')->view('mail_view.customer')
->with([
'pemesan' => $this->pemesan,
'noOrder' => $this->noOrder,
'total_harga' => $this->total_harga
]);
}
}

View File

@ -30,32 +30,13 @@ class NotifikasiKonfirmasiPembayaran extends Mailable
* Get the message content definition.
*/
public function build(){
return $this->subject('Pembayaran Telah Dikonfirmasi')->html("
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
<h2 style='color: #28a745;'> Pembayaran Berhasil Diverifikasi</h2>
<p>Halo, <strong>{$this->pemesan}</strong>,</p>
<p>Pembayaran kamu untuk pesanan <strong>#{$this->noOrder}</strong> telah berhasil kami verifikasi.</p>
return $this->subject('Pembayaran Telah Dikonfirmasi')
->view('mail_view.konfirmasi_pesanan')
->with([
'pemesan' => $this->pemesan,
'noOrder' => $this->noOrder,
'total_harga' => $this->total_harga,
]);
<table style='margin-top: 16px; width: 100%; border-collapse: collapse;'>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Nomor Order</td>
<td style='padding: 8px; border: 1px solid #ddd;'>{$this->noOrder}</td>
</tr>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Total Pembayaran</td>
<td style='padding: 8px; border: 1px solid #ddd;'>Rp " . number_format($this->total_harga, 0, ',', '.') . "</td>
</tr>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Status</td>
<td style='padding: 8px; border: 1px solid #ddd; color: green;'>Pembayaran Diterima</td>
</tr>
</table>
<p style='margin-top: 24px;'>Pesanan kamu sedang kami proses. Silakan tunggu pemberitahuan berikutnya untuk pengambilan makanan.</p>
<hr style='margin-top: 40px;'>
<p style='text-align: center; font-size: 12px; color: #888;'>© " . date('Y') . " RSAB Harapan Kita</p>
</div>
");
}
}

View File

@ -28,20 +28,10 @@ class NotifikasiPembayaran extends Mailable
* Get the message content definition.
*/
public function build(){
return $this->subject('Pembayaran Diterima - Menunggu Konfirmasi')->html("
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
<h2 style='color: #0787ffff;'>Menunggu Konfirmasi Pembayaran</h2>
<p>Halo, <strong>{$this->pemesan}</strong>,</p>
<p>Kami telah menerima bukti pembayaran untuk pesanan kamu dengan nomor <strong>{$this->noOrder}</strong>.</p>
<p><strong>Tim kami akan segera memverifikasi pembayaran tersebut.</strong></p>
<p style='margin-top: 16px;'>Mohon tunggu konfirmasi selanjutnya dari admin. Kami akan kirimkan email ketika pembayaran telah diverifikasi.</p>
<p style='margin-top: 32px; font-size: 14px; color: #555;'>Terima kasih telah melakukan pemesanan.</p>
<hr style='margin-top: 40px;'>
<p style='text-align: center; font-size: 12px; color: #888;'>© " . date('Y') . " RSAB Harapan Kita</p>
</div>
");
return $this->subject('Pembayaran Diterima - Menunggu Konfirmasi')->view('mail_view.pembayaran')
->with([
'pemesan' => $this->pemesan,
'noOrder' => $this->noOrder,
]);
}
}

View File

@ -37,7 +37,8 @@ class Order extends Model
'note_dibatalkan',
'email',
'alamat',
'medical_record'
'medical_record',
'evidence_medical_record'
];
protected $cast = [

View File

@ -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;
},
});
};

View File

@ -11,7 +11,7 @@ function fetchDetailOrder(order_id){
<div class="card shadow-sm border-0">
<div class="row g-0">
<div class="col-md-5 d-flex align-items-center p-2">
<img src="/gambar/${detail?.menu?.foto || 'default.jpg'}" alt="Foto Menu" class="img-fluid rounded shadow" style="max-height: 120px; width: auto;">
<img src="/gambar/${detail?.menu?.foto || 'default.jpg'}" alt="Foto Menu" class="img-fluid rounded shadow" style="max-height: 250px; width: auto;">
</div>
<div class="col-md-5 p-2">
<p class="mb-1">Nama Menu: <strong>${detail?.menu?.nama_menu || '-'}</strong></p>
@ -38,10 +38,12 @@ function fetchDetailOrder(order_id){
${data.bukti_pembayaran ? `
<div class="col-md-4 text-center mb-3 mb-md-0">
<div class="border rounded shadow-sm p-2 bg-light">
<img src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
alt="Bukti Pembayaran"
class="img-fluid rounded"
style="max-height: 170px; width: auto;">
<a href="/storage/${data?.bukti_pembayaran}" target="_blank">
<img src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
alt="Bukti Pembayaran"
class="img-fluid rounded"
style="max-height: 170px; width: auto;">
</a>
<div class="text-muted small mt-2">Bukti Pembayaran</div>
</div>
</div>` : ''}
@ -51,7 +53,11 @@ function fetchDetailOrder(order_id){
<div class="card shadow-sm border-0">
<div class="card-body">
<h5 class="card-title text-primary mb-1">${data.nama_pemesan}</h5>
<p class="text-muted mb-2">Jenis Customer: <strong>${data.jenis_customer}</strong></p>
<p class="mb-2">Jenis Kelamin: <strong>${data?.jenis_kelamin}</strong></p>
<p class="mb-2">Jenis Customer: <strong>${data?.jenis_customer}</strong></p>
<p class="mb-2">Email: <strong>${data?.email || '-'}</strong></p>
<p class="mb-2">No.Hp / WA: <strong>${data?.no_wa || '-'}</strong></p>
<p class="mb-2">Tinggi Badan / Berat Badan: <strong>${data?.tinggi_badan || '-'} / ${data?.berat_badan || '-'}</strong></p>
${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? `
<div class="mb-2">

View File

@ -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 `
<a href="/storage/${row.bukti_pembayaran}" target="_blank" class="btn btn-sm btn-primary">
<i class="fa fa-eye"></i> Lihat Bukti
</a>
`;
}else if(row?.cara_pembayaran === 'Billing'){
}
if (row?.cara_pembayaran === 'Billing') {
if (row?.evidence_medical_record) {
return `
<ul class="list-unstyled">
<li>
<a href="/storage/${row.evidence_medical_record}" target="_blank" class="btn btn-sm btn-primary">
<i class="fa fa-eye"></i> Lihat Bukti Billing
</a>
</li>
<li>
No.MR: ${row?.medical_record || '-'}
</li>
</ul>
`;
}
return `No.MR: ${row?.medical_record || '-'}`;
}
return '';
}
},
{

View File

@ -12,7 +12,7 @@ function detailOrder(id){
<div class="card shadow-sm border-0">
<div class="row g-0">
<div class="col-md-5 d-flex align-items-center p-2">
<img src="/gambar/${data?.menu?.foto || data?.paket_menu?.foto}" alt="Foto Menu" class="img-fluid rounded shadow m-auto" style="max-height: 220px; width: auto;">
<img src="/gambar/${data?.menu?.foto || data?.paket_menu?.foto}" alt="Foto Menu" class="img-fluid rounded shadow m-auto" style="max-height: 320px; width: auto;">
</div>
<div class="col-md-7 p-1">
<p class="mb-1">Nama Menu: <strong>${data?.menu?.nama_menu || data?.paket_menu?.nama_menu}</strong></p>
@ -24,10 +24,13 @@ function detailOrder(id){
${data?.status_order}
</span>
</p>
<p class="mb-1">Catatan: <strong>${data?.catatan || '-'}</strong></p>
<hr class="my-2">
<p class="mb-1">Pemesan: <strong>${data?.order?.nama_pemesan || '-'}</strong></p>
<p class="mb-1">Jenis Kelamin: <strong>${data?.order?.jenis_kelamin || '-'}</strong></p>
<p class="mb-1">Jenis Customer: <strong>${data?.order?.jenis_customer || '-'}</strong></p>
<p class="mb-1">No.HP / WA: <strong>${data?.order?.no_wa || '-'}</strong></p>
<p class="mb-1">Email: <strong>${data?.order?.email || '-'}</strong></p>
<p class="mb-1">Tinggi Badan / Berat Badan: <strong>${data?.order?.tinggi_badan || '-'} / ${data?.order?.berat_badan || '-'}</strong></p>
${data?.order?.jenis_customer === "Masyarakat Umum" ?
`<p class="mb-1">Alamat: <strong>${data?.order?.alamat || '-'}</strong></p>
` : data?.order?.jenis_customer === "Karyawan RSAB Harapan Kita" ? `

View File

@ -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');

View File

@ -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){
<p class="mb-1">Harga Satuan: <strong>Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
<p class="mb-1">Status Pesanan:
<span class="badge text-dark ${data?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}">
${data?.status_order}
${data?.status_order}
</span>
</p>
<p class="mb-1">Catatan: <strong>${data?.catatan || '-'}</strong></p>
<hr class="my-2">
<p class="mb-1">Pemesan: <strong>${data?.order?.nama_pemesan || '-'}</strong></p>
<p class="mb-1">Jenis Kelamin: <strong>${data?.order?.jenis_kelamin || '-'}</strong></p>
@ -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.');

View File

@ -11,7 +11,7 @@ function fetchDetailOrder(order_id){
<div class="card shadow-sm border-0">
<div class="row g-0">
<div class="col-md-5 d-flex align-items-center p-2">
<img src="/gambar/${detail?.menu?.foto || 'default.jpg'}" alt="Foto Menu" class="img-fluid rounded shadow" style="max-height: 120px; width: auto;">
<img src="/gambar/${detail?.menu?.foto || 'default.jpg'}" alt="Foto Menu" class="img-fluid rounded shadow" style="max-height: 250px; width: auto;">
</div>
<div class="col-md-5 p-2">
<p class="mb-1">Nama Menu: <strong>${detail?.menu?.nama_menu || '-'}</strong></p>
@ -33,68 +33,79 @@ function fetchDetailOrder(order_id){
}).join('');
const html = `
<div class="row mt-4">
<!-- Gambar Bukti Pembayaran -->
${data.bukti_pembayaran ? `
<div class="col-md-4 text-center mb-3 mb-md-0">
<div class="border rounded shadow-sm p-2 bg-light">
<img src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
alt="Bukti Pembayaran"
class="img-fluid rounded"
style="max-height: 170px; width: auto;">
<div class="text-muted small mt-2">Bukti Pembayaran</div>
</div>
</div>` : ''}
<div class="row mt-4">
<!-- Informasi Pemesan -->
<div class="${data.bukti_pembayaran ? `col-md-8` : `col-md-12`}">
<div class="card shadow-sm border-0">
<div class="card-body">
<h5 class="card-title text-primary mb-1">${data.nama_pemesan}</h5>
<p class="text-muted mb-2">Jenis Customer: <strong>${data.jenis_customer}</strong></p>
${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? `
<div class="mb-2">
<p class="mb-1">Nama Pasien: <strong>${data.nama_pasien}</strong></p>
<p class="mb-1">Nomor Kamar: <strong>${data.no_kamar_perawatan}</strong></p>
<p class="mb-1">Ruang Perawatan: <strong>${data.ruang_perawatan}</strong></p>
<p class="mb-1">Kelas Perawatan: <strong>${data.kelas_perawatan}</strong></p>
</div>` : `
<div class="mb-2">
<p class="mb-1">Bagian / Instalasi: <strong>${data.bagian_instalasi}</strong></p>
<p class="mb-1">Ekstensien: <strong>${data.no_ekstensien || '-'}</strong></p>
</div>`}
<hr>
<div class="mb-2">
<p class="mb-1">No Order: <strong>${data.no_order}</strong></p>
<p class="mb-1">Metode Pembayaran: <strong>${data.cara_pembayaran}</strong></p>
${data?.cara_pembayaran === 'Billing' ? `
<p class="mb-1">No.Medical Record: <strong>${data.medical_record}</strong></p>
`: ''}
<p class="mb-1">Tanggal Pembayaran: <strong>${data.tgl_pembayaran || '-'}</strong></p>
<p class="mb-1">Total Harga: <strong>Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}</strong></p>
<!-- Gambar Bukti Pembayaran -->
${data.bukti_pembayaran ? `
<div class="col-md-4 text-center mb-3 mb-md-0">
<div class="border rounded shadow-sm p-2 bg-light">
<img
src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
alt="Bukti Pembayaran"
class="img-fluid rounded"
style="max-height: 170px; width: auto;">
<div class="text-muted small mt-2">Bukti Pembayaran</div>
</div>
</div>
` : ''}
<div class="mt-3">
<label class="form-label fw-semibold">Status Saat Ini:</label><br>
<span class="badge ${data?.status_order === 'Lunas' ? 'bg-success' : 'bg-warning'} text-dark">
${data.status_order}
</span>
<!-- Informasi Pemesan -->
<div class="${data.bukti_pembayaran ? 'col-md-8' : 'col-md-12'}">
<div class="card shadow-sm border-0">
<div class="card-body">
<h5 class="card-title text-primary mb-1">${data?.nama_pemesan}</h5>
<p class="mb-2">Jenis Customer: <strong>${data?.jenis_customer}</strong></p>
<p class="mb-2">Email: <strong>${data?.email || '-'}</strong></p>
<p class="mb-2">No.Hp / WA: <strong>${data?.no_wa || '-'}</strong></p>
<p class="mb-2">Tinggi Badan / Berat Badan: <strong>${data?.tinggi_badan || '-'} / ${data?.berat_badan || '-'}</strong></p>
${
data?.jenis_customer === "Masyarakat Umum"
? `
<p class="mb-1">Alamat: <strong>${data?.alamat || '-'}</strong></p>
`
: data?.jenis_customer === "Karyawan RSAB Harapan Kita"
? `
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
<p class="mb-1">No Ekstensien: <strong>${data?.no_ekstensien || '-'}</strong></p>
`
: `
<p class="mb-1">Nama Pasien: <strong>${data?.nama_pasien || '-'}</strong></p>
<p class="mb-1">Ruang Perawatan: <strong>${data?.ruang_perawatan || '-'}</strong></p>
<p class="mb-1">Nomor Kamar Perawatan: <strong>${data?.no_kamar_perawatan || '-'}</strong></p>
<p class="mb-1">Kelas Perawatan: <strong>${data?.kelas_perawatan || '-'}</strong></p>
`
}
<hr>
<div class="mb-2">
<p class="mb-1">No Order: <strong>${data.no_order}</strong></p>
<p class="mb-1">Metode Pembayaran: <strong>${data.cara_pembayaran}</strong></p>
${data?.cara_pembayaran === 'Billing' ? `
<p class="mb-1">No. Medical Record: <strong>${data.medical_record}</strong></p>
` : ''}
<p class="mb-1">Tanggal Pembayaran: <strong>${data.tgl_pembayaran || '-'}</strong></p>
<p class="mb-1">Total Harga: <strong>Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}</strong></p>
</div>
<div class="mt-3">
<label class="form-label fw-semibold">Status Saat Ini:</label><br>
<span class="badge ${data?.status_order === 'Lunas' ? 'bg-success' : 'bg-warning'} text-dark">
${data.status_order}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<hr class="my-4">
<hr class="my-4">
<div class="row">
${detailHTML}
</div>
`;
<div class="row">
${detailHTML}
</div>
`;
document.getElementById('pesanan_container').innerHTML = html;

View File

@ -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 `
<a href="/storage/${row.bukti_pembayaran}" target="_blank" class="btn btn-sm btn-primary">
<i class="fa fa-eye"></i> Lihat Bukti
</a>
`;
}
if (row?.cara_pembayaran === 'Billing') {
if (row?.evidence_medical_record) {
return `
<ul class="list-unstyled">
<li>
<a href="/storage/${row.evidence_medical_record}" target="_blank" class="btn btn-sm btn-primary">
<i class="fa fa-eye"></i> Lihat Bukti Billing
</a>
</li>
<li>
No.MR: ${row?.medical_record || '-'}
</li>
</ul>
`;
}
return `No.MR: ${row?.medical_record || '-'}`;
}
return '';
}
},
{
title: "Status Pembayaran",
field: 'status_order',

View File

@ -1,3 +1,5 @@
const datatableSemuaPesanan = $("#datatableSemuaPesanan")
const infoPesanan = document.getElementById('infoPesanan')
const modalExport = document.getElementById('exportSemuaPesananModal')

View File

@ -20,7 +20,7 @@ function fetchDetailOrder(order_id){
<p class="mb-1">Harga: <strong>Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
<p class="mb-1">Status Pesanan:
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
id="status_badge_${detail.order_detail_id}">
id="status_badge_${detail?.order_detail_id}">
${detail?.status_order}
</span>
</p>
@ -33,70 +33,80 @@ function fetchDetailOrder(order_id){
}).join('');
const html = `
<div class="row mt-4">
<!-- Gambar Bukti Pembayaran -->
${data.bukti_pembayaran ? `
<div class="col-md-4 text-center mb-3 mb-md-0">
<div class="border rounded shadow-sm p-2 bg-light">
<a href="/storage/${data.bukti_pembayaran}" target="_blank">
<img src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
alt="Bukti Pembayaran"
class="img-fluid rounded"
style="max-height: 170px; width: auto;">
</a>
<div class="text-muted small mt-2">Bukti Pembayaran</div>
</div>
</div>` : ''}
<div class="row mt-4">
<!-- Informasi Pemesan -->
<div class="${data.bukti_pembayaran ? `col-md-8` : `col-md-12`}">
<div class="card shadow-sm border-0">
<div class="card-body">
<h5 class="card-title text-primary mb-1">${data.nama_pemesan}</h5>
<p class="text-muted mb-2">Jenis Customer: <strong>${data.jenis_customer}</strong></p>
${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? `
<div class="mb-2">
<p class="mb-1">Nama Pasien: <strong>${data.nama_pasien}</strong></p>
<p class="mb-1">Nomor Kamar: <strong>${data.no_kamar_perawatan}</strong></p>
<p class="mb-1">Ruang Perawatan: <strong>${data.ruang_perawatan}</strong></p>
<p class="mb-1">Kelas Perawatan: <strong>${data.kelas_perawatan}</strong></p>
</div>` : `
<div class="mb-2">
<p class="mb-1">Bagian / Instalasi: <strong>${data.bagian_instalasi}</strong></p>
<p class="mb-1">Ekstensien: <strong>${data.no_ekstensien || '-'}</strong></p>
</div>`}
<hr>
<div class="mb-2">
<p class="mb-1">No Order: <strong>${data.no_order}</strong></p>
<p class="mb-1">Metode Pembayaran: <strong>${data.cara_pembayaran}</strong></p>
${data?.cara_pembayaran === 'Billing' ? `
<p class="mb-1">No.Medical Record: <strong>${data.medical_record}</strong></p>
`: ''}
<p class="mb-1">Tanggal Pembayaran: <strong>${data.tgl_pembayaran || '-'}</strong></p>
<p class="mb-1">Total Harga: <strong>Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}</strong></p>
<!-- Gambar Bukti Pembayaran -->
${data.bukti_pembayaran ? `
<div class="col-md-4 text-center mb-3 mb-md-0">
<div class="border rounded shadow-sm p-2 bg-light">
<img
src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
alt="Bukti Pembayaran"
class="img-fluid rounded"
style="max-height: 170px; width: auto;">
<div class="text-muted small mt-2">Bukti Pembayaran</div>
</div>
</div>
` : ''}
<div class="mt-3">
<label class="form-label fw-semibold">Status Saat Ini:</label><br>
<span class="badge ${data?.status_order === 'Lunas' ? 'bg-success' : 'bg-warning'} text-dark">
${data.status_order}
</span>
<!-- Informasi Pemesan -->
<div class="${data.bukti_pembayaran ? 'col-md-8' : 'col-md-12'}">
<div class="card shadow-sm border-0">
<div class="card-body">
<h5 class="card-title text-primary mb-1">${data?.nama_pemesan}</h5>
<p class="mb-2">Jenis Kelamin: <strong>${data?.jenis_kelamin}</strong></p>
<p class="mb-2">Jenis Customer: <strong>${data?.jenis_customer}</strong></p>
<p class="mb-2">Email: <strong>${data?.email || '-'}</strong></p>
<p class="mb-2">No.Hp / WA: <strong>${data?.no_wa || '-'}</strong></p>
<p class="mb-2">Tinggi Badan / Berat Badan: <strong>${data?.tinggi_badan || '-'} / ${data?.berat_badan || '-'}</strong></p>
${
data?.jenis_customer === "Masyarakat Umum"
? `
<p class="mb-1">Alamat: <strong>${data?.alamat || '-'}</strong></p>
`
: data?.jenis_customer === "Karyawan RSAB Harapan Kita"
? `
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
<p class="mb-1">No Ekstensien: <strong>${data?.no_ekstensien || '-'}</strong></p>
`
: `
<p class="mb-1">Nama Pasien: <strong>${data?.nama_pasien || '-'}</strong></p>
<p class="mb-1">Ruang Perawatan: <strong>${data?.ruang_perawatan || '-'}</strong></p>
<p class="mb-1">Nomor Kamar Perawatan: <strong>${data?.no_kamar_perawatan || '-'}</strong></p>
<p class="mb-1">Kelas Perawatan: <strong>${data?.kelas_perawatan || '-'}</strong></p>
`
}
<hr>
<div class="mb-2">
<p class="mb-1">No Order: <strong>${data.no_order}</strong></p>
<p class="mb-1">Metode Pembayaran: <strong>${data.cara_pembayaran}</strong></p>
${data?.cara_pembayaran === 'Billing' ? `
<p class="mb-1">No. Medical Record: <strong>${data.medical_record}</strong></p>
` : ''}
<p class="mb-1">Tanggal Pembayaran: <strong>${data.tgl_pembayaran || '-'}</strong></p>
<p class="mb-1">Total Harga: <strong>Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}</strong></p>
</div>
<div class="mt-3">
<label class="form-label fw-semibold">Status Saat Ini:</label><br>
<span class="badge ${data?.status_order === 'Lunas' ? 'bg-success' : 'bg-warning'} text-dark">
${data.status_order}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<hr class="my-4">
<hr class="my-4">
<div class="row">
${detailHTML}
</div>
`;
<div class="row">
${detailHTML}
</div>
`;
document.getElementById('pesanan_container').innerHTML = html;
@ -113,3 +123,7 @@ function orderLunas(order_id){
fetchDetailOrder(order_id)
}
function exportSemuaPesanan(){
new bootstrap.Modal(modalExport).show();
}

View File

@ -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 `
<a href="/storage/${row.bukti_pembayaran}" target="_blank" class="btn btn-sm btn-primary">
<i class="fa fa-eye"></i> Lihat Bukti
</a>
`;
}else if(row?.cara_pembayaran === 'Billing'){
}
if (row?.cara_pembayaran === 'Billing') {
if (row?.evidence_medical_record) {
return `
<ul class="list-unstyled">
<li>
<a href="/storage/${row.evidence_medical_record}" target="_blank" class="btn btn-sm btn-primary">
<i class="fa fa-eye"></i> Lihat Bukti Billing
</a>
</li>
<li>
No.MR: ${row?.medical_record || '-'}
</li>
</ul>
`;
}
return `No.MR: ${row?.medical_record || '-'}`;
}
return '';
}
},
{

View File

@ -101,6 +101,12 @@
Menu Normal
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="data[0][kategori_menu]" id="" value="Menu MCU" required>
<label class="form-check-label" for="">
Menu MCU
</label>
</div>
</div>
<div class="col-md-6">
<label for="exampleInputEmail1" class="form-label">Waktu Menu Tersedia</label>

View File

@ -96,6 +96,12 @@
Menu Normal
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="data[0][kategori_menu]" id="" value="Menu MCU" required>
<label class="form-check-label" for="">
Menu MCU
</label>
</div>
</div>
<div class="col-md-6">
<label for="exampleInputEmail1" class="form-label">Waktu Menu Tersedia</label>

View File

@ -19,6 +19,7 @@
<div class="form-group">
<label for="exampleFormControlInput1">Pilih type dokumen</label>
<select class="form-control" name="type" required>
<option value="" disabled selected>Pilih Type Dokumen</option>
<option value="pdf">PDF</option>
<option value="excel">Excel</option>
</select>
@ -38,13 +39,13 @@
<div class="col-md-6 mb-2">
<div class="form-group">
<label for="exampleFormControlInput1">Start Date</label>
<input type="date" class="form-control" name="start_date" id="start_date" required>
<input type="date" class="form-control" name="start_date" id="start_date_{{ $modalId }}" required>
</div>
</div>
<div class="col-md-6 mb-2">
<div class="form-group">
<label for="exampleFormControlInput1">End Date</label>
<input type="date" class="form-control" name="end_date" id="end_date" required>
<input type="date" class="form-control" name="end_date" id="end_date_{{ $modalId }}" required>
</div>
</div>
</div>
@ -62,9 +63,15 @@
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const today = new Date().toISOString().split('T')[0]; // Mendapatkan tanggal hari ini dalam format YYYY-MM-DD
$('#start_date').val(today);
$('#end_date').val(today);
});
</script>
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;
});
});
</script>

View File

@ -49,7 +49,7 @@
<x-modalExport modalId="exportLp" form="/dashboard/export/laporan-pesanan" confirm="Pesanan"/>
<x-modalExport modalId="exportPendapatan" form="/dashboard/export/laporan-pendapatan" confirm="Pendapatan"/>
<x-infoPesanan modalId="infoPesanan" judulModal="Info Pesanan" />
<script src="{{ ver('/js/laporan_pesanan/_init.js') }}"></script>
<script src="{{ ver('/js/laporan_pesanan/dt.js') }}"></script>
<script src="{{ ver('/js/laporan_pesanan/action.js') }}"></script>

View File

@ -0,0 +1,153 @@
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Laporan Pendapatan</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 10px;
line-height: 1.5;
margin: 20px;
color: #333;
}
.header {
margin-bottom: 10px;
padding-bottom: 10px;
}
.header h2 {
margin: 0;
font-size: 20px;
text-transform: uppercase;
}
.header .sub-title {
margin: 4px 0 0;
font-size: 13px;
color: #666;
}
.meta {
text-align: right;
margin-bottom: 15px;
font-size: 12px;
font-weight: bold;
color: #444;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 5px;
table-layout: fixed;
}
th, td {
border: 1px solid #ccc;
padding: 6px 8px;
word-wrap: break-word;
word-break: break-word;
}
th {
background-color: #f0f0f0;
text-align: center;
font-size: 10px;
}
td {
font-size: 10px;
vertical-align: top;
}
tr:nth-child(even) td {
background-color: #f9f9f9;
}
.footer {
position: absolute;
bottom: 30px;
width: 100%;
text-align: center;
font-size: 10px;
color: #999;
}
</style>
</head>
<body>
<div class="header">
<div style=" align-items: center;">
<div>
<img src="{{ public_path('logo/logo_rsabhk.png') }}" alt="Logo RSAB" style="height: 45px;">
</div>
<div style="margin-left: 37px; margin-top: -45px; text-align: center;">
<h2>{{ $laporan ?? 'Laporan Konfirmasi Pesanan' }} </h2>
@if($startDate === $endDate)
<div class="sub-title">Periode: {{ $startDate }}</div>
@else
<div class="sub-title">Periode: {{ $startDate }} - {{ $endDate }}</div>
@endif
<div class="sub-title">RSAB Harapan Kita</div>
</div>
</div>
</div>
<div class="meta">
Dicetak pada: {{ $waktu_cetak }}
</div>
<table>
<thead>
<tr>
<th style="width:5%;">No</th>
<th>No Order</th>
<th>Status Bayar</th>
<th>Nama Pemesan</th>
<th>Jenis Customer</th>
<th>Harga Total</th>
</tr>
</thead>
<tbody>
@php
$no = 1;
$totalPendapatan = 0;
@endphp
@forelse ($orders as $order)
<tr>
<td>{{ $no++ }}</td>
<td>{{ $order->no_order }}</td>
<td>{{ $order->status_order . ' ('. $order->cara_pembayaran .')' }}</td>
<td>{{ $order->nama_pemesan }}</td>
<td>{{ $order->jenis_customer }}</td>
<td>Rp {{ number_format($order->total_harga, 0, '.', '.') }}</td>
</tr>
@php
$totalPendapatan += $order->total_harga;
@endphp
@empty
<tr>
<td colspan="9" style="text-align: center; color: #888;">Tidak ada data pendapatan</td>
</tr>
@endforelse
</tbody>
<tfoot>
<tr>
<td colspan="5" style="text-align: right; font-weight: bold;">Total Pendapatan:</td>
<td>Rp {{ number_format($totalPendapatan, 0, '.', '.') }}</td>
</tr>
</tfoot>
</table>
<div class="footer">
&copy; {{ date('Y') }} RSAB Harapan Kita - Sistem Order Gizi
</div>
</body>
</html>

View File

@ -0,0 +1,161 @@
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Laporan Pesanan Pending</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 10px;
line-height: 1.5;
margin: 20px;
color: #333;
}
.header {
margin-bottom: 10px;
padding-bottom: 10px;
}
.header h2 {
margin: 0;
font-size: 20px;
text-transform: uppercase;
}
.header .sub-title {
margin: 4px 0 0;
font-size: 13px;
color: #666;
}
.meta {
text-align: right;
margin-bottom: 15px;
font-size: 12px;
font-weight: bold;
color: #444;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 5px;
table-layout: fixed;
}
th, td {
border: 1px solid #ccc;
padding: 6px 8px;
word-wrap: break-word;
word-break: break-word;
}
th {
background-color: #f0f0f0;
text-align: center;
font-size: 10px;
}
td {
font-size: 10px;
vertical-align: top;
}
tr:nth-child(even) td {
background-color: #f9f9f9;
}
.footer {
position: absolute;
bottom: 30px;
width: 100%;
text-align: center;
font-size: 10px;
color: #999;
}
</style>
</head>
<body>
<div class="header">
<div style=" align-items: center;">
<div>
<img src="{{ public_path('logo/logo_rsabhk.png') }}" alt="Logo RSAB" style="height: 45px;">
</div>
<div style="margin-left: 37px; margin-top: -45px; text-align: center;">
<h2>{{ $laporan ?? 'Laporan Konfirmasi Pesanan' }} </h2>
@if($startDate === $endDate)
<div class="sub-title">Periode: {{ $startDate }}</div>
@else
<div class="sub-title">Periode: {{ $startDate }} - {{ $endDate }}</div>
@endif
<div class="sub-title">RSAB Harapan Kita</div>
</div>
</div>
</div>
<div class="meta">
Dicetak pada: {{ $waktu_cetak }}
</div>
<table>
<thead>
<tr>
<th style="width:5%;">No</th>
<th>No Order</th>
<th>Status Bayar</th>
<th>Nama Pemesan</th>
<th>Menu</th>
<th>Status Order</th>
<th style="width:9%;">Jumlah</th>
<th style="width:9%; text-align:center;">Harga Satuan (Rp)</th>
<th>Tanggal Antar</th>
<th>Waktu Makan</th>
</tr>
</thead>
<tbody>
@php $no = 1; @endphp
@forelse ($orders as $order)
@foreach ($order->orderDetail as $i => $detail)
<tr>
<td>{{ $i === 0 ? $no++ : '' }}</td>
<td>{{ $i === 0 ? $order->no_order : '' }}</td>
<td>{{ $i === 0 ? (($order->status_order === "Belum Bayar" || $order->status_order === "Dibatalkan" ) ? $order->status_order : $order->status_order . ' ('. $order->cara_pembayaran .')' ) : '' }}</td>
<td>
@if ($i === 0)
{{ $order->nama_pemesan }}
@if ($order->jenis_customer)
<br><small>({{ $order->jenis_customer }})</small>
@endif
@endif
</td>
<td>{{ $detail->menu->nama_menu ?? '-' }}</td>
<td>{{ $detail->status_order ?? '-' }}</td>
<td style="text-align: center;">{{ $detail->jumlah }}</td>
<td style="text-align: right;">{{ number_format($detail->harga_satuan, 0, ',', '.') }}</td>
<td style="text-align: center;">
{{ $detail->tgl_antar
? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y')
: '-' }}
</td>
<td style="text-align: center;">{{ $detail->type }}</td>
</tr>
@endforeach
@empty
<tr>
<td colspan="9" style="text-align: center; color: #888;">Tidak ada data pesanan</td>
</tr>
@endforelse
</tbody>
</table>
<div class="footer">
&copy; {{ date('Y') }} RSAB Harapan Kita Sistem Order Gizi
</div>
</body>
</html>

View File

@ -48,8 +48,7 @@
@include('dashboard.pesanan.pekerjaan.modal.detail')
@include('dashboard.pesanan.pekerjaan.modal.action')
@include('dashboard.pesanan.pekerjaan.modal.export')
<x-modalExport modalId="modalExportPekerjaan" form="/dashboard/pekerjaan/export" confirm="Verifikasi Makanan"/>
<script src="{{ ver('/js/pekerjaan/_init.js') }}"></script>
<script src="{{ ver('/js/pekerjaan/dt.js') }}"></script>
<script src="{{ ver('/js/pekerjaan/action.js') }}"></script>

View File

@ -38,11 +38,14 @@
</div>
</div>
<x-modalExport modalId="modalExportPending" form="/dashboard/pending/export" confirm="Konfirmasi Pesanan"/>
<x-modalExport modalId="modalExportPekerjaan" form="/dashboard/pekerjaan/export" confirm="Verifikasi Makanan"/>
@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 @@
<script src="{{ ver('/js/pesanan_pending/action.js') }}"></script>
<script src="{{ ver('/js/pesanan_pending/action_progres_order.js') }}"></script>
{{-- offcanvas --}}
<script src="{{ ver('/js/pesanan_pending/of_dt.js') }}"></script>
@endsection

View File

@ -5,16 +5,20 @@
<!-- Modal Header -->
<div class="modal-header">
<h5 class="modal-title fs-5">Aksi </h1>
<h5 class="modal-title fs-5">Apakah kamu yakin melakukan persetujuan pada order ini ? <strong id="confirmActionApproveBillingOrder"></strong> </h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<!-- Modal Form -->
<form method="POST" id="formActionApproveBillingOrder">
<form method="POST" id="formActionApproveBillingOrder" enctype="multipart/form-data">
@csrf
@method('put')
<div class="modal-body ">
Apakah kamu yakin melakukan persetujuan pada order ini ? <strong id="confirmActionApproveBillingOrder"></strong>
<div class="modal-body">
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Upload Dokumen</label>
<input type="file" class="form-control" name="evidence_medical_record" >
<div class="form-text">Upload dokumen pendukung persetujuan order via billing.</div>
</div>
</div>
<!-- Modal Footer -->

View File

@ -15,14 +15,24 @@
<div class="modal-body">
<div class="container">
<div class="row">
<div class="col-md-12 ">
<div class="form-group mb-2">
<label for="exampleFormControlInput1">Type Document</label>
<select class="form-control" name="type" required>
<option value="" disabled selected>Select Choose</option>
<option value="pdf">PDF</option>
<option value="excel">Excel</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<div class="form-group mb-2">
<label for="exampleFormControlInput1">Start Date</label>
<input type="date" class="form-control" name="start_date" id="start_date" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<div class="col-md-6 ">
<div class="form-group mb-2">
<label for="exampleFormControlInput1">End Date</label>
<input type="date" class="form-control" name="end_date" id="end_date" required>
</div>

View File

@ -36,8 +36,7 @@
</div>
@include('dashboard.pesanan.selesai.modal.actionPesananSelesai')
@include('dashboard.pesanan.selesai.modal.export')
<x-modalExport modalId="modalExportSelesai" form="/dashboard/selesai/export" confirm="Pesanan Selesai"/>
<script src="{{ ver('/js/pesanan_selesai/_init.js') }}"></script>
<script src="{{ ver('/js/pesanan_selesai/dt.js') }}"></script>
<script src="{{ ver('/js/pesanan_selesai/detail_order.js') }}"></script>

View File

@ -15,14 +15,24 @@
<div class="modal-body">
<div class="container">
<div class="row">
<div class="col-md-12 ">
<div class="form-group mb-2">
<label for="exampleFormControlInput1">Type Document</label>
<select class="form-control" name="type" required>
<option value="" disabled selected>Select Choose</option>
<option value="pdf">PDF</option>
<option value="excel">Excel</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<div class="form-group mb-2">
<label for="exampleFormControlInput1">Start Date</label>
<input type="date" class="form-control" name="start_date" id="start_date" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<div class="form-group mb-2">
<label for="exampleFormControlInput1">End Date</label>
<input type="date" class="form-control" name="end_date" id="end_date" required>
</div>

View File

@ -12,6 +12,9 @@
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0">Semua Pesanan <strong id="confirm_semua_pesanan_time"></strong></h5>
<div class="d-flex align-items-center gap-2">
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="exportSemuaPesanan()">
<i class="fa fa-download me-1"></i> Export
</button>
<div class="input-group input-group-sm" style="width: 240px;">
<span class="input-group-text bg-white">
<i class="fa fa-calendar-alt"></i>
@ -33,6 +36,7 @@
</div>
<x-infoPesanan modalId="infoPesanan" judulModal="Info Pesanan" />
<x-modalExport modalId="exportSemuaPesananModal" form="/dashboard/export/semua-pesanan" confirm="Semua Pesanan"/>
<script src="{{ ver('/js/semua_pesanan/_init.js') }}"></script>
<script src="{{ ver('/js/semua_pesanan/dt.js') }}"></script>

View File

@ -1,4 +1,5 @@
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
<img src="/logo/logo_rsabhk.png" alt="RSAB Harapan Kita" style="height: 60px; width:auto; margin-botton: 26px;">
<h2 style='color: #28a745;'> Pembayaran Berhasil Diverifikasi</h2>
<p>Halo, <strong>{$this->nama}</strong>,</p>
<p>Pembayaran kamu untuk pesanan <strong>#{$this->no_order}</strong> telah berhasil kami verifikasi.</p>

View File

@ -0,0 +1,37 @@
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
<img src='{{ $message->embed(public_path('logo/logo_rsabhk.png')) }}' style='height: 60px; width:auto; margin-botton: 26px;'>
<h2 style='color: #28a745;'> Pesanan Berhasil!</h2>
<p>Halo, <strong>{{ $pemesan }}</strong>,</p>
<p>Terima kasih telah melakukan pemesanan. Berikut detail pesanan Anda:</p>
<table style='width: 100%; border-collapse: collapse; margin-top: 16px;'>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>No. Order</td>
<td style='padding: 8px; border: 1px solid #ddd;'> {{ $noOrder }}</td>
</tr>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Tanggal</td>
<td style='padding: 8px; border: 1px solid #ddd;'>{{ now()->format('d M Y H:i') }}</td>
</tr>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Status</td>
<td style='padding: 8px; border: 1px solid #ddd; color: green;'>Menunggu Pembayaran</td>
</tr>
<tr>
<td style='padding: 8px; border: 1px solid #ddd;'>Nominal Harus Bayar</td>
<td style='padding: 8px; border: 1px solid #ddd; color: green;'>Rp {{ number_format($total_harga, 0,',', '.') }}</td>
</tr>
</table>
<p style='margin-top: 24px;'>Silakan segera lakukan pembayaran.</p>
{{-- <ul style='list-style: none; padding: 0;'>
<li><strong>Bank:</strong> BCA</li>
<li><strong>Nomor Rekening:</strong> 1234-5678-9101</li>
<li><strong>Atas Nama:</strong> RSAB Harapan Kita</li>
</ul> --}}
<p style='margin-top: 24px; font-size: 14px; color: #555;'>Jika Anda tidak merasa melakukan pesanan ini, abaikan email ini.</p>
<hr style='margin-top: 40px;'>
<p style='text-align: center; font-size: 12px; color: #888;'>© {{ date('Y') }} RSAB Harapan Kita</p>
</div>

View File

@ -0,0 +1,33 @@
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;">
<img src="{{ $message->embed(public_path('logo/logo_rsabhk.png')) }}"
alt="RSAB Harapan Kita"
style="height: 60px; width:auto; margin-bottom: 26px;">
<h2 style="color: #28a745;"> Pembayaran Berhasil Diverifikasi</h2>
<p>Halo, <strong>{{ $pemesan }}</strong>,</p>
<p>Pembayaran kamu untuk pesanan <strong>#{{ $noOrder }}</strong> telah berhasil kami verifikasi.</p>
<table style="margin-top: 16px; width: 100%; border-collapse: collapse;">
<tr>
<td style="padding: 8px; border: 1px solid #ddd;">Nomor Order</td>
<td style="padding: 8px; border: 1px solid #ddd;">{{ $noOrder }}</td>
</tr>
<tr>
<td style="padding: 8px; border: 1px solid #ddd;">Total Pembayaran</td>
<td style="padding: 8px; border: 1px solid #ddd;">
Rp {{ number_format($total_harga, 0, ',', '.') }}
</td>
</tr>
<tr>
<td style="padding: 8px; border: 1px solid #ddd;">Status</td>
<td style="padding: 8px; border: 1px solid #ddd; color: green;">Pembayaran Diterima</td>
</tr>
</table>
<p style="margin-top: 24px;">Pesanan kamu sedang kami proses. Silakan tunggu pemberitahuan berikutnya untuk pengambilan makanan.</p>
<hr style="margin-top: 40px;">
<p style="text-align: center; font-size: 12px; color: #888;">
© {{ date('Y') }} RSAB Harapan Kita
</p>
</div>

View File

@ -0,0 +1,14 @@
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
<img src="{{ $message->embed(public_path('logo/logo_rsabhk.png')) }}" style='height: 60px; width:auto; margin-botton: 26px;'>
<h2 style='color: #0787ffff;'>Menunggu Konfirmasi Pembayaran</h2>
<p>Halo, <strong>{{ $pemesan }}</strong>,</p>
<p>Kami telah menerima bukti pembayaran untuk pesanan kamu dengan nomor <strong>{{ $noOrder }}</strong>.</p>
<p><strong>Tim kami akan segera memverifikasi pembayaran tersebut.</strong></p>
<p style='margin-top: 16px;'>Mohon tunggu konfirmasi selanjutnya dari admin. Kami akan kirimkan email ketika pembayaran telah diverifikasi.</p>
<p style='margin-top: 32px; font-size: 14px; color: #555;'>Terima kasih telah melakukan pemesanan.</p>
<hr style='margin-top: 40px;'>
<p style='text-align: center; font-size: 12px; color: #888;'>© {{ date('Y') }} RSAB Harapan Kita</p>
</div>

View File

@ -64,7 +64,8 @@ Route::group(['middleware' => ['auth']], function(){
Route::get('/laporan-pesanan', [PesananController::class, 'laporanPesanan']);
Route::get('datatable/laporan-pesanan', [PesananController::class, 'getLaporanPesanan']);
Route::post('export/laporan-pesanan', [PesananController::class, 'exportLaporanPesanan']);
Route::post('export/laporan-pendapatan', [PesananController::class, 'exportLaporanPendapatan']);
Route::post('export/semua-pesanan', [PesananController::class, 'exportSemuaPesanan']);
Route::get('/pekerjaan', [PesananController::class, 'pekerjaan']);
Route::get('datatable/pekerjaan', [PesananController::class, 'getPekerjaan']);