Merge pull request 'development' (#1) from development into production
Reviewed-on: #1
@ -300,6 +300,7 @@ class CustomerController extends Controller
|
||||
$payloadOrderDetail['karbohidrat_id'] = $value['karbohidrat_id'] ?? null;
|
||||
$payloadOrderDetail['catatan'] = $value['catatan'] ?? null;
|
||||
$payloadOrderDetail['master_menu_id'] = $cart['id_menu'];
|
||||
$payloadOrderDetail['total_kalori'] = $value['resultKalori'] ?? ($cart['kalori'] ?? null);
|
||||
OrderDetail::create($payloadOrderDetail);
|
||||
}
|
||||
}
|
||||
@ -407,6 +408,7 @@ class CustomerController extends Controller
|
||||
->table('public.order as o')
|
||||
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
||||
->leftJoin('public.master_menu as mm', 'mm.master_menu_id', '=', 'od.master_menu_id')
|
||||
->leftJoin('public.menu_mcu as mcu', 'mcu.menu_mcu_id', '=', 'od.menu_mcu_id')
|
||||
->where('o.no_order', 'ILIKE', '%' . $noOrder . '%')
|
||||
->select(
|
||||
'o.*',
|
||||
@ -416,7 +418,8 @@ class CustomerController extends Controller
|
||||
'od.harga_satuan',
|
||||
'od.status_order as status_order_detail',
|
||||
'od.catatan',
|
||||
'mm.nama_menu as nama_item',
|
||||
'od.total_kalori',
|
||||
DB::raw('COALESCE(mm.nama_menu, mcu.nama_mcu) as nama_item'),
|
||||
'mm.foto as foto'
|
||||
)
|
||||
->get();
|
||||
@ -460,7 +463,8 @@ class CustomerController extends Controller
|
||||
'jumlah' => $item->jumlah,
|
||||
'harga_satuan' => $item->harga_satuan,
|
||||
'status_order' => $item->status_order_detail,
|
||||
'catatan' => $item->catatan ?? '-'
|
||||
'catatan' => $item->catatan ?? '-',
|
||||
'total_kalori' => $item->total_kalori
|
||||
// tambahkan field tambahan jika diperlukan
|
||||
];
|
||||
})->values(),
|
||||
@ -487,6 +491,7 @@ class CustomerController extends Controller
|
||||
DB::connection('dbOrderGizi')->beginTransaction();
|
||||
$today = now()->toDateString();
|
||||
$jumlahHariIni = Order::whereDate('entry_at', $today)->count();
|
||||
$priceMcu = MasterMcu::where('menu_mcu_id', request('paket_mcu'))->first();
|
||||
$urutan = $jumlahHariIni + 1;
|
||||
$noOrder = 'TX/CT/GIZI/' . now()->year .'/'. now()->month .'/' . now()->day .'/MCU/' . Str::random(6) .'/' . str_pad($urutan, 4, '0', STR_PAD_LEFT);
|
||||
$payload = [
|
||||
@ -499,17 +504,20 @@ class CustomerController extends Controller
|
||||
'no_wa' => request('no_hp') ?? null,
|
||||
'tinggi_badan' => request('tinggi_badan') ?? null,
|
||||
'berat_badan' => request('berat_badan') ?? null,
|
||||
'status_order' =>'Menunggu Konfirmasi Pesanan MCU'
|
||||
'status_order' =>'Menunggu Konfirmasi Pesanan MCU',
|
||||
'total_harga' => $priceMcu ? $priceMcu->harga : null,
|
||||
'cara_pembayaran' =>'MCU',
|
||||
];
|
||||
$order = Order::create($payload);
|
||||
|
||||
$payloadDetail = [
|
||||
'order_id' => $order->order_id,
|
||||
'jumlah' => 1,
|
||||
'tgl_antar' => request('tgl_mcu'),
|
||||
'menu_mcu_id' => request('paket_mcu'),
|
||||
'jam_layanan' => request('jam_layanan'),
|
||||
'cara_pembayaran' => 'MCU',
|
||||
'status_order' =>'Menunggu Konfirmasi'
|
||||
'status_order' =>'Pending',
|
||||
'harga_satuan' => $priceMcu ? $priceMcu->harga : null,
|
||||
];
|
||||
OrderDetail::create($payloadDetail);
|
||||
|
||||
|
||||
@ -136,7 +136,6 @@ class PesananController extends Controller
|
||||
'pegawai_name_confirm_order' => auth()->user()->full_name,
|
||||
'pegawai_at_confirm_order' => Carbon::now(),
|
||||
'status_order' => 'Lunas',
|
||||
'cara_pembayaran' => 'Billing'
|
||||
];
|
||||
if($request->hasFile('evidence_medical_record')){
|
||||
$file = $request->file('evidence_medical_record');
|
||||
@ -264,7 +263,7 @@ class PesananController extends Controller
|
||||
}
|
||||
|
||||
public function getPekerjaan(){
|
||||
$data = OrderDetail::with(['menu', 'paketMenu', 'order', 'karbohidrat'])->whereHas('order', function($q){
|
||||
$data = OrderDetail::with(['menu', 'masterMcu', 'order', 'karbohidrat'])->whereHas('order', function($q){
|
||||
$q->where('status_order', 'Lunas');
|
||||
});
|
||||
$tanggal = request('tanggal');
|
||||
@ -288,7 +287,7 @@ class PesananController extends Controller
|
||||
}
|
||||
|
||||
public function getPekerjaanDetail($order_detail_id){
|
||||
$data = OrderDetail::where('order_detail_id', $order_detail_id)->with(['order', 'menu', 'paketMenu'])->first();
|
||||
$data = OrderDetail::where('order_detail_id', $order_detail_id)->with(['order', 'menu', 'masterMcu'])->first();
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'data' => $data
|
||||
@ -301,7 +300,7 @@ class PesananController extends Controller
|
||||
$type_customer = request('type_customer');
|
||||
$type = request('type');
|
||||
|
||||
$orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order', 'karbohidrat'])->whereHas('order', function($q) use($type_customer){
|
||||
$orderDetail = OrderDetail::with(['menu', 'masterMcu', 'order', 'karbohidrat'])->whereHas('order', function($q) use($type_customer){
|
||||
$q->where('status_order', 'Lunas');
|
||||
if($type_customer !== 'all'){
|
||||
$q->where('jenis_customer', $type_customer);
|
||||
@ -338,18 +337,18 @@ class PesananController extends Controller
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$sheet->setCellValue('A1', "Menu Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
||||
$sheet->mergeCells('A1:K1');
|
||||
$sheet->mergeCells('A1:L1');
|
||||
$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->mergeCells('A2:L2');
|
||||
$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"];
|
||||
$headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Status Pesanan", "Menu Pesanan", "Karbohidrat", "Total Kalori (kal)", "Jumlah", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"];
|
||||
$sheet->fromArray($headers, null, 'A4');
|
||||
$sheet->getStyle('A4:K4')->applyFromArray([
|
||||
$sheet->getStyle('A4:L4')->applyFromArray([
|
||||
'font' => ['bold' => true],
|
||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||
'borders' => [
|
||||
@ -358,9 +357,9 @@ class PesananController extends Controller
|
||||
]
|
||||
]
|
||||
]);
|
||||
$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);
|
||||
$sheet->getStyle('A4:L4')->getFont()->setBold(true);
|
||||
$sheet->getStyle('A4:L4')->getAlignment()->setHorizontal('center');
|
||||
$sheet->getStyle('A4:L4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||
// Isi data
|
||||
$row = 5;
|
||||
foreach ($orderDetail as $index => $item) {
|
||||
@ -369,25 +368,26 @@ class PesananController extends Controller
|
||||
$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 ?? '-');
|
||||
$sheet->setCellValue("F{$row}", $item?->menu?->nama_menu ?? $item?->masterMcu?->nama_mcu);
|
||||
$karbohidratNama = $item?->karbohidrat?->nama_karbohidrat ?? '-';
|
||||
$karbohidratNilai = $item?->karbohidrat?->nilai_kalori ?? '-';
|
||||
$sheet->setCellValue("G{$row}", $karbohidratNama . ($karbohidratNilai !== '-' ? " ({$karbohidratNilai} kal)" : ''));
|
||||
$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 ?? "-");
|
||||
$sheet->setCellValue("H{$row}", $item?->total_kalori ?? '-');
|
||||
$sheet->setCellValue("I{$row}", $item?->jumlah ?? '-');
|
||||
$sheet->setCellValue("J{$row}", $item?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar");
|
||||
$sheet->setCellValue("K{$row}", $item?->type ?? $item->jam_layanan);
|
||||
$sheet->setCellValue("L{$row}", $item?->catatan ?? "-");
|
||||
// Border tiap baris
|
||||
$sheet->getStyle("A{$row}:K{$row}")->getBorders()->getAllBorders()
|
||||
$sheet->getStyle("A{$row}:L{$row}")->getBorders()->getAllBorders()
|
||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||
$row++;
|
||||
}
|
||||
// Auto size kolom
|
||||
foreach(range('A', 'K') as $col){
|
||||
foreach(range('A', 'L') as $col){
|
||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||
}
|
||||
$lastRow = $row - 1;
|
||||
$sheet->setAutoFilter("A4:K{$lastRow}");
|
||||
$sheet->setAutoFilter("A4:L{$lastRow}");
|
||||
// Download file
|
||||
$fileName = 'menu-pesanan' . now()->format('Ymd-His') . '.xlsx';
|
||||
$writer = new Xlsx($spreadsheet);
|
||||
@ -409,7 +409,7 @@ class PesananController extends Controller
|
||||
$type_customer = request('type_customer');
|
||||
$query = Order::where('statusenabled', true)
|
||||
->whereBetween('entry_at', [$startDate, $endDate])
|
||||
->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing']);
|
||||
->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing', 'Menunggu Konfirmasi Pesanan MCU']);
|
||||
if($type_customer !== 'all'){
|
||||
$query->where('jenis_customer', $type_customer);
|
||||
}
|
||||
@ -449,18 +449,18 @@ class PesananController extends Controller
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
||||
$sheet->mergeCells('A1:P1');
|
||||
$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:P2');
|
||||
$sheet->mergeCells('A2:R2');
|
||||
$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"];
|
||||
$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"];
|
||||
$sheet->fromArray($headers, null, 'A4');
|
||||
$sheet->getStyle('A4:Q4')->applyFromArray([
|
||||
$sheet->getStyle('A4:R4')->applyFromArray([
|
||||
'font' => ['bold' => true],
|
||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||
'borders' => [
|
||||
@ -469,9 +469,9 @@ 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:R4')->getFont()->setBold(true);
|
||||
$sheet->getStyle('A4:R4')->getAlignment()->setHorizontal('center');
|
||||
$sheet->getStyle('A4:R4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||
|
||||
// Isi data
|
||||
$row = 5;
|
||||
@ -489,14 +489,15 @@ class PesananController extends Controller
|
||||
$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 ?? "-");
|
||||
$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 ?? "-");
|
||||
// Border tiap baris
|
||||
$sheet->getStyle("A{$row}:Q{$row}")->getBorders()->getAllBorders()
|
||||
$sheet->getStyle("A{$row}:R{$row}")->getBorders()->getAllBorders()
|
||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||
|
||||
$row++;
|
||||
@ -504,11 +505,11 @@ class PesananController extends Controller
|
||||
}
|
||||
|
||||
// Auto size kolom
|
||||
foreach(range('A', 'Q') as $col){
|
||||
foreach(range('A', 'R') as $col){
|
||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||
}
|
||||
$lastRow = $row - 1;
|
||||
$sheet->setAutoFilter("A4:Q{$lastRow}");
|
||||
$sheet->setAutoFilter("A4:R{$lastRow}");
|
||||
// Download file
|
||||
$fileName = $title . now()->format('Ymd-His') . '.xlsx';
|
||||
$writer = new Xlsx($spreadsheet);
|
||||
@ -682,18 +683,18 @@ class PesananController extends Controller
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
||||
$sheet->mergeCells('A1:P1');
|
||||
$sheet->mergeCells('A1:Q1');
|
||||
$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->mergeCells('A2:Q2');
|
||||
$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", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan", "Catatan"];
|
||||
$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"];
|
||||
$sheet->fromArray($headers, null, 'A4');
|
||||
$sheet->getStyle('A4:P4')->applyFromArray([
|
||||
$sheet->getStyle('A4:Q4')->applyFromArray([
|
||||
'font' => ['bold' => true],
|
||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||
'borders' => [
|
||||
@ -702,9 +703,9 @@ class PesananController extends Controller
|
||||
]
|
||||
]
|
||||
]);
|
||||
$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);
|
||||
$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;
|
||||
@ -721,14 +722,15 @@ class PesananController extends Controller
|
||||
$sheet->setCellValue("I{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
||||
$sheet->setCellValue("J{$row}", $item->total_harga);
|
||||
|
||||
$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 ?? "-");
|
||||
$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 ?? "-");
|
||||
// Border tiap baris
|
||||
$sheet->getStyle("A{$row}:P{$row}")->getBorders()->getAllBorders()
|
||||
$sheet->getStyle("A{$row}:Q{$row}")->getBorders()->getAllBorders()
|
||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||
|
||||
$row++;
|
||||
@ -736,11 +738,11 @@ class PesananController extends Controller
|
||||
}
|
||||
|
||||
// Auto size kolom
|
||||
foreach(range('A', 'P') as $col){
|
||||
foreach(range('A', 'Q') as $col){
|
||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||
}
|
||||
$lastRow = $row - 1;
|
||||
$sheet->setAutoFilter("A4:P{$lastRow}");
|
||||
$sheet->setAutoFilter("A4:Q{$lastRow}");
|
||||
// Download file
|
||||
$fileName = 'laporan-pesanan-' . now()->format('Ymd-His') . '.xlsx';
|
||||
$writer = new Xlsx($spreadsheet);
|
||||
@ -958,6 +960,15 @@ class PesananController extends Controller
|
||||
'total' => $grouped->count()
|
||||
]);
|
||||
}
|
||||
|
||||
public function downloadLabel(){
|
||||
$data = request('data');
|
||||
$dataArray = explode(',', $data);
|
||||
$orderDetail = OrderDetail::whereIn('order_detail_id', $dataArray)->with(['masterMcu', 'menu', 'order'])->get();
|
||||
$pdf = Pdf::loadView('dashboard.label.multi', compact('orderDetail'));
|
||||
|
||||
return $pdf->stream('label_.pdf');
|
||||
}
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
|
||||
@ -38,7 +38,7 @@ class Order extends Model
|
||||
'email',
|
||||
'alamat',
|
||||
'medical_record',
|
||||
'evidence_medical_record'
|
||||
'evidence_medical_record',
|
||||
];
|
||||
|
||||
protected $cast = [
|
||||
@ -47,6 +47,6 @@ class Order extends Model
|
||||
];
|
||||
|
||||
public function orderDetail(){
|
||||
return $this->hasMany(OrderDetail::class, 'order_id')->with('paketMenu', 'menu');
|
||||
return $this->hasMany(OrderDetail::class, 'order_id')->with('masterMcu', 'menu');
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ class OrderDetail extends Model
|
||||
'modified_at',
|
||||
'statusenabled',
|
||||
'master_menu_id',
|
||||
'paket_mcu_id',
|
||||
'menu_mcu_id',
|
||||
'harga_satuan',
|
||||
'jumlah',
|
||||
'tgl_antar',
|
||||
@ -24,7 +24,8 @@ class OrderDetail extends Model
|
||||
'status_order',
|
||||
'karbohidrat_id',
|
||||
'catatan',
|
||||
'jam_layanan'
|
||||
'jam_layanan',
|
||||
'total_kalori'
|
||||
];
|
||||
|
||||
|
||||
@ -38,4 +39,7 @@ class OrderDetail extends Model
|
||||
public function order(){
|
||||
return $this->belongsTo(Order::class, 'order_id', 'order_id');
|
||||
}
|
||||
public function masterMcu(){
|
||||
return $this->belongsTo(MasterMcu::class, 'menu_mcu_id', 'menu_mcu_id');
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"barryvdh/laravel-dompdf": "^3.1",
|
||||
"barryvdh/laravel-snappy": "^1.0",
|
||||
"laravel/framework": "^12.0",
|
||||
"laravel/tinker": "^2.10.1",
|
||||
"phpoffice/phpspreadsheet": "^4.5"
|
||||
|
||||
147
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "696ae0d1187bc1634529f1760a11ffd0",
|
||||
"content-hash": "9d83b6a45b530b893999cf984c08fde5",
|
||||
"packages": [
|
||||
{
|
||||
"name": "barryvdh/laravel-dompdf",
|
||||
@ -83,6 +83,84 @@
|
||||
],
|
||||
"time": "2025-02-13T15:07:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "barryvdh/laravel-snappy",
|
||||
"version": "v1.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/barryvdh/laravel-snappy.git",
|
||||
"reference": "5b8668e4a54be630973fd309b4cb1abe75a8afbb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/5b8668e4a54be630973fd309b4cb1abe75a8afbb",
|
||||
"reference": "5b8668e4a54be630973fd309b4cb1abe75a8afbb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/filesystem": "^9|^10|^11|^12",
|
||||
"illuminate/support": "^9|^10|^11|^12",
|
||||
"knplabs/knp-snappy": "^1.4.4",
|
||||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"orchestra/testbench": "^7|^8|^9|^10"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"aliases": {
|
||||
"PDF": "Barryvdh\\Snappy\\Facades\\SnappyPdf",
|
||||
"SnappyImage": "Barryvdh\\Snappy\\Facades\\SnappyImage"
|
||||
},
|
||||
"providers": [
|
||||
"Barryvdh\\Snappy\\ServiceProvider"
|
||||
]
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Barryvdh\\Snappy\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Barry vd. Heuvel",
|
||||
"email": "barryvdh@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Snappy PDF/Image for Laravel",
|
||||
"keywords": [
|
||||
"image",
|
||||
"laravel",
|
||||
"pdf",
|
||||
"snappy",
|
||||
"wkhtmltoimage",
|
||||
"wkhtmltopdf"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/barryvdh/laravel-snappy/issues",
|
||||
"source": "https://github.com/barryvdh/laravel-snappy/tree/v1.0.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://fruitcake.nl",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/barryvdh",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-02-24T15:20:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "brick/math",
|
||||
"version": "0.13.1",
|
||||
@ -1365,6 +1443,73 @@
|
||||
],
|
||||
"time": "2025-02-03T10:55:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "knplabs/knp-snappy",
|
||||
"version": "v1.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/KnpLabs/snappy.git",
|
||||
"reference": "3dd138e9e47de91cd2e056c5e6e1a0dd72547ee7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/KnpLabs/snappy/zipball/3dd138e9e47de91cd2e056c5e6e1a0dd72547ee7",
|
||||
"reference": "3dd138e9e47de91cd2e056c5e6e1a0dd72547ee7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"psr/log": "^2.0||^3.0",
|
||||
"symfony/process": "^5.0||^6.0||^7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^3.0",
|
||||
"pedrotroller/php-cs-custom-fixer": "^2.19",
|
||||
"phpstan/phpstan": "^1.0.0",
|
||||
"phpstan/phpstan-phpunit": "^1.0.0",
|
||||
"phpunit/phpunit": "^8.5"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Knp\\Snappy\\": "src/Knp/Snappy"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "KNP Labs Team",
|
||||
"homepage": "http://knplabs.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "http://github.com/KnpLabs/snappy/contributors"
|
||||
}
|
||||
],
|
||||
"description": "PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. Wrapper for wkhtmltopdf/wkhtmltoimage.",
|
||||
"homepage": "http://github.com/KnpLabs/snappy",
|
||||
"keywords": [
|
||||
"knp",
|
||||
"knplabs",
|
||||
"pdf",
|
||||
"snapshot",
|
||||
"thumbnail",
|
||||
"wkhtmltopdf"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/KnpLabs/snappy/issues",
|
||||
"source": "https://github.com/KnpLabs/snappy/tree/v1.5.1"
|
||||
},
|
||||
"time": "2025-01-06T16:53:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v12.20.0",
|
||||
|
||||
52
config/snappy.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Snappy PDF / Image Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option contains settings for PDF generation.
|
||||
|
|
||||
| Enabled:
|
||||
|
|
||||
| Whether to load PDF / Image generation.
|
||||
|
|
||||
| Binary:
|
||||
|
|
||||
| The file path of the wkhtmltopdf / wkhtmltoimage executable.
|
||||
|
|
||||
| Timeout:
|
||||
|
|
||||
| The amount of time to wait (in seconds) before PDF / Image generation is stopped.
|
||||
| Setting this to false disables the timeout (unlimited processing time).
|
||||
|
|
||||
| Options:
|
||||
|
|
||||
| The wkhtmltopdf command options. These are passed directly to wkhtmltopdf.
|
||||
| See https://wkhtmltopdf.org/usage/wkhtmltopdf.txt for all options.
|
||||
|
|
||||
| Env:
|
||||
|
|
||||
| The environment variables to set while running the wkhtmltopdf process.
|
||||
|
|
||||
*/
|
||||
|
||||
'pdf' => [
|
||||
'enabled' => true,
|
||||
'binary' => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf'),
|
||||
'timeout' => false,
|
||||
'options' => [],
|
||||
'env' => [],
|
||||
],
|
||||
|
||||
'image' => [
|
||||
'enabled' => true,
|
||||
'binary' => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage'),
|
||||
'timeout' => false,
|
||||
'options' => [],
|
||||
'env' => [],
|
||||
],
|
||||
|
||||
];
|
||||
BIN
public/gambar/1VhHxJmuroGL7z6.jpg
Normal file
|
After Width: | Height: | Size: 140 KiB |
BIN
public/gambar/3Y3Ez9eazDjltwU.jpg
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
public/gambar/608,577,598,602,606.pdf
Normal file
BIN
public/gambar/6cphK0gBVbdDpy7.jpg
Normal file
|
After Width: | Height: | Size: 171 KiB |
BIN
public/gambar/BDyQv2C3ZJstYk5.jpg
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
public/gambar/BcQLFyCRKbD7fGm.jpg
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
public/gambar/BhVLQcmU0pVMzQ5.jpg
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
public/gambar/DA1gXOOK4cMnL65.jpg
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
public/gambar/DX8Ev2haNMqhqgq.jpg
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
public/gambar/EcyHylUTMAVohMF.jpg
Normal file
|
After Width: | Height: | Size: 140 KiB |
BIN
public/gambar/MIBkGAo6Wsv5U8J.jpg
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
public/gambar/NWj9s7XJsEznf32.jpg
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
public/gambar/Nmq2csw3jlvDbFn.jpg
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
public/gambar/OfSOkI4v8QOFLDQ.jpg
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
public/gambar/Ukd0oblLPOj2gGk.jpg
Normal file
|
After Width: | Height: | Size: 171 KiB |
BIN
public/gambar/V47AjynduyGYBKJ.jpg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
public/gambar/ZyRXajWB3BFyCIJ.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
public/gambar/c8RrP9pmbFQ5wPd.jpg
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
public/gambar/cG1OGeEi5XzhUOK.jpg
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
public/gambar/clLvziFQZnHVnMq.jpg
Normal file
|
After Width: | Height: | Size: 195 KiB |
BIN
public/gambar/d8ASQ3mkBbAkjPR.jpg
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
public/gambar/dAVbOJQeJnGogUg.jpg
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
public/gambar/m0UEA7GZ3eqH6yZ.jpg
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
public/gambar/sKEpPVmmXHGH42e.jpg
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
public/gambar/sjFBBFhx2wpSuE8.jpg
Normal file
|
After Width: | Height: | Size: 175 KiB |
BIN
public/gambar/teCc2Q88QGhBUQL.jpg
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
public/gambar/ui9A9mjwVaZq2hj.jpg
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/gambar/vajeyxcmaRf6JR3.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
public/gambar/yugmkzUNtvyoKXG.jpg
Normal file
|
After Width: | Height: | Size: 171 KiB |
BIN
public/gambar/zc8vn0ZMLirPaAJ.jpg
Normal file
|
After Width: | Height: | Size: 141 KiB |
@ -65,6 +65,11 @@ async function submitOrderToServer(){
|
||||
|
||||
$("#checkoutFormFinal").on('submit', async function(e){
|
||||
e.preventDefault()
|
||||
const buttonSubmit = $(this).find('button[type="submit"]')
|
||||
if(buttonSubmit.prop('disabled')) return;
|
||||
buttonSubmit.prop('disabled', true)
|
||||
.html('<i class="fas fa-spinner fa-spin me-2"></i>Memproses...')
|
||||
|
||||
const cara_pembayaran = document.getElementById('cara_pembayaran').value;
|
||||
const bukti_pembayaran = document.querySelector('input[name="bukti_pembayaran"]').value;
|
||||
|
||||
@ -74,6 +79,7 @@ async function submitOrderToServer(){
|
||||
text: 'Silahkan upload bukti pembayaran jika metode yang dipakai transfer.',
|
||||
icon: 'warning',
|
||||
})
|
||||
buttonSubmit.prop('disabled', false).html('Selesaikan Pesanan');
|
||||
return;
|
||||
}
|
||||
|
||||
@ -81,6 +87,12 @@ async function submitOrderToServer(){
|
||||
const form = this;
|
||||
|
||||
const formData = new FormData(form);
|
||||
const clearSession = () => {
|
||||
sessionStorage.removeItem('cart');
|
||||
sessionStorage.removeItem('checkout_biodata');
|
||||
sessionStorage.removeItem('order_id');
|
||||
sessionStorage.removeItem('time_order');
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await fetch('/finish-checkout', {
|
||||
@ -95,11 +107,7 @@ async function submitOrderToServer(){
|
||||
|
||||
if (result.status) {
|
||||
// ✅ Hapus sessionStorage di client
|
||||
sessionStorage.removeItem('cart');
|
||||
sessionStorage.removeItem('checkout_biodata');
|
||||
sessionStorage.removeItem('order_id');
|
||||
sessionStorage.removeItem('time_order');
|
||||
|
||||
clearSession()
|
||||
Swal.fire({
|
||||
title: 'Pesanan Berhasil!',
|
||||
text: 'Terima kasih, pesanan Anda sedang kami siapkan.',
|
||||
@ -110,10 +118,7 @@ async function submitOrderToServer(){
|
||||
window.location.href = "/success-page"; // kehalaman success
|
||||
});
|
||||
} else {
|
||||
sessionStorage.removeItem('cart');
|
||||
sessionStorage.removeItem('checkout_biodata');
|
||||
sessionStorage.removeItem('order_id');
|
||||
sessionStorage.removeItem('time_order');
|
||||
clearSession()
|
||||
Swal.fire({
|
||||
title: 'Gagal!',
|
||||
text: result.message,
|
||||
@ -124,11 +129,10 @@ async function submitOrderToServer(){
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
sessionStorage.removeItem('cart');
|
||||
sessionStorage.removeItem('checkout_biodata');
|
||||
sessionStorage.removeItem('order_id');
|
||||
sessionStorage.removeItem('time_order');
|
||||
clearSession()
|
||||
console.error(err);
|
||||
alert("Terjadi kesalahan saat mengirim data.");
|
||||
}finally{
|
||||
buttonSubmit.prop('disabled', false).html('Selesaikan Pesanan');
|
||||
}
|
||||
})
|
||||
|
||||
@ -31,67 +31,78 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
// Setup button step
|
||||
document.querySelectorAll('.next-step').forEach(btn => {
|
||||
btn.addEventListener('click', async () => {
|
||||
const btnLoad = btn;
|
||||
btnLoad.disabled = true;
|
||||
btnLoad.innerHTML = '<i class="fas fa-spinner fa-spin me-2"></i>Memproses...';
|
||||
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||
|
||||
if (cart.length === 0) {
|
||||
try {
|
||||
if (cart.length === 0) {
|
||||
window.location.href = "/";
|
||||
return;
|
||||
}
|
||||
if (currentStep === 0){
|
||||
if(!validateStepOne()) return
|
||||
isiKonfirmasi();
|
||||
currentStep++; showStep(currentStep);
|
||||
}else if(currentStep === 1){
|
||||
const {isValid, errorMessage} =validateCartBeforeSubmit();
|
||||
if (!isValid) {
|
||||
Swal.fire({
|
||||
title: 'Perhatian!',
|
||||
text: errorMessage,
|
||||
if(!validateStepOne()) return
|
||||
isiKonfirmasi();
|
||||
currentStep++; showStep(currentStep);
|
||||
}else if(currentStep === 1){
|
||||
const {isValid, errorMessage} =validateCartBeforeSubmit();
|
||||
if (!isValid) {
|
||||
Swal.fire({
|
||||
title: 'Perhatian!',
|
||||
text: errorMessage,
|
||||
icon: 'warning',
|
||||
confirmButtonText: 'Oke'
|
||||
})
|
||||
return
|
||||
}
|
||||
let checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}');
|
||||
|
||||
if (!checkout_biodata.nama_pemesan) {
|
||||
Swal.fire({
|
||||
title: 'Biodata Belum Terisi!',
|
||||
text: 'Lakukan Pengisian biodata terlebih dahulu.',
|
||||
icon: 'warning',
|
||||
confirmButtonText: 'Oke'
|
||||
})
|
||||
return
|
||||
}
|
||||
let checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}');
|
||||
confirmButtonText: 'oke!',
|
||||
}).then(() => {
|
||||
window.location.href = "/checkout";
|
||||
});
|
||||
return
|
||||
}
|
||||
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||
for (const item of cart) {
|
||||
for (const p of item.pesanan) {
|
||||
const result = validateTanggalPemesanan(item, p.tgl);
|
||||
|
||||
if (!checkout_biodata.nama_pemesan) {
|
||||
Swal.fire({
|
||||
title: 'Biodata Belum Terisi!',
|
||||
text: 'Lakukan Pengisian biodata terlebih dahulu.',
|
||||
icon: 'warning',
|
||||
confirmButtonText: 'oke!',
|
||||
}).then(() => {
|
||||
window.location.href = "/checkout";
|
||||
});
|
||||
return
|
||||
}
|
||||
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||
for (const item of cart) {
|
||||
for (const p of item.pesanan) {
|
||||
const result = validateTanggalPemesanan(item, p.tgl);
|
||||
|
||||
if (!result.valid) {
|
||||
alert(result.message);
|
||||
return; // hentikan di sini, tidak lanjut
|
||||
if (!result.valid) {
|
||||
alert(result.message);
|
||||
return; // hentikan di sini, tidak lanjut
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!sessionStorage.getItem('order_id')) {
|
||||
await submitOrderToServer(); // async function simpan ke server
|
||||
if (!sessionStorage.getItem('order_id')) {
|
||||
await submitOrderToServer(); // async function simpan ke server
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
time_order = sessionStorage.getItem('time_order')
|
||||
orderDate = new Date(time_order);
|
||||
deadline = new Date(orderDate.getTime() + 10 * 60 * 1000)
|
||||
updateCountdown()
|
||||
currentStep++;
|
||||
showStep(currentStep)
|
||||
}else if(currentStep === 2){
|
||||
renderCartSummary()
|
||||
time_order = sessionStorage.getItem('time_order')
|
||||
orderDate = new Date(time_order);
|
||||
deadline = new Date(orderDate.getTime() + 10 * 60 * 1000)
|
||||
updateCountdown()
|
||||
currentStep++;
|
||||
showStep(currentStep)
|
||||
}else if(currentStep === 2){
|
||||
renderCartSummary()
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
Swal.fire('Error', 'Terjadi kesalahan, silakan coba lagi.', 'error');
|
||||
}finally{
|
||||
btnLoad.disabled = false;
|
||||
btnLoad.innerHTML = 'Selanjutnya';
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
@ -313,9 +324,7 @@ function renderCartSummary() {
|
||||
const disableSore = isToday && jam >= 13;
|
||||
const countDate = pesananList.length;
|
||||
|
||||
if(checkout_biodata.jenis_customer === 'Karyawan RSAB Harapan Kita'){
|
||||
$("#karywan").re
|
||||
}
|
||||
|
||||
pesananHTML += `
|
||||
<div class="rounded border p-3 mb-3 shadow-sm" data-item-id="${item.id}" data-index="${i}">
|
||||
<div class="row g-3 align-items-center">
|
||||
@ -335,11 +344,11 @@ function renderCartSummary() {
|
||||
<!-- Karbohidrat -->
|
||||
${item.apakah_someday ? `` : `
|
||||
<div class="col-12 col-md-3">
|
||||
<select class="form-select form-select-sm karbohidrat-input" onchange="onKarbohidratChange(${item.id}, ${i})">
|
||||
<select class="form-select form-select-sm karbohidrat-input" onChange="onKarbohidratChange(${item.id}, ${i}, this, ${item.kalori})">
|
||||
<option disabled selected>Pilih Karbohidrat</option>
|
||||
${(karhohidrats || []).map(k => `
|
||||
<option value="${k.karbohidrat_id}" ${p.karbohidrat_id === k.karbohidrat_id ? 'selected' : ''}>
|
||||
${k.nama_karbohidrat} ${k.nilai_kalori ? `(${k.nilai_kalori} kkal)` : ''}
|
||||
<option value="${k.karbohidrat_id}" ${p.karbohidrat_id === k.karbohidrat_id ? 'selected' : ''} data-kalori=${k.nilai_kalori}>
|
||||
${k.nama_karbohidrat} ${k.nilai_kalori ? `(${k.nilai_kalori} kal)` : ''}
|
||||
</option>
|
||||
`).join('')}
|
||||
</select>
|
||||
@ -384,16 +393,16 @@ function renderCartSummary() {
|
||||
|
||||
<!-- Jumlah -->
|
||||
<div class="col-6 col-md-2">
|
||||
<div class="d-flex align-items-center justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-success" onclick="decrement(${item.id}, ${i})">
|
||||
<i class="fa fa-minus"></i>
|
||||
</button>
|
||||
<input type="text" class="form-control form-control-sm text-center mx-2 jumlah-input"
|
||||
value="${p.jumlah}" readonly style="width: 60px;" id="jumlah-${item.id}-${i}">
|
||||
<button class="btn btn-sm btn-outline-success" onclick="increment(${item.id}, ${i})">
|
||||
<i class="fa fa-plus"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="d-flex align-items-center justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-success" onclick="decrement(${item.id}, ${i})">
|
||||
<i class="fa fa-minus"></i>
|
||||
</button>
|
||||
<input type="text" class="form-control form-control-sm text-center mx-2 jumlah-input"
|
||||
value="${p.jumlah}" readonly style="width: 60px;" id="jumlah-${item.id}-${i}">
|
||||
<button class="btn btn-sm btn-outline-success" onclick="increment(${item.id}, ${i})">
|
||||
<i class="fa fa-plus"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tombol Hapus -->
|
||||
@ -405,22 +414,25 @@ function renderCartSummary() {
|
||||
: ''
|
||||
}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
${item.kalori
|
||||
? `<div class="mb-2 small text-muted">Total Kalori: <strong id="kalori_${item.id}_${i}">${p?.resultKalori ? p?.resultKalori : item?.kalori}</strong> kal</div>`
|
||||
: ''}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
`;
|
||||
});
|
||||
|
||||
const itemHTML = `
|
||||
<div class="card mb-3 shadow-sm position-relative">
|
||||
<div class="d-flex flex-column flex-md-row">
|
||||
<button type="button" class="btn btn-sm btn-outline-danger position-absolute top-0 end-0 m-2" onClick="removeCartItem(${item.id})" style="z-index:1;">
|
||||
<button type="button" class="btn btn-sm btn-danger position-absolute top-0 end-0 m-2" onClick="removeCartItem(${item.id})" style="z-index:1;">
|
||||
Hapus
|
||||
</button>
|
||||
<div class="d-flex flex-column flex-md-row">
|
||||
|
||||
<div class="p-2 d-flex justify-content-center align-items-center" style="flex: 0 0 300px;">
|
||||
<img src="gambar/${item.foto || 'default.jpg'}" alt="${item.nama_menu}"
|
||||
class="img-fluid rounded" style="max-height: 180px; width: 100%; object-fit: cover;">
|
||||
class="img-fluid rounded" style="max-height: 280px; width: 100%; object-fit: cover;">
|
||||
</div>
|
||||
|
||||
<div class="flex-grow-1 position-relative">
|
||||
@ -437,12 +449,10 @@ function renderCartSummary() {
|
||||
<div class="mb-2 small text-muted"><i class="fa fa-utensils me-1"></i>
|
||||
Menu: <strong>${item.apakah_someday ? 'Sameday' : 'Menu Normal'}</strong>
|
||||
</div>
|
||||
${item.kalori
|
||||
? `<div class="mb-2 small text-muted"><i class="fa-solid fa-bolt me-1"></i> Kalori: <strong>${item.kalori} kkal</strong></div>`
|
||||
: ''}
|
||||
|
||||
<div class="mb-2 small text-muted"><strong>Silahkan isi tanggal pemesanan, pilih karbohidrat dan catatan pemesanan (opsional) yang diinginkan</strong></div>
|
||||
${pesananHTML}
|
||||
|
||||
ilahkan isi tanggal pemesanan, pilih karbohidrat dan catatan pemesanan (opsional) yang diinginkan
|
||||
<div class="mt-3 d-flex justify-content-between align-items-center flex-wrap gap-2">
|
||||
<button class="btn btn-sm btn-outline-success"
|
||||
onclick="addOrderDate(${item.id}, ${item.apakah_menu_sore})">
|
||||
@ -489,15 +499,26 @@ function onTanggalChange(itemId, index) {
|
||||
const input = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .tanggal-input`);
|
||||
cart.find(item => item.id === itemId).pesanan[index].tgl = input.value;
|
||||
sessionStorage.setItem('cart', JSON.stringify(cart));
|
||||
renderCartSummary();
|
||||
// renderCartSummary();
|
||||
}
|
||||
|
||||
function onKarbohidratChange(itemId, index){
|
||||
function onKarbohidratChange(itemId, index, el, kalori){
|
||||
const selectedOption = el.options[el.selectedIndex];
|
||||
const kaloriOption = parseInt(selectedOption.getAttribute('data-kalori')) || 0;
|
||||
|
||||
const kaloriMenuInt = kalori || 0;
|
||||
|
||||
const totalKalori = kaloriOption + kaloriMenuInt;
|
||||
const kaloriEl = document.getElementById(`kalori_${itemId}_${index}`);
|
||||
|
||||
if (kaloriEl) {
|
||||
kaloriEl.textContent = totalKalori ;
|
||||
}
|
||||
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||
const input = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .karbohidrat-input`);
|
||||
cart.find(item => item.id === itemId).pesanan[index].karbohidrat_id = parseInt(input.value);
|
||||
cart.find(item => item.id === itemId).pesanan[index].resultKalori = totalKalori;
|
||||
sessionStorage.setItem('cart', JSON.stringify(cart));
|
||||
renderCartSummary();
|
||||
}
|
||||
|
||||
function onKategoriChange(itemId, index, isToday) {
|
||||
@ -526,7 +547,7 @@ function onKategoriChange(itemId, index, isToday) {
|
||||
if (item && item.pesanan && item.pesanan[index]) {
|
||||
item.pesanan[index].kategoriPemesanan = kategori;
|
||||
sessionStorage.setItem('cart', JSON.stringify(cart));
|
||||
renderCartSummary();
|
||||
// renderCartSummary();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -10,12 +10,14 @@ function fetchDetailOrder(order_id){
|
||||
<div class="col-md-12 mb-3">
|
||||
<div class="card shadow-sm border-0">
|
||||
<div class="row g-0">
|
||||
<div class="col-md-5 d-flex align-items-center p-2">
|
||||
<div class="${data?.jenis_customer === "MCU" ? 'd-none' : '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: 250px; width: auto;">
|
||||
</div>
|
||||
<div class="col-md-5 p-2">
|
||||
<p class="mb-1">Nama Menu: <strong>${detail?.menu?.nama_menu || '-'}</strong></p>
|
||||
<div class="${data?.jenis_customer === "MCU" ?"col-md-12 p-2" : 'col-md-5 p-2'}">
|
||||
<p class="mb-1">Nama Menu: <strong>${detail?.menu?.nama_menu || detail?.master_mcu?.nama_mcu}</strong></p>
|
||||
<p class="mb-1">Jumlah: <span>${detail?.jumlah || 0}</span></p>
|
||||
${detail?.total_kalori ? `<p class="mb-1">Total Kalori: <span>${detail?.total_kalori } kal</span></p>` : ''}
|
||||
|
||||
<p class="mb-1">Tanggal Pesan: <span>${detail?.tgl_antar || 0}</span></p>
|
||||
<p class="mb-1">Harga: <strong>Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||
<p class="mb-1">Status Pesanan:
|
||||
@ -24,7 +26,7 @@ function fetchDetailOrder(order_id){
|
||||
${detail?.status_order}
|
||||
</span>
|
||||
</p>
|
||||
<p class="mb-1">Catatan : <span>${detail?.catatan || '-'}</span></p>
|
||||
${detail?.catatan ? `<p class="mb-1">Catatan : <span>${detail?.catatan || '-'}</span></p>` : ''}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -69,12 +71,12 @@ function fetchDetailOrder(order_id){
|
||||
<div class="mb-2">
|
||||
<p class="mb-1">Alamat: <strong>${data.alamat || '-'}</strong></p>
|
||||
</div>
|
||||
` : `
|
||||
` : data?.jenis_customer === 'Karyawan RSAB Harapan Kita' ?`
|
||||
<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>
|
||||
`
|
||||
</div>
|
||||
` : ''
|
||||
}
|
||||
<hr>
|
||||
|
||||
|
||||
@ -222,8 +222,9 @@ document.getElementById('formMasterMenu').addEventListener('submit', function(e)
|
||||
const allFormSetsBeforSubmit = document.querySelectorAll('.form-set');
|
||||
|
||||
for (let i = 0; i < allFormSetsBeforSubmit.length; i++) {
|
||||
const checkSiang = allFormSetsBeforSubmit[i].querySelector(`input[name="data[${i}][apakah_menu_siang]"]`);
|
||||
const checkSore = allFormSetsBeforSubmit[i].querySelector(`input[name="data[${i}][apakah_menu_sore]"]`);
|
||||
|
||||
const checkSiang = allFormSetsBeforSubmit[i].querySelector(`input[name*="[apakah_menu_siang]"]`);
|
||||
const checkSore = allFormSetsBeforSubmit[i].querySelector(`input[name*="[apakah_menu_sore]"]`);
|
||||
|
||||
if (!checkSiang?.checked && !checkSore?.checked) {
|
||||
e.preventDefault();
|
||||
|
||||
@ -91,7 +91,9 @@
|
||||
},
|
||||
{
|
||||
title:"Nama Menu",
|
||||
field:"nama_menu",
|
||||
formatter:function(value, row){
|
||||
return row?.kalori[0]?.nilai_kalori ? row?.nama_menu + ' ' + '(' + row?.kalori[0]?.nilai_kalori + ' kal)' : row?.nama_menu
|
||||
},
|
||||
width: 300
|
||||
},
|
||||
{
|
||||
|
||||
@ -94,18 +94,6 @@ let orderIndex = 0;
|
||||
$('#cartTotal').text('Rp ' + total.toLocaleString('id-ID'));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function renderCartTotalOnly() {
|
||||
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||
let total = 0;
|
||||
|
||||
@ -527,7 +527,6 @@
|
||||
|
||||
let namaMenu = $("#cathering_order_name").text();
|
||||
|
||||
console.log(cart);
|
||||
let existingItem = cart.find(item => item.id_menu === idMenu);
|
||||
|
||||
if(!existingItem){
|
||||
|
||||
@ -7,16 +7,21 @@ function detailOrder(id){
|
||||
document.getElementById('pesanan_container').innerHTML = '';
|
||||
document.getElementById('confirm_nama_pesanan').textContent = data?.order?.nama_pemesan;
|
||||
let html = '';
|
||||
console.log(data);
|
||||
|
||||
html += `
|
||||
<div class="col-md-12 mb-3">
|
||||
<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: 320px; width: auto;">
|
||||
<div class="${data?.order?.jenis_customer === "MCU" ? 'd-none' : 'col-md-5 d-flex align-items-center p-2'} ">
|
||||
<img src="/gambar/${data?.menu?.foto || data?.master_mcu?.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>
|
||||
<div class="${data?.order?.jenis_customer === "MCU" ? 'col-md-12' : 'col-md-7 p-1'}">
|
||||
<p class="mb-1">Nama Menu: <strong>${data?.menu?.nama_menu || data?.master_mcu?.nama_mcu}</strong></p>
|
||||
<p class="mb-1">Tanggal Antar: <span>${data?.tgl_antar || 0}</span></p>
|
||||
${data?.total_kalori ? `
|
||||
<p class="mb-1">Total Kalori: <span>${data?.total_kalori} kal</span></p>
|
||||
` : ''}
|
||||
<p class="mb-1">Jumlah: <span>${data?.jumlah || 0}</span></p>
|
||||
<p class="mb-1">Harga Satuan: <strong>Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||
<p class="mb-1">Status Pesanan:
|
||||
@ -24,7 +29,8 @@ function detailOrder(id){
|
||||
${data?.status_order}
|
||||
</span>
|
||||
</p>
|
||||
<p class="mb-1">Catatan: <strong>${data?.catatan || '-'}</strong></p>
|
||||
${data?.order?.jenis_customer !== "MCU" ? `
|
||||
<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>
|
||||
@ -36,12 +42,12 @@ function detailOrder(id){
|
||||
` : data?.order?.jenis_customer === "Karyawan RSAB Harapan Kita" ? `
|
||||
<p class="mb-1">Bagian /Instalasi: <strong>${data?.order?.bagian_instalasi || '-'}</strong></p>
|
||||
<p class="mb-1">No Ekstensien: <strong>${data?.order?.no_ekstensien || '-'}</strong></p>
|
||||
` :`
|
||||
` : data?.order?.jenis_customer === "Keluarga Pasien / Penunggu Pasien" ? `
|
||||
<p class="mb-1">Nama Pasien: <strong>${data?.order?.nama_pasien || '-'}</strong></p>
|
||||
<p class="mb-1">Ruang Perawatan: <strong>${data?.order?.ruang_perawatan || '-'}</strong></p>
|
||||
<p class="mb-1">Nomor Kamar Perawatan: <strong>${data?.order?.no_kamar_perawatan || '-'}</strong></p>
|
||||
<p class="mb-1">Kelas Perawatan: <strong>${data?.order?.kelas_perawatan || '-'}</strong></p>
|
||||
`
|
||||
` : ''
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@ -63,8 +69,11 @@ function detailOrder(id){
|
||||
|
||||
function approve(e){
|
||||
const data = $(e).data();
|
||||
|
||||
new bootstrap.Modal(modalActionOrder).show();
|
||||
$("#confirmActionApproveOrder").text(data?.menu + ' (' + data?.type +')')
|
||||
$("#confirmActionApproveOrder").text(
|
||||
data?.menu + (!data?.type ? '' : ` (${data.type})`)
|
||||
);
|
||||
$("#confirmNoOrder").text(data?.no_order + ' (' + data?.nama_pemesan +')')
|
||||
document.getElementById('formActionApproveOrder').setAttribute(`action`, `/dashboard/pending/update-detail-status/${data.id}`)
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
|
||||
if(row?.status_order !== "Selesai"){
|
||||
buttons += `
|
||||
<button class="btn btn-sm btn-success me-2" onclick="approve(this)" data-id="${row.order_detail_id}" data-nama_pemesan="${row?.order?.nama_pemesan}" data-no_order="${row?.order?.no_order}" data-menu="${row?.menu?.nama_menu || row?.paket_menu?.nama_paket}" data-jenis_customer="${row?.order?.jenis_customer}" data-type="${row?.type}">
|
||||
<button class="btn btn-sm btn-success me-2" onclick="approve(this)" data-id="${row.order_detail_id}" data-nama_pemesan="${row?.order?.nama_pemesan}" data-no_order="${row?.order?.no_order}" data-menu="${row?.menu?.nama_menu || row?.master_mcu?.nama_mcu}" data-jenis_customer="${row?.order?.jenis_customer}" data-type="${row?.type}">
|
||||
<i class="fa fa-check me-1"></i>
|
||||
</button>
|
||||
`
|
||||
@ -92,7 +92,7 @@
|
||||
title: "Menu",
|
||||
field: 'order_detail_id',
|
||||
formatter:function(value, row){
|
||||
return row?.menu?.nama_menu || row?.paket_menu?.nama_paket
|
||||
return row?.menu?.nama_menu || row?.master_mcu?.nama_mcu
|
||||
},
|
||||
sortable: true,
|
||||
},
|
||||
@ -108,6 +108,12 @@
|
||||
},
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
title:"Total Kalori",
|
||||
formatter: function(value, row){
|
||||
return row?.total_kalori ? row?.total_kalori + ' kal' : '-';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "Pemesan",
|
||||
field:'order.nama_pemesan',
|
||||
@ -125,8 +131,12 @@
|
||||
|
||||
},
|
||||
{
|
||||
title: "Waktu Pemesanan",
|
||||
field: 'type',
|
||||
title: "Waktu Pengantaran",
|
||||
formatter: function(value, row){
|
||||
|
||||
if(row?.order?.jenis_customer === 'MCU')return row.jam_layanan.slice(0, 5);
|
||||
return row?.type
|
||||
},
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
@ -170,5 +180,6 @@
|
||||
function labelDownload(){
|
||||
const selected = (typeof getSelectedRowsForLabel === 'function') ? getSelectedRowsForLabel() : [];
|
||||
const order_detail_ids = selected.map(item => item.order_detail_id);
|
||||
window.open(`https://smart.rsabhk.co.id:2222/service-reporting/label-cetering/${order_detail_ids}`, '_blank');
|
||||
window.open(`/dashboard/pekerjaan/label?data=${order_detail_ids}`, '_blank');
|
||||
// window.open(`https://smart.rsabhk.co.id:2222/service-reporting/label-cetering/${order_detail_ids}`, '_blank');
|
||||
}
|
||||
|
||||
@ -49,6 +49,7 @@ document.getElementById('formActionOrder').addEventListener('submit', function (
|
||||
});
|
||||
getReminderKonfirmasiPesanan()
|
||||
getReminderVerifikasiMakanan()
|
||||
getReminderVerifikasiMakananOffCanvas()
|
||||
datatablePending.bootstrapTable('refresh');
|
||||
modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
||||
};
|
||||
@ -95,7 +96,7 @@ function AdminApproved(e){
|
||||
$("#billingOrder").addClass('d-none')
|
||||
|
||||
}
|
||||
$("#confirmActionApproveBillingOrder").text('Pembayaran Via Billing '+ data.nama_pemesan + ' / ' + data.no_order)
|
||||
$("#confirmActionApproveBillingOrder").text('Pembayaran Via' + data.billing === "true" ? ' Billing ' : ' MCU '+ data.nama_pemesan + ' / ' + data.no_order)
|
||||
formActionApproveBillingOrder.attr(`action`, `/dashboard/pending/action-billing/${data.order_id}`)
|
||||
}
|
||||
|
||||
|
||||
@ -88,7 +88,9 @@
|
||||
},
|
||||
{
|
||||
title: "Cara Pembayaran",
|
||||
field: 'cara_pembayaran',
|
||||
formatter: function(value, row){
|
||||
return row?.cara_pembayaran || 'MCU'
|
||||
},
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
@ -167,6 +169,7 @@
|
||||
{
|
||||
title: "Tgl Pemesanan",
|
||||
formatter: function(value, row) {
|
||||
|
||||
if (!row?.entry_at) return '-';
|
||||
const date = new Date(row.entry_at);
|
||||
return date.toLocaleString('id-ID', {
|
||||
|
||||
@ -119,7 +119,8 @@ function toggleLabelButton(enable) {
|
||||
// Download Label
|
||||
function labelDownload() {
|
||||
const ids = getSelectedRowsForLabel().map(item => item.order_detail_id);
|
||||
window.open(`https://smart.rsabhk.co.id:2222/service-reporting/label-cetering/${ids}`, '_blank');
|
||||
window.open(`/dashboard/pekerjaan/label?data=${ids}`, '_blank');
|
||||
// window.open(`https://smart.rsabhk.co.id:2222/service-reporting/label-cetering/${ids}`, '_blank');
|
||||
}
|
||||
|
||||
// Table Columns
|
||||
@ -142,7 +143,7 @@ function getTableColumns() {
|
||||
data-id="${r.order_detail_id}"
|
||||
data-nama_pemesan="${r?.order?.nama_pemesan}"
|
||||
data-no_order="${r?.order?.no_order}"
|
||||
data-menu="${r?.menu?.nama_menu || r?.paket_menu?.nama_paket}"
|
||||
data-menu="${r?.menu?.nama_menu || r?.master_mcu?.nama_mcu}"
|
||||
data-jenis_customer="${r?.order?.jenis_customer}"
|
||||
data-type="${r?.type}">
|
||||
<i class="fa fa-check me-1"></i>
|
||||
@ -164,7 +165,7 @@ function getTableColumns() {
|
||||
return `<span class="badge ${badgeClass} px-3 py-1">${status}</span>`;
|
||||
}
|
||||
},
|
||||
{ title: "Menu", formatter: (v, r) => r?.menu?.nama_menu || r?.paket_menu?.nama_paket, sortable: true },
|
||||
{ title: "Menu", formatter: (v, r) => r?.menu?.nama_menu || r?.master_mcu?.nama_mcu, sortable: true },
|
||||
{
|
||||
title: "Karbohidrat",
|
||||
formatter: (v, r) => {
|
||||
@ -175,6 +176,14 @@ function getTableColumns() {
|
||||
},
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
title:"Total Kalori",
|
||||
formatter: function(value, row){
|
||||
|
||||
|
||||
return row?.total_kalori ? row?.total_kalori + ' kal' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "Pemesan",
|
||||
formatter: (v, r) => `
|
||||
@ -184,7 +193,12 @@ function getTableColumns() {
|
||||
</ul>`
|
||||
},
|
||||
{ title: "Tgl Antar", field: 'tgl_antar' },
|
||||
{ title: "Waktu Pemesanan", field: 'type', sortable: true },
|
||||
{ title: "Waktu Pengantaran",
|
||||
formatter: function(value, row){
|
||||
if(row?.order?.jenis_customer === 'MCU')return row.jam_layanan.slice(0, 5);
|
||||
return row?.type
|
||||
},
|
||||
sortable: true },
|
||||
{ title: "Catatan", field: 'catatan', sortable: true },
|
||||
];
|
||||
}
|
||||
@ -205,20 +219,22 @@ function detailOrder(id){
|
||||
<div class="col-md-12 mb-3">
|
||||
<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;">
|
||||
<div class="${data?.order?.jenis_customer === "MCU" ? 'd-none' : 'col-md-5 d-flex align-items-center p-2'} ">
|
||||
<img src="/gambar/${data?.menu?.foto}" alt="Foto Menu" class="img-fluid rounded shadow m-auto" style="max-height: 240px; width: 220px;">
|
||||
</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>
|
||||
<div class="${data?.order?.jenis_customer === "MCU" ? 'col-md-12' : 'col-md-7 p-1'}">
|
||||
<p class="mb-1">Nama Menu: <strong>${data?.menu?.nama_menu || data?.master_mcu?.nama_mcu}</strong></p>
|
||||
<p class="mb-1">Tanggal Antar: <span>${data?.tgl_antar || 0}</span></p>
|
||||
<p class="mb-1">Jumlah: <span>${data?.jumlah || 0}</span></p>
|
||||
${data?.total_kalori ? `<p class="mb-1">Total Kalori: <span>${data?.total_kalori || 0} kal</span></p>` : ''}
|
||||
<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}
|
||||
</span>
|
||||
</p>
|
||||
<p class="mb-1">Catatan: <strong>${data?.catatan || '-'}</strong></p>
|
||||
${data?.order?.jenis_customer === 'MCU' ? '' : `
|
||||
<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>
|
||||
@ -228,12 +244,12 @@ function detailOrder(id){
|
||||
` : data?.order?.jenis_customer === "Karyawan RSAB Harapan Kita" ? `
|
||||
<p class="mb-1">Bagian /Instalasi: <strong>${data?.order?.bagian_instalasi || '-'}</strong></p>
|
||||
<p class="mb-1">No Ekstensien: <strong>${data?.order?.no_ekstensien || '-'}</strong></p>
|
||||
` :`
|
||||
` : data?.order?.jenis_customer === "Keluarga Pasien / Penunggu Pasien" ? `
|
||||
<p class="mb-1">Nama Pasien: <strong>${data?.order?.nama_pasien || '-'}</strong></p>
|
||||
<p class="mb-1">Ruang Perawatan: <strong>${data?.order?.ruang_perawatan || '-'}</strong></p>
|
||||
<p class="mb-1">Nomor Kamar Perawatan: <strong>${data?.order?.no_kamar_perawatan || '-'}</strong></p>
|
||||
<p class="mb-1">Kelas Perawatan: <strong>${data?.order?.kelas_perawatan || '-'}</strong></p>
|
||||
`
|
||||
` : ''
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@ -267,7 +283,7 @@ function approve(e){
|
||||
offcanvas.hide();
|
||||
const data = $(e).data();
|
||||
new bootstrap.Modal(modalActionOrderPekerjaan).show();
|
||||
$("#confirmActionApproveOrder").text(data?.menu + ' (' + data?.type +')')
|
||||
$("#confirmActionApproveOrder").text(data?.menu + (!data?.type ? '' : `(${data?.type})`))
|
||||
$("#confirmNoOrder").text(data?.no_order + ' (' + data?.nama_pemesan +')')
|
||||
document.getElementById('formActionApproveOrder').setAttribute(`action`, `/dashboard/pending/update-detail-status/${data.id}`)
|
||||
document.getElementById('modalActionApproveOrder').addEventListener('hidden.bs.modal', () => {
|
||||
|
||||
@ -10,11 +10,11 @@ function fetchDetailOrder(order_id){
|
||||
<div class="col-md-12 mb-3">
|
||||
<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: 250px; width: auto;">
|
||||
<div class="${data?.jenis_customer === "MCU" ? 'd-none' : '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: 250px; width: 240px;">
|
||||
</div>
|
||||
<div class="col-md-5 p-2">
|
||||
<p class="mb-1">Nama Menu: <strong>${detail?.menu?.nama_menu || '-'}</strong></p>
|
||||
<div class="${data?.jenis_customer === "MCU" ? 'col-md-12' : 'col-md-5 p-2'}">
|
||||
<p class="mb-1">Nama Menu: <strong>${detail?.menu?.nama_menu || detail?.master_mcu?.nama_mcu}</strong></p>
|
||||
<p class="mb-1">Jumlah: <span>${detail?.jumlah || 0}</span></p>
|
||||
<p class="mb-1">Tanggal Pesan: <span>${detail?.tgl_antar || 0}</span></p>
|
||||
<p class="mb-1">Harga: <strong>Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||
@ -24,7 +24,8 @@ function fetchDetailOrder(order_id){
|
||||
${detail?.status_order}
|
||||
</span>
|
||||
</p>
|
||||
<p class="mb-1">Catatan : <span>${detail?.catatan || '-'}</span></p>
|
||||
${detail?.catatan ? ` <p class="mb-1">Catatan : <span>${detail?.catatan || '-'}</span></p>` : ''}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -69,12 +70,12 @@ function fetchDetailOrder(order_id){
|
||||
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
|
||||
<p class="mb-1">No Ekstensien: <strong>${data?.no_ekstensien || '-'}</strong></p>
|
||||
`
|
||||
: `
|
||||
: data?.jenis_customer === "Keluarga Pasien / Penunggu Pasien" ? `
|
||||
<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>
|
||||
|
||||
@ -6,17 +6,21 @@ function fetchDetailOrder(order_id){
|
||||
document.getElementById('pesanan_container').innerHTML =''
|
||||
// Generate HTML untuk order_detail
|
||||
const detailHTML = (data?.order_detail || []).map(detail => {
|
||||
const kalori = detail?.total_kalori ? `
|
||||
<p class="mb-1">Total Kalori: <span>${detail?.total_kalori || 0} kal</span></p>`
|
||||
: '';
|
||||
return `
|
||||
<div class="col-md-12 mb-3">
|
||||
<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: 250px; width: auto;">
|
||||
<div class="${data?.jenis_customer === "MCU" ? 'd-none' : '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: 250px; width: 240px;">
|
||||
</div>
|
||||
<div class="col-md-5 p-2">
|
||||
<p class="mb-1">Nama Menu: <strong>${detail?.menu?.nama_menu || '-'}</strong></p>
|
||||
<div class="${data?.jenis_customer === "MCU" ? 'col-md-12' : 'col-md-5 p-2'} ">
|
||||
<p class="mb-1">Nama Menu: <strong>${detail?.menu?.nama_menu || detail?.master_mcu?.nama_mcu}</strong></p>
|
||||
<p class="mb-1">Jumlah: <span>${detail?.jumlah || 0}</span></p>
|
||||
<p class="mb-1">Tanggal Pesan: <span>${detail?.tgl_antar || 0}</span></p>
|
||||
${kalori}
|
||||
<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'}"
|
||||
@ -24,14 +28,15 @@ function fetchDetailOrder(order_id){
|
||||
${detail?.status_order}
|
||||
</span>
|
||||
</p>
|
||||
<p class="mb-1">Catatan : <span>${detail?.catatan || '-'}</span></p>
|
||||
${detail?.catatan ? `<p class="mb-1">Catatan : <span>${detail?.catatan || '-'}</span></p>` : ''}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}).join('');
|
||||
|
||||
|
||||
const html = `
|
||||
<div class="row mt-4">
|
||||
|
||||
@ -70,16 +75,16 @@ function fetchDetailOrder(order_id){
|
||||
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
|
||||
<p class="mb-1">No Ekstensien: <strong>${data?.no_ekstensien || '-'}</strong></p>
|
||||
`
|
||||
: `
|
||||
: data?.jenis_customer === "Keluarga Pasien / Penunggu Pasien" ? `
|
||||
<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>
|
||||
|
||||
@ -68,7 +68,9 @@
|
||||
},
|
||||
{
|
||||
title: "Cara Pembayaran",
|
||||
field: 'cara_pembayaran',
|
||||
formatter: function(value, row){
|
||||
return row?.cara_pembayaran || 'MCU'
|
||||
},
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
|
||||
134
resources/views/dashboard/label/index.blade.php
Normal file
@ -0,0 +1,134 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Label {{ $label?->order?->no_order ?? '-' }}</title>
|
||||
<style>
|
||||
@page {
|
||||
size: 80mm 130mm landscape;
|
||||
margin: 2mm 1.5mm 2mm 1.5mm;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family:'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
|
||||
font-size: 7.5px;
|
||||
line-height: 1.1;
|
||||
margin: 0;
|
||||
color: #000;
|
||||
margin-left: 22px;
|
||||
}
|
||||
.logo {
|
||||
|
||||
display: block;
|
||||
width: 115px;
|
||||
height: 35px;
|
||||
margin-top: 15px;
|
||||
margin-left: 13px;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
margin-top: -32px;
|
||||
margin-left:21px;
|
||||
}
|
||||
|
||||
.order {
|
||||
position: absolute;
|
||||
font-size: 9.5px;
|
||||
margin-left: 140px;
|
||||
margin-top: -12px !important;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.info {
|
||||
margin-top:10px;
|
||||
margin-left: 30px !important;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
|
||||
}
|
||||
.info td {
|
||||
padding: 2px 5px;
|
||||
vertical-align: top;
|
||||
font-size: 10px;
|
||||
}
|
||||
.info td:first-child {
|
||||
width: 30%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.footer {
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
.footer-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px; /* jarak antar elemen */
|
||||
}
|
||||
.footer-logo {
|
||||
height: 45px; /* samakan tinggi logo */
|
||||
}
|
||||
.footer-text {
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<img src="{{ public_path('logo/logo_rsabhk.png') }}" class="logo">
|
||||
|
||||
<div class="title">CATERING RSAB HARAPAN KITA</div>
|
||||
<div class="order">No Order : {{ $label?->order?->no_order ?? 'xxxxxx' }}</div>
|
||||
|
||||
<table class="info">
|
||||
<tr><td>Nama Pemesan {{ $label?->order?->jenis_customer === "Keluarga Pasien / Penunggu Pasien" ? '/ Pasien' : ''}}</td><td>: {{ $label?->order?->nama_pemesan }} {{ $label?->order?->jenis_customer === "Keluarga Pasien / Penunggu Pasien" ? '/ ' . $label?->order?->nama_pasien : ''}}</td></tr>
|
||||
@if($label?->order?->jenis_customer === "Keluarga Pasien / Penunggu Pasien")
|
||||
<tr><td>Ruang Perawatan/No Kamar</td><td>: {{ $label?->order?->kelas_perawatan ?? '-'}} / {{ $label?->order?->no_kamar_perawatan ?? '-'}} </td></tr>
|
||||
@elseif($label?->order?->jenis_customer === "Karyawan RSAB Harapan Kita")
|
||||
<tr><td>Bagian/No Ekstensien </td><td>: {{ $label?->order?->bagian_instalasi ?? '-'}} / {{ $label?->order?->no_ekstensien ?? '-'}} </td></tr>
|
||||
@endif
|
||||
<tr><td>Pesanan</td>
|
||||
<td>
|
||||
<span style="vertical-align: top;">:</span>
|
||||
<span style="max-width: 54mm; word-wrap: break-word; white-space: normal; display: inline-block; vertical-align: top;">
|
||||
{{ $label?->masterMcu?->nama_mcu ?? $label?->menu?->nama_menu }}
|
||||
</span>
|
||||
</td></tr>
|
||||
<tr><td>Total Kalori</td><td>: {{ isset($label->total_kalori) ? $label->total_kalori . ' kal' : '-' }}</td></tr>
|
||||
<tr><td>Harga Satuan</td><td>: Rp {{ number_format($label?->harga_satuan, 0, ',', '.') }}</td></tr>
|
||||
<tr><td>Tanggal Produksi</td><td>: {{ $label?->tgl_antar ? \Carbon\Carbon::parse($label->tgl_antar)->translatedFormat('d F Y') : '-' }} </td></tr>
|
||||
<tr><td>No. Telp</td><td>: {{ $label?->order?->no_wa ?? '-' }}</td></tr>
|
||||
@if ($label?->order?->alamat)
|
||||
<tr>
|
||||
<td style="vertical-align: top;">Alamat</td>
|
||||
<td><span style="vertical-align: top;">:</span>
|
||||
<span style="max-width: 54mm; word-wrap: break-word; white-space: normal; display: inline-block; vertical-align: top;">
|
||||
{{ $label?->order?->alamat }}
|
||||
</span>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
|
||||
</table>
|
||||
|
||||
<div class="footer">
|
||||
<div class="footer-content">
|
||||
<img src="{{ public_path('logo/halal_gizi.png') }}" alt="Halal" style="height: 52px; margin-top:12px;">
|
||||
<span class="footer-text">SELAMAT MENIKMATI</span>
|
||||
<img src="{{ public_path('logo/iso_gizi.png') }}" alt="ISO 22000" class="footer-logo">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
5
resources/views/dashboard/label/multi.blade.php
Normal file
@ -0,0 +1,5 @@
|
||||
@foreach ($orderDetail as $label)
|
||||
<div @if (!$loop->last) style="page-break-after: always;" @endif>
|
||||
@include('dashboard.label.index', ['label' => $label])
|
||||
</div>
|
||||
@endforeach
|
||||
@ -41,7 +41,7 @@
|
||||
|
||||
<!-- fontawosome CSS -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||
|
||||
<link rel="stylesheet" href="{{ ver('/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.css') }}../" />
|
||||
{{-- flatcpicker css --}}
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
<option value="Masyarakat Umum">Masyarakat Umum</option>
|
||||
<option value="Karyawan RSAB Harapan Kita">Karyawan RSAB Harapan Kita</option>
|
||||
<option value="Keluarga Pasien / Penunggu Pasien">Keluarga Pasien / Penunggu Pasien</option>
|
||||
<option value="MCU">MCU</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -114,7 +114,7 @@
|
||||
<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>
|
||||
<th>Waktu Makan <br/> /Jam Layanan</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -133,7 +133,7 @@
|
||||
@endif
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $detail->menu->nama_menu ?? '-' }}</td>
|
||||
<td>{{ $detail->menu->nama_menu ?? $detail?->masterMcu?->nama_mcu }}</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>
|
||||
@ -142,7 +142,7 @@
|
||||
? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y')
|
||||
: '-' }}
|
||||
</td>
|
||||
<td style="text-align: center;">{{ $detail->type }}</td>
|
||||
<td style="text-align: center;">{{ $detail->type ?? substr($detail->jam_layanan, 0, 5) }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@empty
|
||||
|
||||
@ -4,11 +4,12 @@
|
||||
<meta charset="UTF-8">
|
||||
<title>Daftar Pesanan</title>
|
||||
<style>
|
||||
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.5;
|
||||
margin: 20px;
|
||||
margin: 25px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
@ -51,7 +52,7 @@
|
||||
|
||||
th, td {
|
||||
border: 1px solid #bbb;
|
||||
padding: 6px 8px;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
|
||||
th {
|
||||
@ -65,11 +66,11 @@
|
||||
}
|
||||
|
||||
th:nth-child(7), td:nth-child(7) {
|
||||
width: 15%; /* buat lebih panjang dari kolom lain */
|
||||
width: 10%; /* buat lebih panjang dari kolom lain */
|
||||
}
|
||||
|
||||
th:nth-child(4), td:nth-child(4) {
|
||||
width: 60px;
|
||||
width: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@ -118,13 +119,14 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th style="width: 5%;">No</th>
|
||||
<th>Nama Pemesan</th>
|
||||
<th>Status Order</th>
|
||||
<th>Tanggal Antar</th>
|
||||
<th>Waktu Makan</th>
|
||||
<th>Waktu Makan <br/> /Jam Layanan</th>
|
||||
<th>Menu</th>
|
||||
<th>Karbohidrat</th>
|
||||
<th>Total Kalori</th>
|
||||
<th>Keterangan</th>
|
||||
<th>Jumlah</th>
|
||||
<th>Harga Satuan (Rp)</th>
|
||||
@ -133,7 +135,7 @@
|
||||
<tbody>
|
||||
@forelse ($pekerjaan as $i => $row)
|
||||
<tr>
|
||||
<td>{{ $i + 1 }}</td>
|
||||
<td style="width: 5%;">{{ $i + 1 }}</td>
|
||||
<td>
|
||||
{{ $row['order']['nama_pemesan'] ?? '-' }}
|
||||
@if (!empty($row['order']['jenis_customer']))
|
||||
@ -146,15 +148,16 @@
|
||||
? \Carbon\Carbon::parse($row['tgl_antar'])->locale('id')->translatedFormat('d F Y')
|
||||
: '-' }}
|
||||
</td>
|
||||
<td>{{ $row['type'] ?? '-' }}</td>
|
||||
<td>{{ $row['menu']['nama_menu'] ?? '-' }}</td>
|
||||
<td>{{ $row['type'] ?? substr($row['jam_layanan'], 0, 5) }}</td>
|
||||
<td>{{ $row['masterMcu']['nama_mcu'] ?? $row['menu']['nama_menu'] ?? '-' }}</td>
|
||||
<td>
|
||||
@if($row['karbohidrat'])
|
||||
{{ $row['karbohidrat']['nama_karbohidrat'] }} ({{ $row['karbohidrat']['nilai_kalori'] ? $row['karbohidrat']['nilai_kalori'] . ' kkal' : '-' }})
|
||||
{{ $row['karbohidrat']['nama_karbohidrat'] }} ({{ $row['karbohidrat']['nilai_kalori'] ? $row['karbohidrat']['nilai_kalori'] . ' kkal' : '-' }})
|
||||
@else
|
||||
-
|
||||
-
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $row['total_kalori'] ? $row['total_kalori'] . ' kal' : '' }}</td>
|
||||
<td class="keterangan">
|
||||
@php
|
||||
$jenis = strtolower($row['order']['jenis_customer'] ?? '');
|
||||
|
||||
@ -112,9 +112,10 @@
|
||||
<th>Menu</th>
|
||||
<th>Status Order</th>
|
||||
<th style="width:9%;">Jumlah</th>
|
||||
<th style="width:9%;">Total Kalori</th>
|
||||
<th style="width:9%; text-align:center;">Harga Satuan (Rp)</th>
|
||||
<th>Tanggal Antar</th>
|
||||
<th>Waktu Makan</th>
|
||||
<th>Waktu Makan <br/> /Jam Layanan</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -133,16 +134,19 @@
|
||||
@endif
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $detail->menu->nama_menu ?? '-' }}</td>
|
||||
<td>{{ $detail->menu->nama_menu ?? $detail?->masterMcu?->nama_mcu }}</td>
|
||||
<td>{{ $detail->status_order ?? '-' }}</td>
|
||||
<td style="text-align: center;">{{ $detail->jumlah }}</td>
|
||||
<td style="text-align: center;">{{ $detail->total_kalori ? $detail->total_kalori . ' kal' : '-' }}</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 ?? (isset($detail->jam_layanan) ? substr($detail->jam_layanan, 0, 5) : '-') }}
|
||||
</td>
|
||||
<td style="text-align: center;">{{ $detail->type }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@empty
|
||||
|
||||
@ -73,17 +73,19 @@
|
||||
const harga = parseInt(item.harga_satuan);
|
||||
const jumlah = parseInt(item.jumlah);
|
||||
const total = harga * jumlah;
|
||||
console.log(item);
|
||||
itemHTML += `
|
||||
<div class="card mb-2 shadow-sm">
|
||||
<div class="row g-0">
|
||||
<div class="col-md-4 p-2">
|
||||
<div class="${data?.cara_pembayaran === "MCU" ? 'd-none' : 'col-md-4 p-2'}">
|
||||
<img src="/gambar/${item.foto || 'default.jpg'}" class="img-fluid rounded-start" alt="${item.nama_item}" style="max-height: 150px; width:100%; object-fit: cover;">
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class="${data?.cara_pembayaran === "MCU" ? 'col-md-12' : 'col-md-8'}">
|
||||
<div class="card-body py-2 px-3 mt-2">
|
||||
<h6 class="card-title mb-1">${item.nama_item}</h6>
|
||||
<p class="mb-1 small text-muted">Tgl Antar: <strong>${item.tgl_antar}</strong></p>
|
||||
${item?.total_kalori ? `
|
||||
<p class="mb-1 small text-muted">Total Kalori: <strong>${item?.total_kalori || '-'} kal</strong></p>
|
||||
` : ''}
|
||||
<p class="mb-1 small">Harga: <strong>${harga.toLocaleString('id-ID')}</strong></p>
|
||||
<p class="mb-1 small">Jumlah: <strong>${jumlah}</strong></p>
|
||||
<p class="mb-0 small">Total: <strong class="text-success">Rp ${total.toLocaleString('id-ID')}</strong></p>
|
||||
@ -92,7 +94,8 @@
|
||||
: data.status_order === 'Belum Bayar' ? '' : 'bg-success'}">
|
||||
${item?.status_order}
|
||||
</p>
|
||||
<p class="mb-1 small">Catatan: <strong>${item?.catatan || '-'}</strong></p>
|
||||
${data?.cara_pembayaran === "MCU" ? '' : `
|
||||
<p class="mb-1 small">Catatan: <strong>${item?.catatan || '-'}</strong></p>`}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -202,7 +205,7 @@
|
||||
</div>
|
||||
` :`
|
||||
<div class="text-center mb-4">
|
||||
<button class="btn btn-success fw-bold">Pembayaran VIA Billing</button>
|
||||
<button class="btn btn-success fw-bold">Pembayaran VIA ${data?.cara_pembayaran === "MCU" ? 'MCU' : 'Billing'}</button>
|
||||
</div>
|
||||
`}
|
||||
<div class="text-center">
|
||||
|
||||
@ -23,15 +23,15 @@
|
||||
<div class="col-12 mb-2">
|
||||
<h6 class="fw-bold text-muted mb-1">
|
||||
Pilih Tanggal Makanan
|
||||
<a tabindex="0" class="ms-1 text-decoration-none" role="button" data-bs-toggle="popover" data-bs-trigger="focus"
|
||||
<a tabindex="0" class="text-decoration-none" role="button" data-bs-toggle="popover" data-bs-trigger="focus"
|
||||
title="Panduan"
|
||||
data-bs-content="Pilih rentang tanggal untuk melihat daftar menu yang tersedia pada tanggal tersebut.">
|
||||
<i class="fa fa-info-circle text-secondary"></i>
|
||||
</a>
|
||||
</h6>
|
||||
|
||||
<div class="input-group input-group-sm mb-2" style="max-width: 350px;">
|
||||
<span class="input-group-text bg-white px-2">
|
||||
<div class="input-group input-group-sm mb-2" style="max-width: 450px;">
|
||||
<span class="input-group-text bg-white px-1">
|
||||
<i class="fa fa-calendar-alt text-primary"></i>
|
||||
</span>
|
||||
|
||||
@ -124,7 +124,7 @@
|
||||
<div class="fw-bold mb-2">
|
||||
<i class="fa fa-info-circle me-1"></i>Informasi
|
||||
</div>
|
||||
<ul class="mb-0 ps-3">
|
||||
<ul class="mb-0 ps-3 pe-3">
|
||||
<li>
|
||||
Butuh bantuan? Hubungi WhatsApp <strong>Instalasi Gizi</strong>:
|
||||
<a href="https://wa.me/08815611382 " target="_blank">08815611382 </a> <br>
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<div class="container position-relative d-flex align-items-center justify-content-between">
|
||||
<a href="/" class="logo d-flex align-items-center me-auto">
|
||||
<!-- Uncomment the line below if you also wish to use an image logo -->
|
||||
<img src="/logo/logo_rsabhk.png" width="170" alt="Logo RSAB HARAPAN KITA" class="logo-img">
|
||||
<img src="/logo/logo_rsabhk.png" alt="Logo RSAB HARAPAN KITA" class="logo-img">
|
||||
<h1 class="sitename"></h1>
|
||||
</a>
|
||||
|
||||
|
||||
@ -11,11 +11,11 @@ use App\Http\Controllers\MasterMcuController;
|
||||
use App\Http\Controllers\MenuController;
|
||||
use App\Http\Controllers\PesananController;
|
||||
use App\Mail\NotifikasiCustomer;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
|
||||
|
||||
// Route::get('/blank', function () {
|
||||
// return view('layouts.blank');
|
||||
// });
|
||||
@ -80,12 +80,12 @@ Route::group(['middleware' => ['auth']], function(){
|
||||
Route::get('datatable/pekerjaan', [PesananController::class, 'getPekerjaan']);
|
||||
Route::post('pekerjaan/export', [PesananController::class, 'exportPekerjaan']);
|
||||
Route::get('/pekerjaan/detail/{id}', [PesananController::class, 'getPekerjaanDetail']);
|
||||
Route::post('/pekerjaan/label', [PesananController::class, 'downloadLabel']);
|
||||
Route::get('/pekerjaan/label', [PesananController::class, 'downloadLabel']);
|
||||
});
|
||||
|
||||
Route::post('/logout', [AuthController::class, 'logout']);
|
||||
});
|
||||
|
||||
// LAPORAN LABEL + SAMA PERHITUNGAN KALORI belum selesai
|
||||
|
||||
Route::get('/', [CustomerController::class, 'index']);
|
||||
Route::get('/checkout', [CustomerController::class, 'checkout']);
|
||||
@ -106,3 +106,8 @@ Route::get('/success-mcu', [CustomerController::class, 'successMcu']);
|
||||
Route::get('/dumy', function(){
|
||||
return view('guest.layout_mail');
|
||||
});
|
||||
Route::get('/label', function(){
|
||||
$pdf = Pdf::loadView('dashboard.label.index');
|
||||
return $pdf->stream('label_.pdf');
|
||||
|
||||
});
|
||||
|
||||