diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php
index d3cfec4..57bfb7e 100644
--- a/app/Http/Controllers/CustomerController.php
+++ b/app/Http/Controllers/CustomerController.php
@@ -113,13 +113,6 @@ class CustomerController extends Controller
->table('public.detail_menu_paket_harian as dmph')
->whereIn('dmph.master_menu_id', $menuIds)
->select('dmph.master_menu_id', 'dmph.tgl_harian')
- // ->orderByRaw("
- // CASE
- // WHEN tgl_harian >= ? THEN 0
- // ELSE 1
- // END,
- // tgl_harian ASC
- // ", [$today])
->get()
->groupBy('master_menu_id');
$kkal = DB::connection('dbOrderGizi')
@@ -130,38 +123,63 @@ class CustomerController extends Controller
->get()
->groupBy('master_menu_id');
- // Step 4: Transform response
- $enriched = $menuItems->map(function ($menu) use ($klasifikasi, $dmph, $kkal) {
- return [
- 'master_menu_id' => $menu->master_menu_id,
- 'nama' => $menu->nama_menu,
- 'foto' => $menu->foto,
- 'jenis_menu' => $menu->jenis_menu,
- 'harga_public' => $menu->harga_public,
- 'harga_karyawan' => $menu->harga_karyawan,
- 'harga_keluarga_pasien' => $menu->harga_keluarga_pasien,
- 'status' => $menu->status,
- 'deskripsi' => $menu->deskripsi,
- 'apakah_someday' => $menu->apakah_someday,
- 'apakah_menu_sore' => $menu->apakah_menu_sore,
- 'apakah_menu_siang' => $menu->apakah_menu_siang,
- 'klasifikasiMenu' => isset($klasifikasi[$menu->master_menu_id]) ? $klasifikasi[$menu->master_menu_id]->map(function ($item) {
- return [
- 'kategori_diet_id' => $item->kategori_diet_id,
- 'nama_kategori_diet' => $item->nama_kategori_diet,
- ];
- })->values() : [],
- 'dmph' => isset($dmph[$menu->master_menu_id]) ? $dmph[$menu->master_menu_id]->map(function ($item) {
- return [
- 'tgl_harian' => $item->tgl_harian
- ];
- })->values() : [],
- 'kalori' => isset($kkal[$menu->master_menu_id]) ? $kkal[$menu->master_menu_id]->map(function ($item) {
- return [
- 'nilai_kalori' => $item->nilai_kalori,
- ];
- })->values() : [],
- ];
+ function buildGroupLabel($tglList, $isSomeday){
+ if($isSomeday) return 'Menu Sameday';
+
+ if(empty($tglList)) return '-';
+ $days = collect($tglList)->map(fn($t) => substr($t, -2))
+ ->unique()
+ ->sort()
+ ->values();
+ $groups = [];
+ foreach ($days as $d) {
+ $lastDigit = substr($d, -1);
+ $groups[$lastDigit][] = $d;
+ }
+ // buat label
+ $labels = [];
+ foreach ($groups as $list) {
+ $labels[] = 'Menu Normal Tersedia Tanggal ' . implode(',', $list);
+ }
+ return implode(' & ', $labels);
+ }
+ // Step 4: Transform response
+ $enriched = $menuItems->map(function ($menu) use ($klasifikasi, $dmph, $kkal) {
+
+ $tglList = isset($dmph[$menu->master_menu_id]) ? collect($dmph[$menu->master_menu_id])->pluck('tgl_harian')->toArray() : [];
+
+ $groupLabel = buildGroupLabel($tglList, $menu->apakah_someday);
+ return [
+ 'master_menu_id' => $menu->master_menu_id,
+ 'nama' => $menu->nama_menu,
+ 'foto' => $menu->foto,
+ 'jenis_menu' => $menu->jenis_menu,
+ 'harga_public' => $menu->harga_public,
+ 'harga_karyawan' => $menu->harga_karyawan,
+ 'harga_keluarga_pasien' => $menu->harga_keluarga_pasien,
+ 'status' => $menu->status,
+ 'deskripsi' => $menu->deskripsi,
+ 'apakah_someday' => $menu->apakah_someday,
+ 'apakah_menu_sore' => $menu->apakah_menu_sore,
+ 'apakah_menu_siang' => $menu->apakah_menu_siang,
+ 'group_label' => $groupLabel,
+ 'klasifikasiMenu' => isset($klasifikasi[$menu->master_menu_id]) ? $klasifikasi[$menu->master_menu_id]->map(function ($item) {
+ return [
+ 'kategori_diet_id' => $item->kategori_diet_id,
+ 'nama_kategori_diet' => $item->nama_kategori_diet,
+ ];
+ })->values() : [],
+ 'dmph' => isset($dmph[$menu->master_menu_id]) ? $dmph[$menu->master_menu_id]->map(function ($item) {
+ return [
+ 'tgl_harian' => $item->tgl_harian
+ ];
+ })->values() : [],
+ 'kalori' => isset($kkal[$menu->master_menu_id]) ? $kkal[$menu->master_menu_id]->map(function ($item) {
+ return [
+ 'nilai_kalori' => $item->nilai_kalori,
+ ];
+ })->values() : [],
+ ];
});
// Urutkan: someday → tgl_harian terdekat
@@ -374,6 +392,7 @@ class CustomerController extends Controller
try {
$noOrder = request('no_order_result');
+ $medical_record = request('medical_record');
$evidence = request()->file('bukti_pembayaran');
$caraPembayaran = request('cara_pembayaran');
@@ -402,6 +421,7 @@ class CustomerController extends Controller
}else{
$payload['cara_pembayaran'] = 'Billing';
$payload['status_order'] = 'Menunggu Konfirmasi Pembayaran Via Billing';
+ $payload['medical_record'] = $medical_record ?? null;
}
// Update data order
$order->update($payload);
@@ -438,7 +458,7 @@ class CustomerController extends Controller
}
public function checkOrder(){
-
+
$payload = [
'title' => 'Check Order'
];
@@ -460,6 +480,7 @@ class CustomerController extends Controller
'od.tgl_antar',
'od.harga_satuan',
'od.status_order as status_order_detail',
+ 'od.catatan',
DB::raw("COALESCE(mm.nama_menu, mpm.nama_paket) as nama_item"),
DB::raw("COALESCE(mm.foto, mpm.foto) as foto"),
)
@@ -504,6 +525,7 @@ class CustomerController extends Controller
'jumlah' => $item->jumlah,
'harga_satuan' => $item->harga_satuan,
'status_order' => $item->status_order_detail,
+ 'catatan' => $item->catatan ?? '-'
// tambahkan field tambahan jika diperlukan
];
})->values(),
diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php
index c88ba79..1565c26 100644
--- a/app/Http/Controllers/PesananController.php
+++ b/app/Http/Controllers/PesananController.php
@@ -11,6 +11,8 @@ use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class PesananController extends Controller
{
@@ -42,6 +44,7 @@ class PesananController extends Controller
"DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
$tanggalFormatted
)
+ ->whereIn('o.status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing'])
->select(
'o.order_id',
'o.entry_at',
@@ -53,6 +56,7 @@ class PesananController extends Controller
'o.total_harga',
'o.bukti_pembayaran',
'o.note_dibatalkan',
+ 'o.medical_record',
'od.status_order as detail_status_order'
)->get()->groupBy('order_id');
$grouped = $orders->map(function($items){
@@ -70,6 +74,7 @@ class PesananController extends Controller
'status_order' => $first->status_order,
'cara_pembayaran' => $first->cara_pembayaran,
'bukti_pembayaran' => $first->bukti_pembayaran,
+ 'medical_record' => $first->medical_record,
'progress' => $progress,
'total_detail' => $totalDetail,
'selesai_detail' => $selesaiDetail,
@@ -249,7 +254,7 @@ class PesananController extends Controller
}
public function getPekerjaan(){
- $data = OrderDetail::with(['menu', 'paketMenu', 'order'])->whereHas('order', function($q){
+ $data = OrderDetail::with(['menu', 'paketMenu', 'order', 'karbohidrat'])->whereHas('order', function($q){
$q->where('status_order', 'Lunas');
});
$tanggal = request('tanggal');
@@ -280,7 +285,7 @@ class PesananController extends Controller
$startDate = request('start_date');
$endDate = request('end_date');
$now = Carbon::now()->format('Y-m-d H-i');
- $orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order'])->whereHas('order', function($q){
+ $orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order', 'karbohidrat'])->whereHas('order', function($q){
$q->where('status_order', 'Lunas');
})->whereBetween('tgl_antar', [$startDate, $endDate])->get();
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
@@ -303,15 +308,14 @@ class PesananController extends Controller
$order = Order::where('statusenabled', true)
->whereBetween('entry_at', [$startDate, $endDate])
->with('orderDetail')
- ->whereHas('orderDetail', function($q) {
- $q->where('status_order', '!=', 'Selesai');
- })
+ ->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing'])
->get();
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
$data = [
+ 'laporan' => 'LAPORAN KONFIRMASI PESANAN',
'waktu_cetak' => $waktu_cetak,
'orders' => $order,
'startDate' => $startDateFormatted,
@@ -350,7 +354,7 @@ class PesananController extends Controller
return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf');
}
- public function countPesananPending(){
+ public function countKonfirmasiPesanan(){
$count = Order::where('statusenabled', true)->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing'])->count();
return response()->json([
'status' => true,
@@ -358,10 +362,255 @@ class PesananController extends Controller
]);
}
- public function downloadLabel(Request $request){
- $items = $request->input('items');
+ public function countVerifikasiPesanan(){
+ $count = OrderDetail::where('status_order', 'Pending')->with('order')->whereHas('order', function($q){
+ $q->where('status_order', 'Lunas');
+ })->count();
+ return response()->json([
+ 'status' => true,
+ 'count' => $count,
+ ]);
+ }
- dd(json_encode($items));
+ public function laporanPesanan(){
+ $data = [
+ 'title' => 'Laporan Pesanan'
+ ];
+ return view('dashboard.pesanan.laporan.pesanan.index', $data);
+ }
+
+ public function getLaporanPesanan(){
+ $tanggal = request('tanggal');
+ if(!empty($tanggal)){
+ $tanggalFormatted = collect($tanggal)->map(function ($tgl){
+ return Carbon::parse($tgl)->toDateString();
+ })->toArray();
+ }else{
+ $tanggalFormatted = [Carbon::now()->toDateString()];
+ }
+ $orders = self::helperLaporanPesanan($tanggalFormatted);
+ $grouped = $orders->map(function($items){
+ $first = $items->first();
+ $totalDetail = $items->count();
+ $selesaiDetail = $items->where('detail_status_order', 'Selesai')->count();
+ $progress = $totalDetail > 0 ? round(($selesaiDetail / $totalDetail) * 100) : 0;
+ return [
+ 'order_id' => $first->order_id,
+ 'entry_at' => $first->entry_at,
+ 'no_order' => $first->no_order,
+ 'nama_pemesan' => $first->nama_pemesan,
+ 'jenis_customer' => $first->jenis_customer,
+ 'total_harga' => $first->total_harga,
+ 'status_order' => $first->status_order,
+ 'bukti_pembayaran' => $first->bukti_pembayaran,
+ 'cara_pembayaran' => $first->cara_pembayaran,
+ 'medical_record' => $first->medical_record,
+ 'progress' => $progress,
+ 'total_detail' => $totalDetail,
+ 'selesai_detail' => $selesaiDetail,
+ 'note_dibatalkan' => $first->note_dibatalkan,
+ ];
+ })
+ ->values();
+ return response()->json([
+ 'status' => true,
+ 'rows' => $grouped->values(),
+ 'total' => $grouped->count()
+ ]);
+ }
+
+
+ public function helperLaporanPesanan($tanggalFormatted){
+ $data = DB::connection('dbOrderGizi')->table('public.order as o')
+ ->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
+ ->where(['o.statusenabled' => true, 'o.status_order' => 'Lunas'])
+ ->whereRaw(
+ "DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
+ $tanggalFormatted
+ )
+ ->select(
+ 'o.order_id',
+ 'o.entry_at',
+ 'o.no_order',
+ 'o.nama_pemesan',
+ 'o.jenis_customer',
+ 'o.total_harga',
+ 'o.cara_pembayaran',
+ 'o.status_order',
+ 'o.bukti_pembayaran',
+ 'o.note_dibatalkan',
+ 'o.medical_record',
+ 'od.status_order as detail_status_order'
+ )->get()->groupBy('order_id');
+ return $data;
+ }
+
+ public function exportLaporanPesanan(){
+ $startDate = Carbon::parse(request('start_date'))->startOfDay();
+ $endDate = Carbon::parse(request('end_date'))->endOfDay();
+ $type = request('type');
+ $type_customer = request('type_customer');
+ $query = Order::where('statusenabled', true)->where('status_order', 'Lunas');
+
+ if($type_customer !== 'all'){
+ $query->where('jenis_customer', $type_customer);
+ }
+
+ $order = $query->whereBetween('entry_at', [$startDate, $endDate])->with('orderDetail')->get();
+
+ if($type === 'pdf'){
+ return $this->pdfPesanan($startDate, $endDate, $order);
+ }else{
+ return $this->excelPesanan($startDate, $endDate, $order);
+ }
+
+ }
+
+ public function pdfPesanan($startDate, $endDate, $order){
+ $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
+ $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
+ $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
+ $data = [
+ 'laporan' => 'Laporan Pesanan',
+ 'waktu_cetak' => $waktu_cetak,
+ 'orders' => $order,
+ 'startDate' => $startDateFormatted,
+ 'endDate' => $endDateFormatted
+ ];
+ $pdf = Pdf::loadView('dashboard.pesanan.pending.pdf', $data);
+
+ return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf');
+ }
+
+ public function excelPesanan($startDate, $endDate, $order){
+ $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
+ $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
+ $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
+ $spreadsheet = new Spreadsheet();
+ $sheet = $spreadsheet->getActiveSheet();
+
+ $sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
+ $sheet->mergeCells('A1:G1');
+ $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
+ $sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
+
+ $sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
+ $sheet->mergeCells('A2:G2');
+ $sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
+
+ // Header tabel
+ $headers = ["No", "Nomor Order", "Nama Customer", "Jenis Customer", "Tanggal Pesanan", "Total", "Detail Pesanan"];
+ $sheet->fromArray($headers, null, 'A4');
+ $sheet->getStyle('A4:G4')->getFont()->setBold(true);
+ $sheet->getStyle('A4:G4')->getAlignment()->setHorizontal('center');
+ $sheet->getStyle('A4:G4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
+
+ // Isi data
+ $row = 5;
+ foreach ($order as $index => $item) {
+ $sheet->setCellValue("A{$row}", $index + 1);
+ $sheet->setCellValue("B{$row}", $item->no_order);
+ $sheet->setCellValue("C{$row}", $item->nama_pemesan);
+ $sheet->setCellValue("D{$row}", $item->jenis_customer);
+ $sheet->setCellValue("E{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
+ $sheet->setCellValue("F{$row}", $item->total_harga);
+ $sheet->setCellValue("G{$row}", $item->orderDetail->map(function ($detail) {
+ return $detail->nama_menu . ' x' . $detail->jumlah;
+ })->implode(', '));
+
+ // Border tiap baris
+ $sheet->getStyle("A{$row}:G{$row}")->getBorders()->getAllBorders()
+ ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
+
+ $row++;
+ }
+
+ // Auto size kolom
+ foreach(range('A', 'G') as $col){
+ $sheet->getColumnDimension($col)->setAutoSize(true);
+ }
+ $lastRow = $row - 1;
+ $sheet->setAutoFilter("A4:P{$lastRow}");
+ // Download file
+ $fileName = 'laporan-pesanan-' . now()->format('Ymd-His') . '.xlsx';
+ $writer = new Xlsx($spreadsheet);
+
+ // Output ke browser
+ header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+ header("Content-Disposition: attachment; filename=\"{$fileName}\"");
+ header('Cache-Control: max-age=0');
+
+ $writer->save('php://output');
+ exit;
+ }
+
+
+ public function indexSemua(){
+ $payload = [
+ 'title' => 'Semua Pesanan',
+ ];
+ return view('dashboard.pesanan.semua.index', $payload);
+ }
+
+ public function getSemuaPekerjaan(){
+ $tanggal = request('tanggal');
+ if(!empty($tanggal)){
+ $tanggalFormatted = collect($tanggal)->map(function ($tgl){
+ return Carbon::parse($tgl)->toDateString();
+ })->toArray();
+ }else{
+ $tanggalFormatted = [Carbon::now()->toDateString()];
+ }
+ $orders = DB::connection('dbOrderGizi')->table('public.order as o')
+ ->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
+ ->where(['o.statusenabled' => true])
+ ->whereRaw(
+ "DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
+ $tanggalFormatted
+ )
+ ->select(
+ 'o.order_id',
+ 'o.entry_at',
+ 'o.no_order',
+ 'o.nama_pemesan',
+ 'o.jenis_customer',
+ 'o.total_harga',
+ 'o.cara_pembayaran',
+ 'o.status_order',
+ 'o.bukti_pembayaran',
+ 'o.note_dibatalkan',
+ 'o.medical_record',
+ 'od.status_order as detail_status_order'
+ )->get()->groupBy('order_id');
+
+ $grouped = $orders->map(function($items){
+ $first = $items->first();
+ $totalDetail = $items->count();
+ $selesaiDetail = $items->where('detail_status_order', 'Selesai')->count();
+ $progress = $totalDetail > 0 ? round(($selesaiDetail / $totalDetail) * 100) : 0;
+ return [
+ 'order_id' => $first->order_id,
+ 'entry_at' => $first->entry_at,
+ 'no_order' => $first->no_order,
+ 'nama_pemesan' => $first->nama_pemesan,
+ 'jenis_customer' => $first->jenis_customer,
+ 'total_harga' => $first->total_harga,
+ 'status_order' => $first->status_order,
+ 'bukti_pembayaran' => $first->bukti_pembayaran,
+ 'cara_pembayaran' => $first->cara_pembayaran,
+ 'progress' => $progress,
+ 'total_detail' => $totalDetail,
+ 'selesai_detail' => $selesaiDetail,
+ 'note_dibatalkan' => $first->note_dibatalkan,
+ ];
+ })
+ ->values();
+
+ return response()->json([
+ 'status' => true,
+ 'rows' => $grouped->values(),
+ 'total' => $grouped->count()
+ ]);
}
/**
* Show the form for creating a new resource.
diff --git a/app/Models/Order.php b/app/Models/Order.php
index 537b4db..65db063 100644
--- a/app/Models/Order.php
+++ b/app/Models/Order.php
@@ -36,7 +36,8 @@ class Order extends Model
'bagian_instalasi',
'note_dibatalkan',
'email',
- 'alamat'
+ 'alamat',
+ 'medical_record'
];
protected $cast = [
diff --git a/app/Models/OrderDetail.php b/app/Models/OrderDetail.php
index 492f5d9..c90d2ac 100644
--- a/app/Models/OrderDetail.php
+++ b/app/Models/OrderDetail.php
@@ -31,6 +31,9 @@ class OrderDetail extends Model
public function menu(){
return $this->belongsTo(Menu::class, 'master_menu_id', 'master_menu_id')->select('master_menu_id', 'nama_menu', 'foto');
}
+ public function karbohidrat(){
+ return $this->belongsTo(Karbohidrat::class, 'karbohidrat_id', 'karbohidrat_id')->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori');
+ }
public function paketMenu(){
return $this->belongsTo(PaketMenu::class, 'master_paket_menu_id', 'master_paket_menu_id')->select('master_paket_menu_id', 'nama_paket', 'foto');
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 452e6b6..656b4e6 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,6 +2,7 @@
namespace App\Providers;
+use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@@ -19,6 +20,7 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(): void
{
- //
+ Blade::component('dashboard.pesanan.components.modalExport', 'modalExport');
+ Blade::component('dashboard.pesanan.components.infoPesanan', 'infoPesanan');
}
}
diff --git a/config/mail.php b/config/mail.php
index 522b284..df6298d 100644
--- a/config/mail.php
+++ b/config/mail.php
@@ -47,6 +47,10 @@ return [
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
+ 'timeout' => null,
+ 'auth_mode' => null,
+ 'verify_peer'=> false,
+ 'auto_tls' => false
],
'ses' => [
diff --git a/public/asset_guests/css/main.css b/public/asset_guests/css/main.css
index 65f936e..4e48dca 100644
--- a/public/asset_guests/css/main.css
+++ b/public/asset_guests/css/main.css
@@ -1897,15 +1897,15 @@ section,
/* TOMBOL */
.btn {
- font-size: .60rem !important; /* ≈ 10 px */
- padding: .31rem .41rem !important;
- border-radius: .25rem !important;
+ font-size: .7rem !important;
+ padding: .5rem .25rem !important;
+ border-radius: .5rem;
}
-
- .d-flex.justify-content-between small { font-size: .65rem; }
+ .d-flex.justify-content-between small { font-size: .65rem; }
.d-flex.justify-content-between strong { font-size: .65rem; }
+
}
/* fallback < 360 px menjadi 1 kolom */
@@ -1925,4 +1925,38 @@ section,
#menuBtn:hover {
transform: translateX(-50%) translateY(-2px);
transition: transform .25s;
-}
\ No newline at end of file
+}
+
+.btn-loading {
+ pointer-events: none;
+ opacity: 0.8;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.btn-loading::after {
+ content: "";
+ border: 2px solid white;
+ border-top: 2px solid transparent;
+ border-radius: 50%;
+ width: 14px;
+ height: 14px;
+ animation: spin 0.6s linear infinite;
+}
+
+/* Khusus HP (max 576px) */
+@media (max-width: 576px) {
+ .btn-loading::after {
+ width: 10px;
+ height: 10px;
+ border-width: 1.5px;
+ }
+ .btn-loading {
+ padding: 4px 8px; /* tombol lebih kecil di HP */
+ }
+}
+
+@keyframes spin {
+ to { transform: rotate(360deg); }
+}
diff --git a/public/js/checkout/action.js b/public/js/checkout/action.js
index 7d6c1d4..2dc891d 100644
--- a/public/js/checkout/action.js
+++ b/public/js/checkout/action.js
@@ -92,7 +92,6 @@ async function submitOrderToServer(){
});
const result = await response.json();
- console.log(result);
if (result.status) {
// ✅ Hapus sessionStorage di client
diff --git a/public/js/checkout/index.js b/public/js/checkout/index.js
index 56de014..8b67931 100644
--- a/public/js/checkout/index.js
+++ b/public/js/checkout/index.js
@@ -290,7 +290,6 @@ function renderCartSummary() {
? item.harga_karyawan || 0
: item.harga_public || 0;
const itemTotal = pesananList.reduce((sum, p) => sum + (p.jumlah * harga), 0);
- console.log(checkout_biodata);
if (checkout_biodata.jenis_customer === "Karyawan RSAB Harapan Kita") {
$('#karyawan').addClass('d-none');
@@ -436,7 +435,7 @@ function renderCartSummary() {
: (item.tgl_tersedia ? `Tersedia pada tanggal: ${item.tgl_tersedia}` : 'Tidak ada info tanggal tersedia')}
- Menu: ${item.apakah_someday ? 'Someday' : 'Menu Normal'}
+ Menu: ${item.apakah_someday ? 'Sameday' : 'Menu Normal'}
${item.kalori
? ` Kalori: ${item.kalori} kkal
`
@@ -771,7 +770,7 @@ function initFlatpickrTersedia(item, i) {
dayNumbers.forEach(day => {
const dayStr = String(day).padStart(2, '0');
const fullDateStr = `${year}-${month}-${dayStr}`;
- const fullDate = new Date(`${fullDateStr}T23:00:00`);
+ const fullDate = new Date(`${fullDateStr}T00:00:00`);
// Jika bukan menu someday, cek aturan H-1 dan jam batas
if (item.apakah_someday) {
@@ -833,14 +832,17 @@ function toggleBuktiPembayaran() {
const metode = document.getElementById("cara_pembayaran").value;
const buktiSection = document.getElementById("bukti_section");
const buktiInput = document.getElementById("bukti_pembayaran");
+ const billing_section = document.getElementById("billing_section");
buktiInput.required = true;
if (metode === "billing") {
buktiSection.style.display = "none";
+ billing_section.style.display = "block";
buktiInput.required = false;
$("#modalActionMethodBillingOrder").modal('show')
} else {
buktiSection.style.display = "block";
+ billing_section.style.display = "none";
buktiInput.required = true;
$("#modalActionMethodBillingOrder").modal('hide')
}
diff --git a/public/js/count/konfirmasiPesanan.js b/public/js/count/konfirmasiPesanan.js
index b97d290..afa2ead 100644
--- a/public/js/count/konfirmasiPesanan.js
+++ b/public/js/count/konfirmasiPesanan.js
@@ -1,20 +1,43 @@
-// $(document).ready(function () {
-// getReminderOrder();
-// });
+$(document).ready(function () {
+ getReminderKonfirmasiPesanan();
+ getReminderVerifikasiMakanan()
+});
-// const getReminderOrder = () => {
-// $.ajax({
-// url: `/dashboard/count/pending`,
-// success: function (response) {
+const getReminderKonfirmasiPesanan = () => {
+ $.ajax({
+ url: `/dashboard/count/konfirmasi-pesanan`,
+ success: function (response) {
+ console.log(response);
-// const button = document.getElementById("konfirmasi_pesanan");
-// let count = response.count;
+ const button = document.getElementById("konfirmasi_pesanan");
+ let count = response.count;
-// button.classList.remove('d-none');
-// if(count === 0){
-// button.classList.add('d-none');
-// }
-// button.innerText = count;
-// },
-// });
-// };
+ button.classList.remove('d-none');
+ if(count === 0){
+ button.classList.add('d-none');
+ }
+ button.innerText = count;
+ },
+ });
+};
+
+const getReminderVerifikasiMakanan = () => {
+ $.ajax({
+ url: `/dashboard/count/verifikasi-pesanan`,
+ success: function (response) {
+ console.log(response);
+
+ const button = document.getElementById("verifikasi_makanan");
+ const konfirmasiPesanan = document.getElementById("konfirmasi_pesanan_offcanvas");
+ let count = response.count;
+
+ button.classList.remove('d-none');
+ if(count === 0){
+ button.classList.add('d-none');
+ konfirmasiPesanan.classList.add('d-none');
+ }
+ button.innerText = count;
+ konfirmasiPesanan.innerText = count;
+ },
+ });
+};
diff --git a/public/js/laporan_pesanan/_init.js b/public/js/laporan_pesanan/_init.js
new file mode 100644
index 0000000..bc71291
--- /dev/null
+++ b/public/js/laporan_pesanan/_init.js
@@ -0,0 +1,4 @@
+const datatable =$("#datatableLaporanPesanan")
+const infoPesanan = document.getElementById('infoPesanan')
+const exportLp = document.getElementById('exportLp')
+const exportPendapatan = document.getElementById('exportPendapatan')
diff --git a/public/js/laporan_pesanan/action.js b/public/js/laporan_pesanan/action.js
new file mode 100644
index 0000000..486db80
--- /dev/null
+++ b/public/js/laporan_pesanan/action.js
@@ -0,0 +1,125 @@
+function fetchDetailOrder(order_id){
+ fetch(`/dashboard/pending/action-progress-order/${order_id}`)
+ .then(res => res.json())
+ .then(res => {
+ const data = res;
+ document.getElementById('pesanan_container').innerHTML =''
+ // Generate HTML untuk order_detail
+ const detailHTML = (data?.order_detail || []).map(detail => {
+ return `
+
+
+
+
+

+
+
+
Nama Menu: ${detail?.menu?.nama_menu || '-'}
+
Jumlah: ${detail?.jumlah || 0}
+
Tanggal Pesan: ${detail?.tgl_antar || 0}
+
Harga: Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}
+
Status Pesanan:
+
+ ${detail?.status_order}
+
+
+
Catatan : ${detail?.catatan || '-'}
+
+
+
+
+ `;
+ }).join('');
+
+ const html = `
+
+
+ ${data.bukti_pembayaran ? `
+
+
+

+
Bukti Pembayaran
+
+
` : ''}
+
+
+
+
+
+
${data.nama_pemesan}
+
Jenis Customer: ${data.jenis_customer}
+
+ ${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? `
+
+
Nama Pasien: ${data.nama_pasien}
+
Nomor Kamar: ${data.no_kamar_perawatan}
+
Ruang Perawatan: ${data.ruang_perawatan}
+
Kelas Perawatan: ${data.kelas_perawatan}
+
` : data?.jenis_customer === 'Masyarakat Umum' ? `
+
+
Alamat: ${data.alamat || '-'}
+
+ ` : `
+
+
Bagian / Instalasi: ${data.bagian_instalasi}
+
Ekstensien: ${data.no_ekstensien || '-'}
+
+ `
+ }
+
+
+
+
No Order: ${data.no_order}
+
Metode Pembayaran: ${data.cara_pembayaran}
+ ${data?.cara_pembayaran === 'Billing' ? `
+
No.Medical Record: ${data.medical_record}
+ `: ''}
+
Tanggal Pembayaran: ${data.tgl_pembayaran || '-'}
+
Total Harga: Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}
+
+
+
+
+
+ ${data.status_order}
+
+
+
+
+
+
+
+
+
+
+
+ ${detailHTML}
+
+ `;
+
+ document.getElementById('pesanan_container').innerHTML = html;
+
+ })
+ .catch(err => {
+ document.getElementById('pesanan_container').innerHTML = 'Terjadi kesalahan saat memuat data.
';
+ console.error(err);
+ });
+
+}
+
+function pesananLunas(order_id){
+ new bootstrap.Modal(infoPesanan).show();
+ fetchDetailOrder(order_id)
+}
+
+function exportLaporanPesanan(){
+ new bootstrap.Modal(exportLp).show();
+}
+
+function exportLaporanPendapatan(){
+ new bootstrap.Modal(exportPendapatan).show();
+}
diff --git a/public/js/laporan_pesanan/dt.js b/public/js/laporan_pesanan/dt.js
new file mode 100644
index 0000000..6973105
--- /dev/null
+++ b/public/js/laporan_pesanan/dt.js
@@ -0,0 +1,192 @@
+ function initDt(selectDate = []){
+ datatable.bootstrapTable('destroy')
+ datatable.bootstrapTable({
+ url: "/dashboard/datatable/laporan-pesanan",
+ method:'get',
+ queryParams:function(params){
+ params.tanggal = selectDate;
+ return params;
+ },
+ showColumns: true,
+ showColumnsToggleAll: true,
+ showRefresh: true,
+ sortable: true,
+ search: true,
+ searchOnEnterKey: false,
+ searchHighlight: true,
+ pagination: true,
+ serverSide:true,
+ pageSize: 10,
+ pageList: [10, 20, 30, 40, 50, 100, 200],
+ cookie: true,
+ cookieIdTable: "table_rma_ssc_id",
+ icons: {
+ refresh: "fas fa-sync-alt", // atau ganti ke icon lain
+ columns: "fas fa-th-large"
+ },
+
+ columns: [
+ {
+ title: "Action",
+ field:'order_id',
+ formatter: function(value, row) {
+ let buttons = ''
+ if(row?.status_order === "Lunas"){
+ buttons += `
+
+ `
+ }
+ return `
+
+ ${buttons}
+
+ `;
+ }
+ },
+
+ {
+ title: "Pemesan",
+ field:'nama_pemesan',
+ sortable: true,
+ },
+ {
+ title: "No.Order",
+ field: 'no_order',
+ sortable: true,
+ },
+ {
+ title: "Cara Pembayaran",
+ field: 'cara_pembayaran',
+ sortable: true,
+ },
+ {
+ title: "Status Pembayaran",
+ field: 'status_order',
+ sortable: true,
+ formatter: function(value, row) {
+ const status = value;
+ let badgeClass = 'bg-secondary';
+ if (status === "Belum Bayar") {
+ badgeClass = 'bg-warning text-dark';
+ } else if (status === "Menunggu Konfirmasi Pembayaran") {
+ badgeClass = 'bg-primary';
+ } else if (status === "Lunas" || status === "Sudah Bayar") {
+ badgeClass = 'bg-success text-dark';
+ } else if(status === "Dibatalkan"){
+ badgeClass = 'bg-danger';
+ }
+ return `
+ ${status}
+ ${status === 'Dibatalkan' && row.note_dibatalkan ? `
+
+ ${row.note_dibatalkan}
+
+ ` : ''}
+ `;
+ }
+ },
+ {
+ title: "Status Pesanan",
+ formatter: function(value, row) {
+ const progress = parseInt(row.progress) || 0;
+ const total = row.total_detail || 0;
+ const selesai = row.selesai_detail || 0;
+
+ return `
+
+
+
${selesai} / ${total} selesai
+
+ `;
+ },
+ sortable: true,
+ },
+ {
+ title:'Bukti Pembayaran',
+ formatter: function(value, row){
+ if(row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran){
+ return `
+
+ Lihat Bukti
+
+ `;
+ }else if(row?.cara_pembayaran === 'Billing'){
+ return `No.MR: ${row?.medical_record || '-'}`;
+ }
+ }
+ },
+ {
+ title: "Tgl Pemesanan",
+ field: 'entry_at',
+ formatter: function(value, row) {
+ if (!row?.entry_at) return '-';
+
+ const date = new Date(row.entry_at);
+ return date.toLocaleString('id-ID', {
+ day: '2-digit',
+ month: 'short', // Bisa diganti 'long' kalau mau 'Juli' bukan 'Jul'
+ year: 'numeric',
+ hour: '2-digit',
+ minute: '2-digit',
+ hour12: false // pakai format 24 jam
+ });
+ },
+ sortable: true,
+ },
+ {
+ title: "Kategori Customer",
+ field: 'jenis_customer',
+ sortable: true,
+ },
+ {
+ title: "Total Harga Pesanan",
+ field:'total_harga',
+ formatter: function(value, row){
+ return 'Rp ' + parseInt(row.total_harga).toLocaleString('id-ID')
+ }
+ }
+
+ ],
+ });
+ }
+
+ document.addEventListener('DOMContentLoaded', function () {
+ flatpickr('#tanggal', {
+ dateFormat: "Y-m-d",
+ mode: "multiple",
+ locale: "id", // opsional: agar hari/bulan dalam Bahasa Indonesia
+ onValueUpdate: function(selectedDates, dateStr, instance) {
+ const selectedFormattedDates = selectedDates.map(d => {
+ const year = d.getFullYear();
+ const month = String(d.getMonth() + 1).padStart(2, '0');
+ const day = String(d.getDate()).padStart(2, '0');
+ return `${year}-${month}-${day}`;
+ })
+ initDt(selectedFormattedDates);
+ if(selectedFormattedDates.length > 0){
+ const tanggalList = selectedFormattedDates;
+ let tanggalRapi = '';
+ if (tanggalList.length === 1) {
+ tanggalRapi = tanggalList[0];
+ } else if (tanggalList.length === 2) {
+ tanggalRapi = tanggalList.join(' dan ');
+ } else if (tanggalList.length > 2) {
+ tanggalRapi = tanggalList.slice(0, -1).join(', ') + ', dan ' + tanggalList.slice(-1);
+ }
+ $("#confirm_laporan_pesanan").text(': '+ tanggalRapi)
+ }else{
+ $("#confirm_laporan_pesanan").text('Hari Ini');
+ }
+ }
+ });
+ $("#confirm_laporan_pesanan").text('Hari Ini');
+ initDt();
+ });
diff --git a/public/js/menu/action.js b/public/js/menu/action.js
index a3a3ffa..ef1cc16 100644
--- a/public/js/menu/action.js
+++ b/public/js/menu/action.js
@@ -104,7 +104,7 @@ function initSelectize(formElement) {
});
});
- const radioSomeday = formElement.querySelector(`input[value="Someday"]`);
+ const radioSomeday = formElement.querySelector(`input[value="Sameday"]`);
const radioMenuNormal = formElement.querySelector(`input[value="Menu Normal"]`);
const tanggalWrapper = formElement.querySelector('.date-input')?.closest('.col-md-12');
@@ -388,7 +388,7 @@ function editMasterMenu(e) {
$("#jenis_makanan_edit").val(dataOld.jenis_menu);
$("#deskripsi_edit").val(dataOld.deskripsi);
- $(`input[name="kategori_menu"][value="${dataOld.apakah_someday ? 'Someday' : 'Menu Normal'}"]`).prop('checked', true);
+ $(`input[name="kategori_menu"][value="${dataOld.apakah_someday ? 'Sameday' : 'Menu Normal'}"]`).prop('checked', true);
$(`input[name="apakah_menu_siang"][value="${dataOld.apakah_menu_siang ? 'iya' : ''}"]`).prop('checked', true);
$(`input[name="apakah_menu_sore"][value="${dataOld.apakah_menu_sore ? 'iya' : ''}"]`).prop('checked', true);
@@ -425,7 +425,7 @@ function editMasterMenu(e) {
$('input[name="kategori_menu"]').on('change', function(){
const selected = $(this).val();
- const isSomeday = selected === 'Someday';
+ const isSomeday = selected === 'Sameday';
if(isSomeday){
tanggalWrapper.classList.add('d-none');
if (tanggalSelectizeInstance) {
@@ -619,7 +619,7 @@ function detailMasterMenu(e){
'Tidak ada info tanggal tersedia'}
- Menu: ${someday ? 'Someday' : 'Menu Normal'}
+ Menu: ${someday ? 'Sameday' : 'Menu Normal'}
${
diff --git a/public/js/menu/dt.js b/public/js/menu/dt.js
index 064037e..3e93b92 100644
--- a/public/js/menu/dt.js
+++ b/public/js/menu/dt.js
@@ -105,7 +105,7 @@
field: "master_menu_id",
formatter: function (value, row) {
if (row?.apakah_someday) {
- return `
Someday`;
+ return `
Sameday`;
}
return `
Menu Normal`;
}
diff --git a/public/js/order_guest/index.js b/public/js/order_guest/index.js
index ceb3b30..c5a58a1 100644
--- a/public/js/order_guest/index.js
+++ b/public/js/order_guest/index.js
@@ -88,6 +88,13 @@
const menus = res.data.data || [];
+ const groups = {};
+ menus.forEach(menu => {
+ const key = menu.group_label || 'Tanpa Tanggal'
+ if (!groups[key]) groups[key] = [];
+ groups[key].push(menu);
+ });
+
if (menus.length === 0){
return containerGuest.html(`
@@ -98,11 +105,35 @@
}
let html = '
';
- menus?.forEach(menu => {
+ for (const [label, list] of Object.entries(groups)) {
+ let scheduleInfo = '';
+ if (label === "Menu Sameday") {
+ scheduleInfo = `
+
+ - Makan Siang: Pesan Maks 10.00 WIB
+ - Makan Sore: Pesan Maks 13.00 WIB
+
+ `;
+ } else {
+ scheduleInfo = `
Dipesan maksimal H-1 sebelum pukul 13.00 WIB
`;
+ }
+ html += `
+
+
+
${label}
+
+ ${scheduleInfo}
+
+
+
+ `;
+ list?.forEach(menu => {
html += `
+
-
+
+
+ style="height:100%; background:linear-gradient(transparent, rgba(0,0,0,.6)); border-radius:0 0 .5rem .5rem;">
-
${menu.nama}
+ ${menu.nama.substring(0, 39) + '...' }
${menu?.kalori.length > 0 ? `
- ${(menu.kalori || []).slice(0,1).map(k=>k.nilai_kalori||0).join('')} kkal`: ''}
-
-
-
-
+ ${(menu.kalori || []).slice(0,1).map(k=>k.nilai_kalori||0).join('')} kkal`: ''}
${(menu.klasifikasiMenu || [])
- .slice(0, 2)
+ .slice(0, 1)
.map(tag => {
const name = tag.nama_kategori_diet || '';
const truncated = name.length > 12 ? name.substring(0, 12) + '...' : name;
return `${truncated}`;
}).join('')}
${(menu.klasifikasiMenu || []).length > 2
- ? `+${menu.klasifikasiMenu.length - 2} lainnya`
+ ? `+${menu.klasifikasiMenu.length - 2} lainnya`
: ''}
+
${menu.apakah_someday
- ? 'Someday'
- : 'Normal'}
+ ? 'Menu Sameday'
+ : 'Menu Normal'}
-
- ${menu.apakah_menu_siang
- ? '
Siang
'
- : ''}
- ${menu.apakah_menu_sore
- ? '
Sore
'
- : ''}
- ${!menu.apakah_menu_siang && !menu.apakah_menu_sore
- ? '
Tutup
'
- : ''}
+
+
-
-
-
Tersedia:
-
-
- ${menu.apakah_someday
- ? '
Setiap hari'
- : (Array.isArray(menu.dmph) && menu.dmph.length > 0
- ? menu.dmph.slice(0, 6).map(d =>
- `
${d.tgl_harian}`
- ).join('')
- : '
Tutup')}
+
+
+
Tersedia:
+
+ ${menu.apakah_menu_siang && menu.apakah_menu_sore
+ ? '
Makan Siang
& Sore
'
+ : menu.apakah_menu_siang
+ ? '
Makan Siang
'
+ : menu.apakah_menu_sore
+ ? '
Makan Sore
'
+ : '
Tutup
'}
+
+
+ Karyawan
+ Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}
+
+
+ Public
+ Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')}
-
-
-
- Karyawan
- Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}
-
-
- Public
- Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')}
-
-
-
-
-
`;
});
+ }
+
+
html += '
';
@@ -297,7 +314,7 @@
'Tidak ada info tanggal tersedia'}
- Menu: ${someday ? 'Someday' : 'Menu Normal'}
+ Menu: ${someday ? 'Sameday' : 'Menu Normal'}
${
@@ -477,6 +494,17 @@
}
function handleClick(e){
+ const originalHTML = e.innerHTML;
+ // Efek klik
+ e.classList.add('btn-clicked');
+ setTimeout(() => e.classList.remove('btn-clicked'), 80);
+ // Ganti isi tombol jadi checklist
+ e.innerHTML = '
';
+ // Simulasi proses
+ setTimeout(() => {
+ e.innerHTML = originalHTML;
+ }, 1000);
+
const order_id = sessionStorage.getItem('order_id') || null;
if(order_id){
Swal.fire({
diff --git a/public/js/pekerjaan/action.js b/public/js/pekerjaan/action.js
index 1eb0c3c..9b9b9ed 100644
--- a/public/js/pekerjaan/action.js
+++ b/public/js/pekerjaan/action.js
@@ -90,6 +90,7 @@ document.getElementById('formActionApproveOrder').addEventListener('submit', fun
});
datatablePekerjaan.bootstrapTable('refresh');
modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
+ getReminderVerifikasiMakanan()
};
modalActionOrder.addEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
diff --git a/public/js/pekerjaan/dt.js b/public/js/pekerjaan/dt.js
index f9b0171..eba7c28 100644
--- a/public/js/pekerjaan/dt.js
+++ b/public/js/pekerjaan/dt.js
@@ -34,7 +34,7 @@
align: 'center',
valign: 'middle',
formatter: function (value, row, index) {
- return `
`
+ return `
`
}
},
{
@@ -56,11 +56,7 @@
`
- buttons += `
-
- `
+
return `
@@ -100,6 +96,18 @@
},
sortable: true,
},
+ {
+ title: "Karbohidrat",
+ field: 'karbohidrat_id',
+ formatter: function (value, row) {
+ if (!row?.karbohidrat) return '';
+ const nama = row.karbohidrat.nama_karbohidrat || '';
+ const kalori = row.karbohidrat.nilai_kalori ? ` (${row.karbohidrat.nilai_kalori} kkal)` : '';
+
+ return nama + kalori;
+ },
+ sortable: true,
+ },
{
title: "Pemesan",
field:'order.nama_pemesan',
@@ -135,21 +143,19 @@
$('.rowCheckbox').each(function () {
this.checked = isChecked;
let order_detail_id = $(this).data('order_detail_id');
- let jenis_customer = $(this).data('jenis_customer');
if (isChecked) {
- selectedRows.push({ order_detail_id, jenis_customer });
+ selectedRows.push({ order_detail_id });
}
});
$('#buttonLabel').prop("disabled", !isChecked);
});
$(document).on('change', '.rowCheckbox', function () {
- let order_detail_id = $(this).data('order_id');
- let jenis_customer = $(this).data('jenis_customer');
+ let order_detail_id = $(this).data('order_detail_id');
let isChecked = this.checked;
if (isChecked) {
if (!selectedRows.find(r => r.order_detail_id === order_detail_id)) {
- selectedRows.push({ order_detail_id, jenis_customer });
+ selectedRows.push({ order_detail_id });
}
} else {
selectedRows = selectedRows.filter(r => r.order_detail_id !== order_detail_id);
@@ -163,38 +169,6 @@
function labelDownload(){
const selected = (typeof getSelectedRowsForLabel === 'function') ? getSelectedRowsForLabel() : [];
-
- if (selected.length === 0) {
- alert("Silakan pilih setidaknya satu item terlebih dahulu.");
- return;
- }
-
- fetch('/dashboard/pekerjaan/label', {
- method:'POST',
- headers:{
- 'Content-Type' : 'application/json',
- 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value,
- },
- body: JSON.stringify({ items : selected})
- })
- .then(response => {
- if (!response.ok) throw new Error('Gagal download label');
- return response.blob();
-
- })
- .then(res => {
- console.log(res);
-
- })
- .catch(error => {
- alert('gagal mengunduh');
- console.error(error);
-
- })
-
-
+ const order_detail_ids = selected.map(item => item.order_detail_id);
+ window.open(`https://smart.rsabhk.co.id:2222/service-reporting/label-cetering/${order_detail_ids}`, '_blank');
}
-function cetak(id, jenis_customer){
- console.log(id, jenis_customer);
-
-}
diff --git a/public/js/pesanan_pending/_init.js b/public/js/pesanan_pending/_init.js
index 0b8a2de..41e17fe 100644
--- a/public/js/pesanan_pending/_init.js
+++ b/public/js/pesanan_pending/_init.js
@@ -13,3 +13,7 @@ const formActionProgressOrder = $("#formActionProgressOrder")
const modalExport = document.getElementById('modalExportPending');
+
+const datatableOfPekerjaan = $("#datatableVerifikasiMakananOffcanvas")
+const modalDetailOrder = document.getElementById('modalDetailOrderOf');
+const modalActionOrderPekerjaan = document.getElementById('modalActionApproveOrder');
diff --git a/public/js/pesanan_pending/action.js b/public/js/pesanan_pending/action.js
index 5e88050..e8d8e9f 100644
--- a/public/js/pesanan_pending/action.js
+++ b/public/js/pesanan_pending/action.js
@@ -47,7 +47,8 @@ document.getElementById('formActionOrder').addEventListener('submit', function (
showConfirmButton: false,
backdrop: true,
});
- getReminderOrder();
+ getReminderKonfirmasiPesanan()
+ getReminderVerifikasiMakanan()
datatablePending.bootstrapTable('refresh');
modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
};
@@ -119,7 +120,8 @@ document.getElementById('formActionApproveBillingOrder').addEventListener('submi
showConfirmButton: false,
backdrop: true,
});
- getReminderOrder();
+ getReminderKonfirmasiPesanan()
+ getReminderVerifikasiMakanan()
datatablePending.bootstrapTable('refresh');
modalActionApproveBillingnOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
};
diff --git a/public/js/pesanan_pending/action_progres_order.js b/public/js/pesanan_pending/action_progres_order.js
index 53ec0a9..7e72d22 100644
--- a/public/js/pesanan_pending/action_progres_order.js
+++ b/public/js/pesanan_pending/action_progres_order.js
@@ -11,7 +11,7 @@ function fetchDetailOrder(order_id){
-

+
Nama Menu: ${detail?.menu?.nama_menu || '-'}
@@ -24,7 +24,7 @@ function fetchDetailOrder(order_id){
${detail?.status_order}
-
+
Catatan : ${detail?.catatan || '-'}
` : ''}
-
+
Nama Pemesan: ${data.nama_pemesan}
@@ -59,14 +61,14 @@ function fetchDetailOrder(order_id){
${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ?
`
-
Nama Pasien: ${data.nama_pasien}
-
Nomor Kamar Perawatan: ${data.no_kamar_perawatan}
-
Ruang Perawatan: ${data.kelas_perawatan}
-
Kelas Perawatan: ${data.ruang_perawatan}
+
Nama Pasien: ${data.nama_pasien || '-'}
+
Nomor Kamar Perawatan: ${data.no_kamar_perawatan || '-'}
+
Ruang Perawatan: ${data.kelas_perawatan || '-'}
+
Kelas Perawatan: ${data.ruang_perawatan || '-'}
`: `
-
Bagian /Instalasi: ${data.bagian_instalasi}
-
Ekstensien yang bisa di Hubungi: ${data.no_ekstensien}
+
Bagian /Instalasi: ${data.bagian_instalasi || '-'}
+
Ekstensien yang bisa di Hubungi: ${data.no_ekstensien || '-'}
`}
@@ -126,6 +128,7 @@ function fetchDetailOrder(order_id){
el.disabled = true;
datatablePending.bootstrapTable('refresh')
showToast('Status berhasil diperbarui!');
+ getReminderVerifikasiMakanan()
})
.catch(err => {
console.error('Gagal update status:', err);
diff --git a/public/js/pesanan_pending/dt.js b/public/js/pesanan_pending/dt.js
index 1bb0528..02bace0 100644
--- a/public/js/pesanan_pending/dt.js
+++ b/public/js/pesanan_pending/dt.js
@@ -20,7 +20,7 @@
pageSize: 10,
pageList: [10, 20, 30, 40, 50, 100, 200],
cookie: true,
- cookieIdTable: "table_rma_ssc_id",
+ cookieIdTable: "datatablePesananPending",
icons: {
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
columns: "fas fa-th-large"
@@ -115,7 +115,6 @@
const progress = parseInt(row.progress) || 0;
const total = row.total_detail || 0;
const selesai = row.selesai_detail || 0;
-
return `
@@ -135,6 +134,20 @@
title: "Pemesan",
field:'nama_pemesan',
sortable: true,
+ },
+ {
+ title:'Bukti Pembayaran',
+ formatter: function(value, row){
+ if(row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran){
+ return `
+
+ Lihat Bukti
+
+ `;
+ }else if(row?.cara_pembayaran === 'Billing'){
+ return `No.MR: ${row?.medical_record || '-'}`;
+ }
+ }
},
{
title: "Total Harga Pesanan",
@@ -162,7 +175,8 @@
title: "Kategori Customer",
field: 'jenis_customer',
sortable: true,
- }
+ },
+
],
});
}
diff --git a/public/js/pesanan_pending/of_dt.js b/public/js/pesanan_pending/of_dt.js
new file mode 100644
index 0000000..f73a1d8
--- /dev/null
+++ b/public/js/pesanan_pending/of_dt.js
@@ -0,0 +1,288 @@
+document.addEventListener('DOMContentLoaded', function () {
+ const $timeLabel = $("#confirm_pekerjaan_time");
+ $timeLabel.text("Hari Ini");
+
+ // Init Date Picker
+ flatpickr("#tanggal_offcanvas", {
+ dateFormat: "Y-m-d",
+ mode: "multiple",
+ locale: "id",
+ onValueUpdate: function (selectedDates) {
+ const selectedFormatted = selectedDates.map(d =>
+ `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`
+ );
+
+ initPekerjaanDt(selectedFormatted);
+ updateTimeLabel(selectedFormatted);
+ }
+ });
+
+ initPekerjaanDt();
+});
+
+// Update Label Tanggal
+function updateTimeLabel(dates) {
+ const $timeLabel = $("#confirm_pekerjaan_time");
+
+ if (dates.length === 0) {
+ $timeLabel.text("Hari Ini");
+ return;
+ }
+
+ let label = dates.length === 1
+ ? dates[0]
+ : dates.length === 2
+ ? dates.join(" dan ")
+ : `${dates.slice(0, -1).join(", ")}, dan ${dates.slice(-1)}`;
+
+ $timeLabel.text(`: ${label}`);
+}
+
+// Init Table
+function initPekerjaanDt(selectDate = []) {
+ let selectedRows = [];
+
+ datatableOfPekerjaan.bootstrapTable('destroy').bootstrapTable({
+ url: "/dashboard/datatable/pekerjaan",
+ method: 'get',
+ queryParams: params => ({ ...params, tanggal: selectDate }),
+ showColumns: true,
+ showColumnsToggleAll: true,
+ showRefresh: true,
+ sortable: true,
+ search: true,
+ searchOnEnterKey: false,
+ searchHighlight: true,
+ pagination: true,
+ serverSide: true,
+ pageSize: 10,
+ pageList: [10, 20, 30, 40, 50, 100, 200],
+ cookie: true,
+ cookieIdTable: "datatableVerifikasiMakananOffcanvas",
+ icons: { refresh: "fas fa-sync-alt", columns: "fas fa-th-large" },
+ columns: getTableColumns(),
+ });
+
+ // Checkbox Handling
+ $(document).off('click', '#selectAll').on('click', '#selectAll', function () {
+ const isChecked = this.checked;
+ selectedRows = isChecked
+ ? $(".rowCheckbox").map(function () { return { order_detail_id: $(this).data("order_detail_id") }; }).get()
+ : [];
+ $(".rowCheckbox").prop("checked", isChecked);
+ toggleLabelButton(selectedRows.length > 0);
+ });
+
+ $(document).off('change', '.rowCheckbox').on('change', '.rowCheckbox', function () {
+ const id = $(this).data("order_detail_id");
+ if (this.checked) {
+ if (!selectedRows.find(r => r.order_detail_id === id)) selectedRows.push({ order_detail_id: id });
+ } else {
+ selectedRows = selectedRows.filter(r => r.order_detail_id !== id);
+ }
+ toggleLabelButton(selectedRows.length > 0);
+ });
+
+ window.getSelectedRowsForLabel = () => selectedRows;
+}
+
+// Toggle Cetak Label Button
+function toggleLabelButton(enable) {
+ $('#buttonLabel').prop("disabled", !enable);
+}
+
+// Download Label
+function labelDownload() {
+ const ids = getSelectedRowsForLabel().map(item => item.order_detail_id);
+ window.open(`https://smart.rsabhk.co.id:2222/service-reporting/label-cetering/${ids}`, '_blank');
+}
+
+// Table Columns
+function getTableColumns() {
+ return [
+ {
+ title: '
',
+ field: 'order_id',
+ align: 'center',
+ formatter: (v, r) => `
`
+ },
+ {
+ title: "Action",
+ formatter: (v, r) => {
+ let btns = '';
+ if (r?.status_order !== "Selesai") {
+ btns += `
+
`;
+ }
+ btns += `
+
`;
+ return `
${btns}
`;
+ }
+ },
+ { title: "No.Order", field: 'order.no_order', sortable: true },
+ {
+ title: "Status",
+ formatter: (v, r) => {
+ const status = r?.status_order;
+ const badgeClass = status === "Selesai" ? 'bg-success text-dark' : 'bg-primary';
+ return `
${status}`;
+ }
+ },
+ { title: "Menu", formatter: (v, r) => r?.menu?.nama_menu || r?.paket_menu?.nama_paket, sortable: true },
+ {
+ title: "Karbohidrat",
+ formatter: (v, r) => {
+ if (!r?.karbohidrat) return '';
+ const nama = r.karbohidrat.nama_karbohidrat || '';
+ const kalori = r.karbohidrat.nilai_kalori ? ` (${r.karbohidrat.nilai_kalori} kkal)` : '';
+ return nama + kalori;
+ },
+ sortable: true,
+ },
+ {
+ title: "Pemesan",
+ formatter: (v, r) => `
+
+ - ${r?.order?.nama_pemesan ?? '-'}
+ - ${r?.order?.jenis_customer ?? '-'}
+
`
+ },
+ { title: "Tgl Antar", field: 'tgl_antar' },
+ { title: "Waktu Pemesanan", field: 'type', sortable: true },
+ { title: "Catatan", field: 'catatan', sortable: true },
+ ];
+}
+
+
+function detailOrder(id){
+ const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan'));
+ offcanvas.hide();
+ new bootstrap.Modal(modalDetailOrder).show();
+ fetch(`/dashboard/pekerjaan/detail/${id}`)
+ .then(res => res.json())
+ .then(res => {
+ const data = res.data;
+ document.getElementById('pesanan_container').innerHTML = '';
+ document.getElementById('confirm_nama_pesanan').textContent = data?.order?.nama_pemesan;
+ let html = '';
+ html += `
+
+
+
+
+

+
+
+
Nama Menu: ${data?.menu?.nama_menu || data?.paket_menu?.nama_menu}
+
Tanggal Antar: ${data?.tgl_antar || 0}
+
Jumlah: ${data?.jumlah || 0}
+
Harga Satuan: Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}
+
Status Pesanan:
+
+ ${data?.status_order}
+
+
+
+
Pemesan: ${data?.order?.nama_pemesan || '-'}
+
Jenis Kelamin: ${data?.order?.jenis_kelamin || '-'}
+
Jenis Customer: ${data?.order?.jenis_customer || '-'}
+ ${data?.order?.jenis_customer === "Masyarakat Umum" ?
+ `
Alamat: ${data?.order?.alamat || '-'}
+ ` : data?.order?.jenis_customer === "Karyawan RSAB Harapan Kita" ? `
+
Bagian /Instalasi: ${data?.order?.bagian_instalasi || '-'}
+
No Ekstensien: ${data?.order?.no_ekstensien || '-'}
+ ` :`
+
Nama Pasien: ${data?.order?.nama_pasien || '-'}
+
Ruang Perawatan: ${data?.order?.ruang_perawatan || '-'}
+
Nomor Kamar Perawatan: ${data?.order?.no_kamar_perawatan || '-'}
+
Kelas Perawatan: ${data?.order?.kelas_perawatan || '-'}
+ `
+ }
+
+
+
+
+
+
+ `
+
+ document.getElementById('pesanan_container').innerHTML = html;
+ document.getElementById('modalDetailOrderOf').addEventListener('hidden.bs.modal', () => {
+ new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')).show()
+ }, { once:true});
+ })
+ .catch(error => {
+ console.error(error);
+
+ })
+}
+
+
+function exportPekerjaan(){
+ const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan'));
+ offcanvas.hide();
+ new bootstrap.Modal(modalExport).show();
+ document.getElementById('formExport').setAttribute('action', '/dashboard/pekerjaan/export')
+}
+
+function approve(e){
+ const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan'));
+ offcanvas.hide();
+ const data = $(e).data();
+ new bootstrap.Modal(modalActionOrderPekerjaan).show();
+ $("#confirmActionApproveOrder").text(data?.menu + ' (' + data?.type +')')
+ $("#confirmNoOrder").text(data?.no_order + ' (' + data?.nama_pemesan +')')
+ document.getElementById('formActionApproveOrder').setAttribute(`action`, `/dashboard/pending/update-detail-status/${data.id}`)
+ document.getElementById('modalActionApproveOrder').addEventListener('hidden.bs.modal', () => {
+ new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')).show()
+ }, { once:true});
+}
+
+
+document.getElementById('formActionApproveOrder').addEventListener('submit', function (e) {
+ e.preventDefault();
+ const form = this;
+ const actionUrl = form.getAttribute('action');
+
+ fetch(actionUrl, {
+ method: 'POST',
+ headers: {
+ 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value,
+ }
+ }).then(async (res) => {
+ const data = await res.json();
+ if (res.status) {
+ Swal.fire({
+ icon: 'success',
+ title: 'Berhasil',
+ text: 'Pesanan berhasil diselesaikan!',
+ timer: 2000,
+ showConfirmButton: false,
+ backdrop: true,
+ });
+ datatableOfPekerjaan.bootstrapTable('refresh');
+ getReminderVerifikasiMakanan()
+ bootstrap.Modal.getInstance(modalActionOrderPekerjaan).hide();
+ } else {
+ throw new Error(data.message || 'Terjadi kesalahan saat mengubah status.');
+ }
+ }).catch(err => {
+ console.error(err);
+ Swal.fire({
+ icon: 'error',
+ title: 'Gagal',
+ text: err,
+ });
+ });
+});
diff --git a/public/js/pesanan_selesai/detail_order.js b/public/js/pesanan_selesai/detail_order.js
index f2612bf..dc95636 100644
--- a/public/js/pesanan_selesai/detail_order.js
+++ b/public/js/pesanan_selesai/detail_order.js
@@ -24,7 +24,7 @@ function fetchDetailOrder(order_id){
${detail?.status_order}
-
+
Catatan : ${detail?.catatan || '-'}
@@ -35,6 +35,7 @@ function fetchDetailOrder(order_id){
const html = `
+ ${data.bukti_pembayaran ? `
Bukti Pembayaran
-
+
` : ''}
-
+
${data.nama_pemesan}
@@ -68,7 +69,10 @@ function fetchDetailOrder(order_id){
No Order: ${data.no_order}
-
Tipe Pembayaran: ${data.cara_pembayaran}
+
Metode Pembayaran: ${data.cara_pembayaran}
+ ${data?.cara_pembayaran === 'Billing' ? `
+
No.Medical Record: ${data.medical_record}
+ `: ''}
Tanggal Pembayaran: ${data.tgl_pembayaran || '-'}
Total Harga: Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}
diff --git a/public/js/semua_pesanan/_init.js b/public/js/semua_pesanan/_init.js
new file mode 100644
index 0000000..d8bbd03
--- /dev/null
+++ b/public/js/semua_pesanan/_init.js
@@ -0,0 +1,3 @@
+const datatableSemuaPesanan = $("#datatableSemuaPesanan")
+
+const infoPesanan = document.getElementById('infoPesanan')
diff --git a/public/js/semua_pesanan/action.js b/public/js/semua_pesanan/action.js
new file mode 100644
index 0000000..509795c
--- /dev/null
+++ b/public/js/semua_pesanan/action.js
@@ -0,0 +1,115 @@
+function fetchDetailOrder(order_id){
+ fetch(`/dashboard/pending/action-progress-order/${order_id}`)
+ .then(res => res.json())
+ .then(res => {
+ const data = res;
+ document.getElementById('pesanan_container').innerHTML =''
+ // Generate HTML untuk order_detail
+ const detailHTML = (data?.order_detail || []).map(detail => {
+ return `
+
+
+
+
+

+
+
+
Nama Menu: ${detail?.menu?.nama_menu || '-'}
+
Jumlah: ${detail?.jumlah || 0}
+
Tanggal Pesan: ${detail?.tgl_antar || 0}
+
Harga: Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}
+
Status Pesanan:
+
+ ${detail?.status_order}
+
+
+
Catatan : ${detail?.catatan || '-'}
+
+
+
+
+ `;
+ }).join('');
+
+ const html = `
+
+
+ ${data.bukti_pembayaran ? `
+
+
+
+
+
+
Bukti Pembayaran
+
+
` : ''}
+
+
+
+
+
+
${data.nama_pemesan}
+
Jenis Customer: ${data.jenis_customer}
+
+ ${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ? `
+
+
Nama Pasien: ${data.nama_pasien}
+
Nomor Kamar: ${data.no_kamar_perawatan}
+
Ruang Perawatan: ${data.ruang_perawatan}
+
Kelas Perawatan: ${data.kelas_perawatan}
+
` : `
+
+
Bagian / Instalasi: ${data.bagian_instalasi}
+
Ekstensien: ${data.no_ekstensien || '-'}
+
`}
+
+
+
+
+
No Order: ${data.no_order}
+
Metode Pembayaran: ${data.cara_pembayaran}
+ ${data?.cara_pembayaran === 'Billing' ? `
+
No.Medical Record: ${data.medical_record}
+ `: ''}
+
Tanggal Pembayaran: ${data.tgl_pembayaran || '-'}
+
Total Harga: Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}
+
+
+
+
+
+ ${data.status_order}
+
+
+
+
+
+
+
+
+
+
+
+ ${detailHTML}
+
+ `;
+
+ document.getElementById('pesanan_container').innerHTML = html;
+
+ })
+ .catch(err => {
+ document.getElementById('pesanan_container').innerHTML = '
Terjadi kesalahan saat memuat data.
';
+ console.error(err);
+ });
+
+}
+
+function orderLunas(order_id){
+ new bootstrap.Modal(infoPesanan).show();
+ fetchDetailOrder(order_id)
+}
+
diff --git a/public/js/semua_pesanan/dt.js b/public/js/semua_pesanan/dt.js
new file mode 100644
index 0000000..d0c4b8f
--- /dev/null
+++ b/public/js/semua_pesanan/dt.js
@@ -0,0 +1,194 @@
+
+ function initDt(selectDate = []){
+ datatableSemuaPesanan.bootstrapTable('destroy')
+ datatableSemuaPesanan.bootstrapTable({
+ url: "/dashboard/datatable/semua-pesanan",
+ method:'get',
+ queryParams:function(params){
+ params.tanggal = selectDate;
+ return params;
+ },
+ showColumns: true,
+ showColumnsToggleAll: true,
+ showRefresh: true,
+ sortable: true,
+ search: true,
+ searchOnEnterKey: false,
+ searchHighlight: true,
+ pagination: true,
+ serverSide:true,
+ pageSize: 10,
+ pageList: [10, 20, 30, 40, 50, 100, 200],
+ cookie: true,
+ cookieIdTable: "datatableSemuaPesanan",
+ icons: {
+ refresh: "fas fa-sync-alt", // atau ganti ke icon lain
+ columns: "fas fa-th-large"
+ },
+
+ columns: [
+ {
+ title: "Action",
+ field:'order_id',
+ formatter: function(value, row) {
+ let buttons = ''
+ if(row?.status_order === "Dibatalkan") return ''
+
+ if(row?.status_order === "Lunas"){
+ buttons += `
+
+ `
+ }
+
+ return `
+
+ ${buttons}
+
+ `;
+ }
+ },
+
+ {
+ title: "Pemesan",
+ field:'nama_pemesan',
+ sortable: true,
+ },
+ {
+ title: "No.Order",
+ field: 'no_order',
+ sortable: true,
+ },
+ {
+ title: "Kategori Customer",
+ field: 'jenis_customer',
+ sortable: true,
+ },
+ {
+ title: "Cara Pembayaran",
+ field: 'cara_pembayaran',
+ sortable: true,
+ },
+ {
+ title: "Status Pembayaran",
+ field: 'status_order',
+ sortable: true,
+ formatter: function(value, row) {
+ const status = value;
+ let badgeClass = 'bg-secondary';
+ if (status === "Belum Bayar") {
+ badgeClass = 'bg-warning text-dark';
+ } else if (status === "Menunggu Konfirmasi Pembayaran") {
+ badgeClass = 'bg-primary';
+ } else if (status === "Lunas" || status === "Sudah Bayar") {
+ badgeClass = 'bg-success text-dark';
+ } else if(status === "Dibatalkan"){
+ badgeClass = 'bg-danger';
+ }
+ return `
+
${status}
+ ${status === 'Dibatalkan' && row.note_dibatalkan ? `
+
+ ${row.note_dibatalkan}
+
+ ` : ''}
+ `;
+ }
+ },
+ {
+ title: "Status Pesanan",
+ formatter: function(value, row) {
+ const progress = parseInt(row.progress) || 0;
+ const total = row.total_detail || 0;
+ const selesai = row.selesai_detail || 0;
+ return `
+
+
+
${selesai} / ${total} selesai
+
+ `;
+ },
+ sortable: true,
+ },
+ {
+ title:'Bukti Pembayaran',
+ formatter: function(value, row){
+ if(row?.cara_pembayaran === 'Transfer' && row?.bukti_pembayaran){
+ return `
+
+ Lihat Bukti
+
+ `;
+ }else if(row?.cara_pembayaran === 'Billing'){
+ return `No.MR: ${row?.medical_record || '-'}`;
+ }
+ }
+ },
+ {
+ title: "Total Harga Pesanan",
+ field:'total_harga',
+ formatter: function(value, row){
+ return 'Rp ' + parseInt(row.total_harga).toLocaleString('id-ID')
+ }
+ },
+ {
+ title: "Tgl Pemesanan",
+ formatter: function(value, row) {
+ if (!row?.entry_at) return '-';
+ const date = new Date(row.entry_at);
+ return date.toLocaleString('id-ID', {
+ day: '2-digit',
+ month: 'short', // Bisa diganti 'long' kalau mau 'Juli' bukan 'Jul'
+ year: 'numeric',
+ hour: '2-digit',
+ minute: '2-digit',
+ hour12: false // pakai format 24 jam
+ });
+ },
+ },
+
+
+ ],
+ });
+ }
+
+ document.addEventListener('DOMContentLoaded', function () {
+ flatpickr('#tanggal', {
+ dateFormat: "Y-m-d",
+ mode: "multiple",
+ locale: "id", // opsional: agar hari/bulan dalam Bahasa Indonesia
+ onValueUpdate: function(selectedDates, dateStr, instance) {
+ const selectedFormattedDates = selectedDates.map(d => {
+ const year = d.getFullYear();
+ const month = String(d.getMonth() + 1).padStart(2, '0');
+ const day = String(d.getDate()).padStart(2, '0');
+ return `${year}-${month}-${day}`;
+ })
+ initDt(selectedFormattedDates)
+ if(selectedFormattedDates.length > 0){
+ const tanggalList = selectedFormattedDates;
+
+ let tanggalRapi = '';
+ if (tanggalList.length === 1) {
+ tanggalRapi = tanggalList[0];
+ } else if (tanggalList.length === 2) {
+ tanggalRapi = tanggalList.join(' dan ');
+ } else if (tanggalList.length > 2) {
+ tanggalRapi = tanggalList.slice(0, -1).join(', ') + ', dan ' + tanggalList.slice(-1);
+ }
+ $("#confirm_date_pesanan_pending").text(': ' + tanggalRapi)
+ }else{
+ $("#confirm_date_pesanan_pending").text('');
+ }
+ }
+ });
+ $("#confirm_date_pesanan_pending").text('Hari Ini');
+ initDt();
+ });
diff --git a/public/logo/logo_rsabhk.png b/public/logo/logo_rsabhk.png
new file mode 100644
index 0000000..548c8f1
Binary files /dev/null and b/public/logo/logo_rsabhk.png differ
diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php
index d040976..499d6e2 100644
--- a/resources/views/dashboard/index.blade.php
+++ b/resources/views/dashboard/index.blade.php
@@ -30,9 +30,11 @@
@@ -50,9 +52,11 @@
@@ -63,9 +67,11 @@
@@ -73,9 +79,11 @@
@@ -95,9 +103,11 @@
@@ -105,9 +115,11 @@
@@ -115,9 +127,11 @@
diff --git a/resources/views/dashboard/master/menu/modal/add.blade.php b/resources/views/dashboard/master/menu/modal/add.blade.php
index cbc590b..6c883fe 100644
--- a/resources/views/dashboard/master/menu/modal/add.blade.php
+++ b/resources/views/dashboard/master/menu/modal/add.blade.php
@@ -90,9 +90,9 @@
-
+
@@ -119,7 +119,8 @@
-
+
+
Gunakan Key Tab untuk menambahkan tanggal.
diff --git a/resources/views/dashboard/master/menu/modal/edit.blade.php b/resources/views/dashboard/master/menu/modal/edit.blade.php
index 29fb6c3..12fcefb 100644
--- a/resources/views/dashboard/master/menu/modal/edit.blade.php
+++ b/resources/views/dashboard/master/menu/modal/edit.blade.php
@@ -85,9 +85,9 @@
-
+
@@ -114,7 +114,8 @@
-
+
+
Gunakan Key Tab untuk menambahkan tanggal.
diff --git a/resources/views/dashboard/partials/sidenav.blade.php b/resources/views/dashboard/partials/sidenav.blade.php
index bf9097e..323a9df 100644
--- a/resources/views/dashboard/partials/sidenav.blade.php
+++ b/resources/views/dashboard/partials/sidenav.blade.php
@@ -1,10 +1,10 @@
+
diff --git a/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php b/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php
index 9877428..d4be764 100644
--- a/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php
+++ b/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php
@@ -8,15 +8,13 @@
font-family: Arial, sans-serif;
font-size: 10.5px;
line-height: 1.5;
- margin: 40px;
+ margin: 20px;
color: #333;
}
.header {
- text-align: center;
margin-bottom: 10px;
padding-bottom: 10px;
- border-bottom: 1px solid #ccc;
}
.header .sub-title {
@@ -69,8 +67,17 @@
th:nth-child(7), td:nth-child(7) {
width: 15%; /* buat lebih panjang dari kolom lain */
}
- th:nth-child(4), td:nth-child(4) { width: 60px; text-align: center; }
- th:nth-child(6), td:nth-child(6) { width: 110px; text-align: center; }
+
+ th:nth-child(4), td:nth-child(4) {
+ width: 60px;
+ text-align: center;
+ }
+
+ th:nth-child(6), td:nth-child(6) {
+ width: 110px;
+ text-align: center;
+ }
+
.keterangan {
font-size: 10px;
line-height: 1.4;
@@ -87,15 +94,21 @@
-
@@ -111,6 +124,7 @@
Tanggal Antar |
Waktu Makan |
Menu |
+ Karbohidrat |
Keterangan |
Jumlah |
Harga Satuan (Rp) |
@@ -134,6 +148,13 @@
{{ $row['type'] ?? '-' }} |
{{ $row['menu']['nama_menu'] ?? '-' }} |
+
+ @if($row['karbohidrat'])
+ {{ $row['karbohidrat']['nama_karbohidrat'] }} ({{ $row['karbohidrat']['nilai_kalori'] ? $row['karbohidrat']['nilai_kalori'] . ' kkal' : '-' }})
+ @else
+ -
+ @endif
+ |
@php
$jenis = strtolower($row['order']['jenis_customer'] ?? '');
@@ -156,7 +177,7 @@
@empty
|
- | Tidak ada data |
+ Tidak ada data |
@endforelse
@@ -165,6 +186,5 @@
-