From 9a1d59f608985e6ec73c9398c4fd56d6765c56ab Mon Sep 17 00:00:00 2001 From: JokoPrasetio Date: Fri, 10 Oct 2025 16:33:45 +0700 Subject: [PATCH] add ruangan, jenis menu, total tagihan, jenis pembayaran --- app/Http/Controllers/PesananController.php | 141 +++++++++++++-------- app/Models/OrderDetail.php | 2 +- 2 files changed, 88 insertions(+), 55 deletions(-) diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php index fc214ea..a180227 100644 --- a/app/Http/Controllers/PesananController.php +++ b/app/Http/Controllers/PesananController.php @@ -508,20 +508,19 @@ class PesananController extends Controller $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:R1'); + $sheet->mergeCells('A1:T1'); $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14); $sheet->getStyle('A1')->getAlignment()->setHorizontal('center'); $sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}"); - $sheet->mergeCells('A2:R2'); + $sheet->mergeCells('A2:T2'); $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", "Total Kalori", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"]; + $headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Ruangan", "Status Pembayaran", "Jenis Kelamin", "NO.HP/WA", "Email" , "Jenis Pembayaran", "Tanggal Pesan", "Harga Total", "Jenis Menu", "Menu Pesanan", "Total Kalori", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"]; $sheet->fromArray($headers, null, 'A4'); - $sheet->getStyle('A4:R4')->applyFromArray([ + $sheet->getStyle('A4:T4')->applyFromArray([ 'font' => ['bold' => true], 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER], 'borders' => [ @@ -530,47 +529,64 @@ class PesananController extends Controller ] ] ]); - $sheet->getStyle('A4:R4')->getFont()->setBold(true); - $sheet->getStyle('A4:R4')->getAlignment()->setHorizontal('center'); - $sheet->getStyle('A4:R4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); - + $sheet->getStyle('A4:T4')->getFont()->setBold(true); + $sheet->getStyle('A4:T4')->getAlignment()->setHorizontal('center'); + $sheet->getStyle('A4:T4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); // Isi data + $totalPendapatan = 0; $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 === "MCU" ? $item->nama_institusi . '-' . $item->jenis_customer : $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 ?? $detail?->masterMcu?->nama_mcu); - $sheet->setCellValue("M{$row}", $detail?->total_kalori ?? '-'); - $sheet->setCellValue("N{$row}", $detail?->jumlah ?? '-'); - $sheet->setCellValue("O{$row}", $detail?->status_order ?? "-"); - $sheet->setCellValue("P{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar"); - $sheet->setCellValue("Q{$row}", $detail?->type ?? $detail->jam_layanan); - $sheet->setCellValue("R{$row}", $detail?->catatan ?? "-"); + if($item->jenis_customer === "Keluarga Pasien / Penunggu Pasien"){ + $sheet->setCellValue("E{$row}", $item->kelas_perawatan . '/' . $item->no_kamar_perawatan . '/' . $item->ruang_perawatan); + }else if($item->jenis_customer === "Karyawan RSAB Harapan Kita"){ + $sheet->setCellValue("E{$row}", $item->bagian_instalasi ?? '-'); + }else{ + $sheet->setCellValue("E{$row}", '-'); + } + $sheet->setCellValue("F{$row}", $item->status_order); + $sheet->setCellValue("G{$row}", $item->jenis_kelamin); + $sheet->setCellValue("H{$row}", $item->no_wa); + $sheet->setCellValue("I{$row}", $item->email); + $sheet->setCellValue("J{$row}", $item->cara_pembayaran); + $sheet->setCellValue("K{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i')); + $sheet->setCellValue("L{$row}", $item->total_harga); + if($detail?->masterMcu){ + $sheet->setCellValue("M{$row}", 'Menu MCU'); + }else{ + $sheet->setCellValue("M{$row}", $detail?->menu?->apakah_someday ? "Menu Someday" : "Menu Normal"); + } + $sheet->setCellValue("N{$row}", $detail?->menu?->nama_menu ?? $detail?->masterMcu?->nama_mcu); + $sheet->setCellValue("O{$row}", $detail?->total_kalori ?? '-'); + $sheet->setCellValue("P{$row}", $detail?->jumlah ?? '-'); + $sheet->setCellValue("Q{$row}", $detail?->status_order ?? "-"); + $sheet->setCellValue("R{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar"); + $sheet->setCellValue("S{$row}", $detail?->type ?? $detail->jam_layanan); + $sheet->setCellValue("T{$row}", $detail?->catatan ?? "-"); // Border tiap baris - $sheet->getStyle("A{$row}:R{$row}")->getBorders()->getAllBorders() + $sheet->getStyle("A{$row}:T{$row}")->getBorders()->getAllBorders() ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); - + if($item->status_order === "Lunas"){ + $totalPendapatan += $item?->total_harga; + } $row++; } } - + $sheet->getStyle("K{$row}:L{$row}")->getFont()->setBold(true); + $sheet->getStyle("K{$row}:L{$row}")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + $sheet->setCellValue("K{$row}", 'Total Pendapatan'); + $sheet->setCellValue("L{$row}", $totalPendapatan); // Auto size kolom - foreach(range('A', 'R') as $col){ + foreach(range('A', 'T') as $col){ $sheet->getColumnDimension($col)->setAutoSize(true); } $lastRow = $row - 1; - $sheet->setAutoFilter("A4:R{$lastRow}"); + $sheet->setAutoFilter("A4:T{$lastRow}"); // Download file $fileName = $title . now()->format('Ymd-His') . '.xlsx'; $writer = new Xlsx($spreadsheet); @@ -746,18 +762,18 @@ class PesananController extends Controller $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}"); - $sheet->mergeCells('A1:Q1'); + $sheet->mergeCells('A1:R1'); $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14); $sheet->getStyle('A1')->getAlignment()->setHorizontal('center'); $sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}"); - $sheet->mergeCells('A2:Q2'); + $sheet->mergeCells('A2:S2'); $sheet->getStyle('A2')->getAlignment()->setHorizontal('center'); // Header tabel - $headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Jenis Kelamin", "NO.HP/WA", "Email" , "Cara Pembayaran", "Tanggal Pesan", "Harga Total", "Menu Pesanan", "Total Kalori (kal)", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"]; + $headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Ruangan", "Jenis Kelamin", "NO.HP/WA", "Email" , "Jenis Pembayaran", "Tanggal Pesan", "Harga Total", "Jenis Menu", "Menu Pesanan", "Total Kalori (kal)", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"]; $sheet->fromArray($headers, null, 'A4'); - $sheet->getStyle('A4:Q4')->applyFromArray([ + $sheet->getStyle('A4:S4')->applyFromArray([ 'font' => ['bold' => true], 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER], 'borders' => [ @@ -766,46 +782,63 @@ class PesananController extends Controller ] ] ]); - $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); + $sheet->getStyle('A4:S4')->getFont()->setBold(true); + $sheet->getStyle('A4:S4')->getAlignment()->setHorizontal('center'); + $sheet->getStyle('A4:S4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); // Isi data $row = 5; + $totalPendapatan = 0; 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 === "MCU" ? $item->nama_institusi . '-' . $item->jenis_customer : $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); + if($item->jenis_customer === "Keluarga Pasien / Penunggu Pasien"){ + $sheet->setCellValue("E{$row}", $item->kelas_perawatan . '/' . $item->no_kamar_perawatan . '/' . $item->ruang_perawatan); + }else if($item->jenis_customer === "Karyawan RSAB Harapan Kita"){ + $sheet->setCellValue("E{$row}", $item->bagian_instalasi ?? '-'); + }else{ + $sheet->setCellValue("E{$row}", '-'); + } + $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("K{$row}", $detail?->menu?->nama_menu ?? $detail?->masterMcu?->nama_mcu); - $sheet->setCellValue("L{$row}", $detail?->total_kalori ?? '-'); - $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') : "-"); - $sheet->setCellValue("P{$row}", $detail?->type ?? $detail->jam_layanan); - $sheet->setCellValue("Q{$row}", $detail?->catatan ?? "-"); + if($detail?->masterMcu){ + $sheet->setCellValue("L{$row}", 'Menu MCU'); + }else{ + $sheet->setCellValue("L{$row}", $detail?->menu?->apakah_someday ? "Menu Someday" : "Menu Normal"); + } + $sheet->setCellValue("M{$row}", $detail?->menu?->nama_menu ?? $detail?->masterMcu?->nama_mcu); + $sheet->setCellValue("N{$row}", $detail?->total_kalori ?? '-'); + $sheet->setCellValue("O{$row}", $detail?->jumlah ?? '-'); + $sheet->setCellValue("P{$row}", $detail?->status_order ?? "-"); + $sheet->setCellValue("Q{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "-"); + $sheet->setCellValue("R{$row}", $detail?->type ?? $detail->jam_layanan); + $sheet->setCellValue("S{$row}", $detail?->catatan ?? "-"); // Border tiap baris - $sheet->getStyle("A{$row}:Q{$row}")->getBorders()->getAllBorders() + $sheet->getStyle("A{$row}:S{$row}")->getBorders()->getAllBorders() ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); - + $totalPendapatan += $item->total_harga; $row++; } } - + $sheet->getStyle("I{$row}:K{$row}")->getFont()->setBold(true); + $sheet->getStyle("I{$row}:K{$row}")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + $sheet->setCellValue("I{$row}", 'Total Pendapatan'); + $sheet->setCellValue("K{$row}", $totalPendapatan); + // dd($totalPendapatan); // Auto size kolom - foreach(range('A', 'Q') as $col){ + foreach(range('A', 'S') as $col){ $sheet->getColumnDimension($col)->setAutoSize(true); } $lastRow = $row - 1; - $sheet->setAutoFilter("A4:Q{$lastRow}"); + $sheet->setAutoFilter("A4:S{$lastRow}"); // Download file $fileName = 'laporan-pesanan-' . now()->format('Ymd-His') . '.xlsx'; $writer = new Xlsx($spreadsheet); diff --git a/app/Models/OrderDetail.php b/app/Models/OrderDetail.php index 3fab338..e75af14 100644 --- a/app/Models/OrderDetail.php +++ b/app/Models/OrderDetail.php @@ -31,7 +31,7 @@ class OrderDetail extends Model public function menu(){ - return $this->belongsTo(Menu::class, 'master_menu_id', 'master_menu_id')->select('master_menu_id', 'nama_menu', 'foto'); + return $this->belongsTo(Menu::class, 'master_menu_id', 'master_menu_id')->select('master_menu_id', 'nama_menu', 'foto', 'apakah_someday', 'apakah_mcu'); } public function karbohidrat(){ return $this->belongsTo(Karbohidrat::class, 'karbohidrat_id', 'karbohidrat_id')->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori');