Compare commits
68 Commits
main
...
production
| Author | SHA1 | Date | |
|---|---|---|---|
| a831b56177 | |||
| 567ec63dc5 | |||
| 859aff705e | |||
| 258ba46cb7 | |||
| cf29cd2695 | |||
| f0df828334 | |||
| accb93dac2 | |||
| f94a689c18 | |||
| 9a1d59f608 | |||
| 4ab6c690b7 | |||
| e93f3a9d63 | |||
| 98d12ff45a | |||
| 171c94c255 | |||
| c88367653c | |||
| 8f30cf7d85 | |||
| d30f33c931 | |||
| 4a29b16fec | |||
| 04e27d055c | |||
| 940d864387 | |||
| 32911e3248 | |||
| 9b589ac8a2 | |||
| 1da09e4f72 | |||
| a946731be0 | |||
| 42581b13ce | |||
| 5e26f48489 | |||
| e6e481ddf7 | |||
| 7937c1aa4c | |||
| 12c0f3ec92 | |||
| aa442f33f6 | |||
| f15dcffb7d | |||
| 1ac2c881fd | |||
| d157808dba | |||
| 0b1cba1465 | |||
| 0f2963dc16 | |||
| 921a14a57f | |||
| 4977874daa | |||
| 6765543c16 | |||
| 0cbd81b958 | |||
| c3ecb23a38 | |||
| d501f5167e | |||
| 79e1f846ff | |||
| 23925ed842 | |||
| 626d363606 | |||
| 82b7bd42ed | |||
| 5f64dbb409 | |||
| 16e1e83fbb | |||
| 36ac961e03 | |||
| 45d401216b | |||
| b9d1d207f3 | |||
| f9e6283d10 | |||
| d9a35e15f7 | |||
| f15f9dee45 | |||
| b2e4899f87 | |||
| edd76a2513 | |||
| 0e4759682e | |||
| d4cfb0ba5b | |||
| 3c2ce3610f | |||
| 5b131d7751 | |||
| d8b33496dc | |||
| eaecf8932c | |||
| e06e1490a8 | |||
| 23832a46bb | |||
| 49817cdd2b | |||
| 082b4d5adb | |||
| e85df46673 | |||
| d9ebc738c0 | |||
| 00792c68a0 | |||
| 42a68b52bf |
@ -6,22 +6,26 @@ use App\Mail\NotifikasiCustomer;
|
|||||||
use App\Mail\NotifikasiPembayaran;
|
use App\Mail\NotifikasiPembayaran;
|
||||||
use App\Models\JadwalKonsul;
|
use App\Models\JadwalKonsul;
|
||||||
use App\Models\Karbohidrat;
|
use App\Models\Karbohidrat;
|
||||||
|
use App\Models\Karyawan;
|
||||||
use App\Models\MasterMcu;
|
use App\Models\MasterMcu;
|
||||||
use App\Models\Order;
|
use App\Models\Order;
|
||||||
use App\Models\OrderDetail;
|
use App\Models\OrderDetail;
|
||||||
|
use App\Models\UnitInstalasi;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Carbon\CarbonPeriod;
|
use Carbon\CarbonPeriod;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
class CustomerController extends Controller
|
class CustomerController extends Controller
|
||||||
{
|
{
|
||||||
public function index(){
|
public function index(){
|
||||||
|
|
||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Halaman Utama'
|
'title' => 'Halaman Utama',
|
||||||
|
'mcu' => false,
|
||||||
];
|
];
|
||||||
return view('guest.index', $payload);
|
return view('guest.index', $payload);
|
||||||
}
|
}
|
||||||
@ -151,6 +155,7 @@ class CustomerController extends Controller
|
|||||||
return [
|
return [
|
||||||
'master_menu_id' => $menu->master_menu_id,
|
'master_menu_id' => $menu->master_menu_id,
|
||||||
'nama' => $menu->nama_menu,
|
'nama' => $menu->nama_menu,
|
||||||
|
'exist_foto' => file_exists(public_path('gambar/' . $menu->foto)) ? true : false,
|
||||||
'foto' => $menu->foto,
|
'foto' => $menu->foto,
|
||||||
'jenis_menu' => $menu->jenis_menu,
|
'jenis_menu' => $menu->jenis_menu,
|
||||||
'harga_public' => $menu->harga_public,
|
'harga_public' => $menu->harga_public,
|
||||||
@ -183,7 +188,7 @@ class CustomerController extends Controller
|
|||||||
|
|
||||||
// Urutkan: someday → tgl_harian terdekat
|
// Urutkan: someday → tgl_harian terdekat
|
||||||
$sorted = $enriched->sortBy(function ($menu) {
|
$sorted = $enriched->sortBy(function ($menu) {
|
||||||
$hariIni = now()->day;
|
$besok = now()->addDay()->day;
|
||||||
$isSomeday = $menu['apakah_someday'] ? 0 : 1;
|
$isSomeday = $menu['apakah_someday'] ? 0 : 1;
|
||||||
|
|
||||||
if ($menu['apakah_someday']) {
|
if ($menu['apakah_someday']) {
|
||||||
@ -191,8 +196,11 @@ class CustomerController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$tglTerdekat = collect($menu['dmph'])->pluck('tgl_harian')
|
$tglTerdekat = collect($menu['dmph'])->pluck('tgl_harian')
|
||||||
->map(function ($tgl) use ($hariIni) {
|
->map(function ($tgl) use ($besok) {
|
||||||
return $tgl >= $hariIni ? $tgl : $tgl + 31;
|
if ($tgl == $besok) {
|
||||||
|
return 0; // Besok paling awal
|
||||||
|
}
|
||||||
|
return $tgl > $besok ? $tgl : $tgl + 31;
|
||||||
})
|
})
|
||||||
->sort()
|
->sort()
|
||||||
->first() ?? 99;
|
->first() ?? 99;
|
||||||
@ -248,7 +256,8 @@ class CustomerController extends Controller
|
|||||||
$karbohidrat = Karbohidrat::where('statusenabled', true)->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori')->get();
|
$karbohidrat = Karbohidrat::where('statusenabled', true)->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori')->get();
|
||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Checkout ',
|
'title' => 'Checkout ',
|
||||||
'karbohidrat' => $karbohidrat
|
'karbohidrat' => $karbohidrat,
|
||||||
|
'mcu' => false,
|
||||||
];
|
];
|
||||||
return view('guest.checkout.checkout_payment', $payload);
|
return view('guest.checkout.checkout_payment', $payload);
|
||||||
}
|
}
|
||||||
@ -258,7 +267,7 @@ class CustomerController extends Controller
|
|||||||
$dataCart = request()->input('cartResult');
|
$dataCart = request()->input('cartResult');
|
||||||
$biodataResult = request()->input('biodataResult');
|
$biodataResult = request()->input('biodataResult');
|
||||||
$totalHarga = request()->input('totalHarga');
|
$totalHarga = request()->input('totalHarga');
|
||||||
DB::beginTransaction();
|
DB::connection('dbOrderGizi')->beginTransaction();
|
||||||
try {
|
try {
|
||||||
$jenisCustomer = $biodataResult['jenis_customer'];
|
$jenisCustomer = $biodataResult['jenis_customer'];
|
||||||
$today = now()->toDateString();
|
$today = now()->toDateString();
|
||||||
@ -274,18 +283,24 @@ class CustomerController extends Controller
|
|||||||
'no_wa' => $biodataResult['no_whatsapp'],
|
'no_wa' => $biodataResult['no_whatsapp'],
|
||||||
'tinggi_badan' => $biodataResult['tinggi_badan'],
|
'tinggi_badan' => $biodataResult['tinggi_badan'],
|
||||||
'berat_badan' => $biodataResult['berat_badan'],
|
'berat_badan' => $biodataResult['berat_badan'],
|
||||||
'nama_pasien' => $biodataResult['nama_pasien'],
|
|
||||||
'ruang_perawatan' => $biodataResult['ruang_perawatan'],
|
|
||||||
'no_kamar_perawatan' => $biodataResult['no_kamar'],
|
|
||||||
'kelas_perawatan' => $biodataResult['kelas_perawatan'],
|
|
||||||
'bagian_instalasi' => $biodataResult['bagian_instalasi'],
|
|
||||||
'no_ekstensien' => $biodataResult['no_ekstensien'],
|
|
||||||
'total_harga' => $totalHarga,
|
'total_harga' => $totalHarga,
|
||||||
'status_order' => "Belum Bayar",
|
'status_order' => "Belum Bayar",
|
||||||
'email' => $biodataResult['email'],
|
'email' => $biodataResult['email'],
|
||||||
'alamat' => $biodataResult['alamat'],
|
|
||||||
'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
|
'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
|
||||||
];
|
];
|
||||||
|
if($jenisCustomer === "Karyawan RSAB Harapan Kita"){
|
||||||
|
$nip_pns = Karyawan::where('namalengkap',$biodataResult['nama_pemesan'])->first()?->nip_pns;
|
||||||
|
$payloadOrder['nip'] = $nip_pns ?? null;
|
||||||
|
$payloadOrder['bagian_instalasi'] = $biodataResult['bagian_instalasi'] ?? null;
|
||||||
|
$payloadOrder['no_ekstensien'] = $biodataResult['no_ekstensien'] ?? null;
|
||||||
|
}else if($jenisCustomer === "Keluarga Pasien / Penunggu Pasien"){
|
||||||
|
$payloadOrder['nama_pasien'] = $biodataResult['nama_pasien'] ?? null;
|
||||||
|
$payloadOrder['ruang_perawatan'] = $biodataResult['ruang_perawatan'] ?? null;
|
||||||
|
$payloadOrder['no_kamar_perawatan'] = $biodataResult['no_kamar'] ?? null;
|
||||||
|
$payloadOrder['kelas_perawatan'] = $biodataResult['kelas_perawatan'] ?? null;
|
||||||
|
}else{
|
||||||
|
$payloadOrder['alamat'] = $biodataResult['alamat'] ?? null;
|
||||||
|
}
|
||||||
$order = Order::create($payloadOrder);
|
$order = Order::create($payloadOrder);
|
||||||
foreach ($dataCart as $cart) {
|
foreach ($dataCart as $cart) {
|
||||||
$payloadOrderDetail = [
|
$payloadOrderDetail = [
|
||||||
@ -300,14 +315,20 @@ class CustomerController extends Controller
|
|||||||
$payloadOrderDetail['karbohidrat_id'] = $value['karbohidrat_id'] ?? null;
|
$payloadOrderDetail['karbohidrat_id'] = $value['karbohidrat_id'] ?? null;
|
||||||
$payloadOrderDetail['catatan'] = $value['catatan'] ?? null;
|
$payloadOrderDetail['catatan'] = $value['catatan'] ?? null;
|
||||||
$payloadOrderDetail['master_menu_id'] = $cart['id_menu'];
|
$payloadOrderDetail['master_menu_id'] = $cart['id_menu'];
|
||||||
|
$payloadOrderDetail['total_kalori'] = $value['resultKalori'] ?? ($cart['kalori'] ?? null);
|
||||||
OrderDetail::create($payloadOrderDetail);
|
OrderDetail::create($payloadOrderDetail);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//code...
|
//code...
|
||||||
if($order->email){
|
if($order->email){
|
||||||
Mail::to($order->email)->queue(new NotifikasiCustomer($order->nama_pemesan, $order->no_order, $order->total_harga));
|
try {
|
||||||
|
Mail::to($order->email)->send(new NotifikasiCustomer($order->nama_pemesan, $order->no_order, $order->total_harga));
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
//throw $th;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
DB::commit();
|
DB::connection('dbOrderGizi')->commit();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'data' => $order,
|
'data' => $order,
|
||||||
@ -315,7 +336,7 @@ class CustomerController extends Controller
|
|||||||
'message' => 'Data berhasil disimpan'
|
'message' => 'Data berhasil disimpan'
|
||||||
]);
|
]);
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
DB::rollBack();
|
DB::connection('dbOrderGizi')->rollBack();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'Data gagal disimpan ' . $th->getMessage()
|
'message' => 'Data gagal disimpan ' . $th->getMessage()
|
||||||
@ -324,7 +345,7 @@ class CustomerController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function finishCheckout(){
|
public function finishCheckout(){
|
||||||
DB::beginTransaction();
|
DB::connection('dbOrderGizi')->beginTransaction();
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$noOrder = request('no_order_result');
|
$noOrder = request('no_order_result');
|
||||||
@ -363,18 +384,27 @@ class CustomerController extends Controller
|
|||||||
$order->update($payload);
|
$order->update($payload);
|
||||||
|
|
||||||
if($order->email){
|
if($order->email){
|
||||||
Mail::to($order->email)->queue(new NotifikasiPembayaran($order->nama_pemesan, $order->no_order));
|
try {
|
||||||
|
Mail::to($order->email)->send(
|
||||||
|
new NotifikasiPembayaran($order->nama_pemesan, $order->no_order)
|
||||||
|
);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// log error biar bisa ditelusuri nanti
|
||||||
|
// \Log::error('Gagal mengirim email ke ' . $order->email . ': ' . $e->getMessage());
|
||||||
|
// continue tanpa break flow
|
||||||
|
}
|
||||||
}
|
}
|
||||||
DB::commit();
|
DB::connection('dbOrderGizi')->commit();
|
||||||
session()->flash('payment_success', true);
|
session()->flash('payment_success', true);
|
||||||
session()->flash('no_order', $noOrder);
|
session()->flash('no_order', $noOrder);
|
||||||
return response([
|
return response([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
|
'no_order' => $noOrder,
|
||||||
'message' => 'Terima kasih atas pesanan Anda. Mohon tunggu, kami sedang memprosesnya'
|
'message' => 'Terima kasih atas pesanan Anda. Mohon tunggu, kami sedang memprosesnya'
|
||||||
], 200);
|
], 200);
|
||||||
return back()->with('success', 'Bukti pembayaran berhasil diunggah.');
|
return back()->with('success', 'Bukti pembayaran berhasil diunggah.');
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
DB::rollBack();
|
DB::connection('dbOrderGizi')->rollBack();
|
||||||
return response([
|
return response([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'Gagal melakukan pesanan!'
|
'message' => 'Gagal melakukan pesanan!'
|
||||||
@ -388,7 +418,8 @@ class CustomerController extends Controller
|
|||||||
}
|
}
|
||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Berhasil Melakukan Pembayaran ',
|
'title' => 'Berhasil Melakukan Pembayaran ',
|
||||||
'no_order' => session('no_order')
|
'no_order' => session('no_order'),
|
||||||
|
'mcu' => false,
|
||||||
];
|
];
|
||||||
return view('guest.success_page', $payload);
|
return view('guest.success_page', $payload);
|
||||||
}
|
}
|
||||||
@ -396,7 +427,8 @@ class CustomerController extends Controller
|
|||||||
public function checkOrder(){
|
public function checkOrder(){
|
||||||
|
|
||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Check Order'
|
'title' => 'Check Order',
|
||||||
|
'mcu' => false,
|
||||||
];
|
];
|
||||||
return view('guest.check_order.index', $payload);
|
return view('guest.check_order.index', $payload);
|
||||||
}
|
}
|
||||||
@ -407,6 +439,7 @@ class CustomerController extends Controller
|
|||||||
->table('public.order as o')
|
->table('public.order as o')
|
||||||
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
->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.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 . '%')
|
->where('o.no_order', 'ILIKE', '%' . $noOrder . '%')
|
||||||
->select(
|
->select(
|
||||||
'o.*',
|
'o.*',
|
||||||
@ -416,7 +449,10 @@ class CustomerController extends Controller
|
|||||||
'od.harga_satuan',
|
'od.harga_satuan',
|
||||||
'od.status_order as status_order_detail',
|
'od.status_order as status_order_detail',
|
||||||
'od.catatan',
|
'od.catatan',
|
||||||
'mm.nama_menu as nama_item',
|
'od.total_kalori',
|
||||||
|
'od.type',
|
||||||
|
'od.jam_layanan',
|
||||||
|
DB::raw('COALESCE(mm.nama_menu, mcu.nama_mcu) as nama_item'),
|
||||||
'mm.foto as foto'
|
'mm.foto as foto'
|
||||||
)
|
)
|
||||||
->get();
|
->get();
|
||||||
@ -451,16 +487,22 @@ class CustomerController extends Controller
|
|||||||
// karyawan
|
// karyawan
|
||||||
'no_ekstensien' => $data->no_ekstensien,
|
'no_ekstensien' => $data->no_ekstensien,
|
||||||
'bagian_instalasi' => $data->bagian_instalasi,
|
'bagian_instalasi' => $data->bagian_instalasi,
|
||||||
|
// umum
|
||||||
|
'alamat' => $data->alamat,
|
||||||
'items' => $order->map(function ($item) {
|
'items' => $order->map(function ($item) {
|
||||||
return [
|
return [
|
||||||
'order_detail_id' => $item->order_detail_id,
|
'order_detail_id' => $item->order_detail_id,
|
||||||
'nama_item' => $item->nama_item,
|
'nama_item' => $item->nama_item,
|
||||||
'tgl_antar' => $item->tgl_antar,
|
'tgl_antar' => $item->tgl_antar,
|
||||||
|
'exist_foto' => file_exists(public_path('gambar/' . $item->foto)) ? true : false,
|
||||||
'foto' => $item->foto,
|
'foto' => $item->foto,
|
||||||
'jumlah' => $item->jumlah,
|
'jumlah' => $item->jumlah,
|
||||||
'harga_satuan' => $item->harga_satuan,
|
'harga_satuan' => $item->harga_satuan,
|
||||||
'status_order' => $item->status_order_detail,
|
'status_order' => $item->status_order_detail,
|
||||||
'catatan' => $item->catatan ?? '-'
|
'catatan' => $item->catatan ?? '-',
|
||||||
|
'total_kalori' => $item->total_kalori,
|
||||||
|
'type' => $item->type,
|
||||||
|
'jam_layanan' => $item->jam_layanan,
|
||||||
// tambahkan field tambahan jika diperlukan
|
// tambahkan field tambahan jika diperlukan
|
||||||
];
|
];
|
||||||
})->values(),
|
})->values(),
|
||||||
@ -477,7 +519,8 @@ class CustomerController extends Controller
|
|||||||
$paketMcu = MasterMcu::where('statusenabled', true)->get();
|
$paketMcu = MasterMcu::where('statusenabled', true)->get();
|
||||||
$data = [
|
$data = [
|
||||||
'title' => 'Order Gizi MCU',
|
'title' => 'Order Gizi MCU',
|
||||||
'paketMcu' => $paketMcu
|
'paketMcu' => $paketMcu,
|
||||||
|
'mcu' => true,
|
||||||
];
|
];
|
||||||
return view('guest.mcu.index', $data);
|
return view('guest.mcu.index', $data);
|
||||||
}
|
}
|
||||||
@ -487,6 +530,7 @@ class CustomerController extends Controller
|
|||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
DB::connection('dbOrderGizi')->beginTransaction();
|
||||||
$today = now()->toDateString();
|
$today = now()->toDateString();
|
||||||
$jumlahHariIni = Order::whereDate('entry_at', $today)->count();
|
$jumlahHariIni = Order::whereDate('entry_at', $today)->count();
|
||||||
|
$priceMcu = MasterMcu::where('menu_mcu_id', request('paket_mcu'))->first();
|
||||||
$urutan = $jumlahHariIni + 1;
|
$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);
|
$noOrder = 'TX/CT/GIZI/' . now()->year .'/'. now()->month .'/' . now()->day .'/MCU/' . Str::random(6) .'/' . str_pad($urutan, 4, '0', STR_PAD_LEFT);
|
||||||
$payload = [
|
$payload = [
|
||||||
@ -499,17 +543,21 @@ class CustomerController extends Controller
|
|||||||
'no_wa' => request('no_hp') ?? null,
|
'no_wa' => request('no_hp') ?? null,
|
||||||
'tinggi_badan' => request('tinggi_badan') ?? null,
|
'tinggi_badan' => request('tinggi_badan') ?? null,
|
||||||
'berat_badan' => request('berat_badan') ?? null,
|
'berat_badan' => request('berat_badan') ?? null,
|
||||||
'status_order' =>'Menunggu Konfirmasi Pesanan MCU'
|
'nama_institusi' => request('nama_institusi'),
|
||||||
|
'status_order' =>'Menunggu Konfirmasi Pesanan MCU',
|
||||||
|
'total_harga' => $priceMcu ? $priceMcu->harga : null,
|
||||||
|
'cara_pembayaran' =>'MCU',
|
||||||
];
|
];
|
||||||
$order = Order::create($payload);
|
$order = Order::create($payload);
|
||||||
|
|
||||||
$payloadDetail = [
|
$payloadDetail = [
|
||||||
'order_id' => $order->order_id,
|
'order_id' => $order->order_id,
|
||||||
'jumlah' => 1,
|
'jumlah' => 1,
|
||||||
'tgl_antar' => request('tgl_mcu'),
|
'tgl_antar' => request('tgl_mcu'),
|
||||||
'menu_mcu_id' => request('paket_mcu'),
|
'menu_mcu_id' => request('paket_mcu'),
|
||||||
'jam_layanan' => request('jam_layanan'),
|
'jam_layanan' => request('jam_layanan'),
|
||||||
'cara_pembayaran' => 'MCU',
|
'status_order' =>'Pending',
|
||||||
'status_order' =>'Menunggu Konfirmasi'
|
'harga_satuan' => $priceMcu ? $priceMcu->harga : null,
|
||||||
];
|
];
|
||||||
OrderDetail::create($payloadDetail);
|
OrderDetail::create($payloadDetail);
|
||||||
|
|
||||||
@ -521,7 +569,7 @@ class CustomerController extends Controller
|
|||||||
'message' => 'Pesanan Berhasil diproses'
|
'message' => 'Pesanan Berhasil diproses'
|
||||||
]);
|
]);
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
DB::rollBack();
|
DB::connection('dbOrderGizi')->rollBack();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'Pesanan gagal diproses ' . $th->getMessage()
|
'message' => 'Pesanan gagal diproses ' . $th->getMessage()
|
||||||
@ -536,8 +584,57 @@ class CustomerController extends Controller
|
|||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Berhasil Melakukan Pesanan ',
|
'title' => 'Berhasil Melakukan Pesanan ',
|
||||||
'no_order' => session('no_order'),
|
'no_order' => session('no_order'),
|
||||||
'back_href' => '/order-mcu'
|
'back_href' => '/order-mcu',
|
||||||
|
'mcu' => false
|
||||||
];
|
];
|
||||||
return view('guest.success_page', $payload);
|
return view('guest.success_page', $payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function karyawan(Request $request)
|
||||||
|
{
|
||||||
|
$search = trim($request->input('search'));
|
||||||
|
|
||||||
|
// 1. Validasi dulu
|
||||||
|
$validator = Validator::make(
|
||||||
|
['search' => $search],
|
||||||
|
['search' => 'required|string|min:2|max:50|regex:/^[a-zA-Z.\s]+$/']
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json(['error' => 0, 'data' => []]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Baru query kalau ada keyword
|
||||||
|
$data =Karyawan::where('statusenabled', true)->where('kedudukanfk', 1)
|
||||||
|
->where('namalengkap', 'ILIKE', "%{$search}%")
|
||||||
|
->limit(5)
|
||||||
|
->pluck('namalengkap') // langsung ambil string
|
||||||
|
->map(fn($nama) => ['label' => $nama]);
|
||||||
|
|
||||||
|
return response()->json(['error' => 0, 'data' => $data]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unitInstalasi(Request $request)
|
||||||
|
{
|
||||||
|
$search = trim($request->input('search'));
|
||||||
|
|
||||||
|
// 1. Validasi dulu
|
||||||
|
$validator = Validator::make(
|
||||||
|
['search' => $search],
|
||||||
|
['search' => 'required|string|min:2|max:50|regex:/^[a-zA-Z.\s]+$/']
|
||||||
|
);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json(['error' => 0, 'data' => []]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Baru query kalau ada keyword
|
||||||
|
$data = UnitInstalasi::where('statusenabled', true)
|
||||||
|
->select('name')
|
||||||
|
->where('name', 'ILIKE', "%{$search}%")
|
||||||
|
->limit(5)
|
||||||
|
->get()
|
||||||
|
->map(fn($row) => ['label' => $row->name]);
|
||||||
|
|
||||||
|
return response()->json(['error' => 0, 'data' => $data]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -61,15 +61,15 @@ class DashboardController extends Controller
|
|||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
];
|
];
|
||||||
})->values();
|
})->values();
|
||||||
$pemasukanKaryawan = $grouped->where('jenis_customer', 'Karyawan RSAB Harapan Kita')->sum('total_harga');
|
$pemasukanKaryawan = $grouped->where('jenis_customer', 'Karyawan RSAB Harapan Kita')->whereNotIn('status_order', ['Belum Bayar'])->sum('total_harga');
|
||||||
$pemasukanMasyarakat = $grouped->where('jenis_customer', 'Masyarakat Umum')->sum('total_harga');
|
$pemasukanMasyarakat = $grouped->where('jenis_customer', 'Masyarakat Umum')->whereNotIn('status_order', ['Belum Bayar'])->sum('total_harga');
|
||||||
$pemasukanKeluargaPasien = $grouped->where('jenis_customer', 'Keluarga Pasien / Penunggu Pasien')->sum('total_harga');
|
$pemasukanKeluargaPasien = $grouped->where('jenis_customer', 'Keluarga Pasien / Penunggu Pasien')->whereNotIn('status_order', ['Belum Bayar'])->sum('total_harga');
|
||||||
|
|
||||||
$totalPemasukan = $grouped->sum('total_harga');
|
$totalPemasukan = $grouped->whereNotIn('status_order', ['Belum Bayar'])->sum('total_harga');
|
||||||
$pesananPending = $grouped->whereNotIn('status_order', ['Lunas', 'Dibatalkan'])->count();
|
$pesananPending = $grouped->whereNotIn('status_order', ['Lunas', 'Dibatalkan', 'Belum Bayar'])->count();
|
||||||
$pesananLunas = $grouped->where('status_order', 'Lunas')->count();
|
$pesananLunas = $grouped->where('status_order', 'Lunas')->count();
|
||||||
$pesananBatal = $grouped->where('status_order', 'Dibatalkan')->count();
|
$pesananBatal = $grouped->where('status_order', 'Dibatalkan')->count();
|
||||||
$totalPesanan = $grouped->count();
|
$totalPesanan = $grouped->whereNotIn('status_order', ['Belum Bayar'])->count();
|
||||||
|
|
||||||
$pesananSelesai = DB::connection('dbOrderGizi')->table('public.order as o')
|
$pesananSelesai = DB::connection('dbOrderGizi')->table('public.order as o')
|
||||||
->where('o.statusenabled', true)
|
->where('o.statusenabled', true)
|
||||||
|
|||||||
@ -37,6 +37,16 @@ class PesananController extends Controller
|
|||||||
}else{
|
}else{
|
||||||
$tanggalFormatted = [Carbon::now()->toDateString()];
|
$tanggalFormatted = [Carbon::now()->toDateString()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$dataPending = Order::where('statusenabled', true)->whereIn('status_order', [
|
||||||
|
'Menunggu Konfirmasi Pembayaran',
|
||||||
|
'Menunggu Konfirmasi Pembayaran Via Billing',
|
||||||
|
'Menunggu Konfirmasi Pesanan MCU'
|
||||||
|
])
|
||||||
|
->select(DB::raw('COUNT(DISTINCT DATE(entry_at)) as total'))
|
||||||
|
->value('total');
|
||||||
|
|
||||||
|
|
||||||
$orders = DB::connection('dbOrderGizi')->table('public.order as o')
|
$orders = DB::connection('dbOrderGizi')->table('public.order as o')
|
||||||
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
||||||
->where('o.statusenabled', true)
|
->where('o.statusenabled', true)
|
||||||
@ -57,6 +67,7 @@ class PesananController extends Controller
|
|||||||
'o.bukti_pembayaran',
|
'o.bukti_pembayaran',
|
||||||
'o.note_dibatalkan',
|
'o.note_dibatalkan',
|
||||||
'o.medical_record',
|
'o.medical_record',
|
||||||
|
'o.nama_institusi',
|
||||||
'od.status_order as detail_status_order'
|
'od.status_order as detail_status_order'
|
||||||
)->get()->groupBy('order_id');
|
)->get()->groupBy('order_id');
|
||||||
$grouped = $orders->map(function($items){
|
$grouped = $orders->map(function($items){
|
||||||
@ -79,15 +90,18 @@ class PesananController extends Controller
|
|||||||
'total_detail' => $totalDetail,
|
'total_detail' => $totalDetail,
|
||||||
'selesai_detail' => $selesaiDetail,
|
'selesai_detail' => $selesaiDetail,
|
||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
|
'nama_institusi' => $first->nama_institusi,
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
->filter(function($item){
|
->filter(function($item){
|
||||||
return $item['total_detail'] > 0 && $item['total_detail'] != $item['selesai_detail'];
|
return $item['total_detail'] > 0 && $item['total_detail'] != $item['selesai_detail'];
|
||||||
})->values();
|
})->values();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'rows' => $grouped->values(),
|
'rows' => $grouped->values(),
|
||||||
'total' => $grouped->count()
|
'total' => $grouped->count(),
|
||||||
|
'dataPending'=> $dataPending
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,8 +121,13 @@ class PesananController extends Controller
|
|||||||
}
|
}
|
||||||
$order->update($payload);
|
$order->update($payload);
|
||||||
|
|
||||||
if($order->email){
|
if($order->email && $order->status_order === "Lunas"){
|
||||||
Mail::to($order->email)->queue(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga));
|
try {
|
||||||
|
//code...
|
||||||
|
Mail::to($order->email)->send(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga));
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
//throw $th;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::connection('dbOrderGizi')->commit();
|
DB::connection('dbOrderGizi')->commit();
|
||||||
@ -136,7 +155,6 @@ class PesananController extends Controller
|
|||||||
'pegawai_name_confirm_order' => auth()->user()->full_name,
|
'pegawai_name_confirm_order' => auth()->user()->full_name,
|
||||||
'pegawai_at_confirm_order' => Carbon::now(),
|
'pegawai_at_confirm_order' => Carbon::now(),
|
||||||
'status_order' => 'Lunas',
|
'status_order' => 'Lunas',
|
||||||
'cara_pembayaran' => 'Billing'
|
|
||||||
];
|
];
|
||||||
if($request->hasFile('evidence_medical_record')){
|
if($request->hasFile('evidence_medical_record')){
|
||||||
$file = $request->file('evidence_medical_record');
|
$file = $request->file('evidence_medical_record');
|
||||||
@ -146,7 +164,7 @@ class PesananController extends Controller
|
|||||||
$order->update($payload);
|
$order->update($payload);
|
||||||
|
|
||||||
if($order->email){
|
if($order->email){
|
||||||
Mail::to($order->email)->queue(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga));
|
Mail::to($order->email)->send(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga));
|
||||||
}
|
}
|
||||||
DB::connection('dbOrderGizi')->commit();
|
DB::connection('dbOrderGizi')->commit();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -180,6 +198,24 @@ class PesananController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function dataPending(){
|
||||||
|
$data = Order::selectRaw('DATE(entry_at) as tgl, COUNT(*) as total')
|
||||||
|
->where('statusenabled', true)
|
||||||
|
->whereIn('status_order', [
|
||||||
|
'Menunggu Konfirmasi Pembayaran',
|
||||||
|
'Menunggu Konfirmasi Pembayaran Via Billing',
|
||||||
|
'Menunggu Konfirmasi Pesanan MCU'
|
||||||
|
])
|
||||||
|
->groupBy(DB::raw('DATE(entry_at)'))
|
||||||
|
->orderBy('tgl', 'asc')
|
||||||
|
->get();
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'rows' => $data->values(),
|
||||||
|
'total' => $data->count()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
public function indexSelesai()
|
public function indexSelesai()
|
||||||
{
|
{
|
||||||
$payload = [
|
$payload = [
|
||||||
@ -218,6 +254,7 @@ class PesananController extends Controller
|
|||||||
'o.note_dibatalkan',
|
'o.note_dibatalkan',
|
||||||
'o.medical_record',
|
'o.medical_record',
|
||||||
'o.evidence_medical_record',
|
'o.evidence_medical_record',
|
||||||
|
'o.nama_institusi',
|
||||||
'od.status_order as detail_status_order'
|
'od.status_order as detail_status_order'
|
||||||
)->get()->groupBy('order_id');
|
)->get()->groupBy('order_id');
|
||||||
|
|
||||||
@ -242,6 +279,7 @@ class PesananController extends Controller
|
|||||||
'total_detail' => $totalDetail,
|
'total_detail' => $totalDetail,
|
||||||
'selesai_detail' => $selesaiDetail,
|
'selesai_detail' => $selesaiDetail,
|
||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
|
'nama_institusi' => $first->nama_institusi,
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
->filter(function($item){
|
->filter(function($item){
|
||||||
@ -264,7 +302,7 @@ class PesananController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getPekerjaan(){
|
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');
|
$q->where('status_order', 'Lunas');
|
||||||
});
|
});
|
||||||
$tanggal = request('tanggal');
|
$tanggal = request('tanggal');
|
||||||
@ -279,16 +317,39 @@ class PesananController extends Controller
|
|||||||
// if($status !== "all"){
|
// if($status !== "all"){
|
||||||
// $data->where('status_order', $status);
|
// $data->where('status_order', $status);
|
||||||
// }
|
// }
|
||||||
|
$dataPending = OrderDetail::whereHas('order', function($query) {
|
||||||
|
$query->where('status_order', 'Lunas');
|
||||||
|
})->where('status_order', 'Pending')
|
||||||
|
->select(DB::raw('COUNT(DISTINCT DATE(tgl_antar)) as total'))
|
||||||
|
->value('total');
|
||||||
|
|
||||||
$data = $data->get();
|
$data = $data->get();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
|
'rows' => $data->values(),
|
||||||
|
'total' => $data->count(),
|
||||||
|
'dataPending' => $dataPending
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dataPekerjaanPending(){
|
||||||
|
$data = OrderDetail::with('order')->where('status_order', 'Pending')
|
||||||
|
->select(DB::raw('DATE(tgl_antar) as tgl'), DB::raw('COUNT(*) as total'))
|
||||||
|
->whereHas('order', function($query) {
|
||||||
|
$query->where('status_order', 'Lunas'); // filter status di tabel orders
|
||||||
|
})
|
||||||
|
->groupBy(DB::raw('DATE(tgl_antar)'))
|
||||||
|
->orderBy('tgl', 'asc')
|
||||||
|
->get();
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
'rows' => $data->values(),
|
'rows' => $data->values(),
|
||||||
'total' => $data->count()
|
'total' => $data->count()
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPekerjaanDetail($order_detail_id){
|
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([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'data' => $data
|
'data' => $data
|
||||||
@ -301,7 +362,7 @@ class PesananController extends Controller
|
|||||||
$type_customer = request('type_customer');
|
$type_customer = request('type_customer');
|
||||||
$type = request('type');
|
$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');
|
$q->where('status_order', 'Lunas');
|
||||||
if($type_customer !== 'all'){
|
if($type_customer !== 'all'){
|
||||||
$q->where('jenis_customer', $type_customer);
|
$q->where('jenis_customer', $type_customer);
|
||||||
@ -338,18 +399,18 @@ class PesananController extends Controller
|
|||||||
$sheet = $spreadsheet->getActiveSheet();
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
|
||||||
$sheet->setCellValue('A1', "Menu Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
$sheet->setCellValue('A1', "Menu Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
||||||
$sheet->mergeCells('A1:K1');
|
$sheet->mergeCells('A1:P1');
|
||||||
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
||||||
|
|
||||||
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
||||||
$sheet->mergeCells('A2:K2');
|
$sheet->mergeCells('A2:P2');
|
||||||
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
||||||
|
|
||||||
// Header tabel
|
// 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 Pembayaran", "Jenis Customer", "Ruangan", "Status Pesanan", "Jenis Menu", "Menu Pesanan", "Karbohidrat", "Total Kalori (kal)", "Jumlah", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Harga Total", "Catatan"];
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
$sheet->fromArray($headers, null, 'A4');
|
||||||
$sheet->getStyle('A4:K4')->applyFromArray([
|
$sheet->getStyle('A4:P4')->applyFromArray([
|
||||||
'font' => ['bold' => true],
|
'font' => ['bold' => true],
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||||
'borders' => [
|
'borders' => [
|
||||||
@ -358,36 +419,58 @@ class PesananController extends Controller
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
$sheet->getStyle('A4:K4')->getFont()->setBold(true);
|
$sheet->getStyle('A4:P4')->getFont()->setBold(true);
|
||||||
$sheet->getStyle('A4:K4')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A4:P4')->getAlignment()->setHorizontal('center');
|
||||||
$sheet->getStyle('A4:K4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
$sheet->getStyle('A4:P4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
// Isi data
|
// Isi data
|
||||||
$row = 5;
|
$row = 5;
|
||||||
|
$totalPendapatan = 0;
|
||||||
foreach ($orderDetail as $index => $item) {
|
foreach ($orderDetail as $index => $item) {
|
||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
$sheet->setCellValue("A{$row}", $index + 1);
|
||||||
$sheet->setCellValue("B{$row}", $item?->order?->no_order);
|
$sheet->setCellValue("B{$row}", $item?->order?->no_order);
|
||||||
$sheet->setCellValue("C{$row}", $item?->order?->nama_pemesan);
|
$sheet->setCellValue("C{$row}", $item?->order?->nama_pemesan);
|
||||||
$sheet->setCellValue("D{$row}", $item?->order?->jenis_customer);
|
$sheet->setCellValue("D{$row}", $item?->order?->cara_pembayaran);
|
||||||
$sheet->setCellValue("E{$row}", $item?->status_order ?? "-");
|
$sheet->setCellValue("E{$row}", $item?->order?->jenis_customer === "MCU" ? $item?->order?->nama_institusi . '- MCU' : $item?->order?->jenis_customer);
|
||||||
$sheet->setCellValue("F{$row}", $item?->menu?->nama_menu ?? '-');
|
if($item->order?->jenis_customer === "Keluarga Pasien / Penunggu Pasien"){
|
||||||
|
$sheet->setCellValue("F{$row}", $item?->order?->kelas_perawatan . '/' . $item?->order?->no_kamar_perawatan . '/' . $item?->order?->ruang_perawatan);
|
||||||
|
}else if($item->order?->jenis_customer === "Karyawan RSAB Harapan Kita"){
|
||||||
|
$sheet->setCellValue("F{$row}", $item?->order?->bagian_instalasi ?? '-');
|
||||||
|
}else{
|
||||||
|
$sheet->setCellValue("F{$row}", '-');
|
||||||
|
}
|
||||||
|
$sheet->setCellValue("G{$row}", $item?->status_order ?? "-");
|
||||||
|
if($item->menu?->masterMcu){
|
||||||
|
$sheet->setCellValue("H{$row}", 'Menu MCU');
|
||||||
|
}else{
|
||||||
|
$sheet->setCellValue("H{$row}", $item?->menu?->apakah_someday ? "Menu Sameday" : "Menu Normal");
|
||||||
|
}
|
||||||
|
$sheet->setCellValue("I{$row}", $item?->menu?->nama_menu ?? $item?->masterMcu?->nama_mcu);
|
||||||
$karbohidratNama = $item?->karbohidrat?->nama_karbohidrat ?? '-';
|
$karbohidratNama = $item?->karbohidrat?->nama_karbohidrat ?? '-';
|
||||||
$karbohidratNilai = $item?->karbohidrat?->nilai_kalori ?? '-';
|
$karbohidratNilai = $item?->karbohidrat?->nilai_kalori ?? '-';
|
||||||
$sheet->setCellValue("G{$row}", $karbohidratNama . ($karbohidratNilai !== '-' ? " ({$karbohidratNilai} kal)" : ''));
|
$sheet->setCellValue("J{$row}", $karbohidratNama . ($karbohidratNilai !== '-' ? " ({$karbohidratNilai} kal)" : ''));
|
||||||
$sheet->setCellValue("H{$row}", $item?->jumlah ?? '-');
|
$sheet->setCellValue("K{$row}", $item?->total_kalori ?? '-');
|
||||||
$sheet->setCellValue("I{$row}", $item?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar");
|
$sheet->setCellValue("L{$row}", $item?->jumlah ?? '-');
|
||||||
$sheet->setCellValue("J{$row}", $item?->type ?? "-");
|
$sheet->setCellValue("M{$row}", $item?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar");
|
||||||
$sheet->setCellValue("K{$row}", $item?->catatan ?? "-");
|
$sheet->setCellValue("N{$row}", $item?->type ?? $item->jam_layanan);
|
||||||
|
$sheet->setCellValue("O{$row}", $item?->order?->total_harga);
|
||||||
|
$sheet->setCellValue("P{$row}", $item?->catatan ?? "-");
|
||||||
// Border tiap baris
|
// Border tiap baris
|
||||||
$sheet->getStyle("A{$row}:K{$row}")->getBorders()->getAllBorders()
|
$sheet->getStyle("A{$row}:P{$row}")->getBorders()->getAllBorders()
|
||||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
$totalPendapatan += $item?->order?->total_harga;
|
||||||
$row++;
|
$row++;
|
||||||
}
|
}
|
||||||
|
$sheet->getStyle("L{$row}:O{$row}")->getFont()->setBold(true);
|
||||||
|
$sheet->getStyle("L{$row}:O{$row}")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
$sheet->setCellValue("M{$row}", 'Total Pendapatan');
|
||||||
|
$sheet->setCellValue("O{$row}", $totalPendapatan);
|
||||||
|
|
||||||
// Auto size kolom
|
// Auto size kolom
|
||||||
foreach(range('A', 'K') as $col){
|
foreach(range('A', 'P') as $col){
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||||
}
|
}
|
||||||
$lastRow = $row - 1;
|
$lastRow = $row - 1;
|
||||||
$sheet->setAutoFilter("A4:K{$lastRow}");
|
$sheet->setAutoFilter("A4:P{$lastRow}");
|
||||||
// Download file
|
// Download file
|
||||||
$fileName = 'menu-pesanan' . now()->format('Ymd-His') . '.xlsx';
|
$fileName = 'menu-pesanan' . now()->format('Ymd-His') . '.xlsx';
|
||||||
$writer = new Xlsx($spreadsheet);
|
$writer = new Xlsx($spreadsheet);
|
||||||
@ -409,7 +492,7 @@ class PesananController extends Controller
|
|||||||
$type_customer = request('type_customer');
|
$type_customer = request('type_customer');
|
||||||
$query = Order::where('statusenabled', true)
|
$query = Order::where('statusenabled', true)
|
||||||
->whereBetween('entry_at', [$startDate, $endDate])
|
->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'){
|
if($type_customer !== 'all'){
|
||||||
$query->where('jenis_customer', $type_customer);
|
$query->where('jenis_customer', $type_customer);
|
||||||
}
|
}
|
||||||
@ -447,20 +530,19 @@ class PesananController extends Controller
|
|||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
$sheet = $spreadsheet->getActiveSheet();
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
|
||||||
$sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
$sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
||||||
$sheet->mergeCells('A1:P1');
|
$sheet->mergeCells('A1:T1');
|
||||||
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
||||||
|
|
||||||
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
||||||
$sheet->mergeCells('A2:P2');
|
$sheet->mergeCells('A2:T2');
|
||||||
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
||||||
|
|
||||||
// Header tabel
|
// 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", "Ruangan", "Status Pembayaran", "Jenis Kelamin", "NO.HP/WA", "Email" , "Jenis Pembayaran", "Tanggal Pesan", "Harga Total", "Jenis Menu", "Menu Pesanan", "Total Kalori", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"];
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
$sheet->fromArray($headers, null, 'A4');
|
||||||
$sheet->getStyle('A4:Q4')->applyFromArray([
|
$sheet->getStyle('A4:T4')->applyFromArray([
|
||||||
'font' => ['bold' => true],
|
'font' => ['bold' => true],
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||||
'borders' => [
|
'borders' => [
|
||||||
@ -469,46 +551,64 @@ class PesananController extends Controller
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
$sheet->getStyle('A4:Q4')->getFont()->setBold(true);
|
$sheet->getStyle('A4:T4')->getFont()->setBold(true);
|
||||||
$sheet->getStyle('A4:Q4')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A4:T4')->getAlignment()->setHorizontal('center');
|
||||||
$sheet->getStyle('A4:Q4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
$sheet->getStyle('A4:T4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
|
||||||
// Isi data
|
// Isi data
|
||||||
|
$totalPendapatan = 0;
|
||||||
$row = 5;
|
$row = 5;
|
||||||
foreach ($order as $index => $item) {
|
foreach ($order as $index => $item) {
|
||||||
foreach($item->orderDetail as $detail){
|
foreach($item->orderDetail as $detail){
|
||||||
|
|
||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
$sheet->setCellValue("A{$row}", $index + 1);
|
||||||
$sheet->setCellValue("B{$row}", $item->no_order);
|
$sheet->setCellValue("B{$row}", $item->no_order);
|
||||||
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
||||||
$sheet->setCellValue("D{$row}", $item->jenis_customer);
|
$sheet->setCellValue("D{$row}", $item->jenis_customer === "MCU" ? $item->nama_institusi . '-' . $item->jenis_customer : $item->jenis_customer);
|
||||||
$sheet->setCellValue("E{$row}", $item->status_order);
|
if($item->jenis_customer === "Keluarga Pasien / Penunggu Pasien"){
|
||||||
$sheet->setCellValue("F{$row}", $item->jenis_kelamin);
|
$sheet->setCellValue("E{$row}", $item->kelas_perawatan . '/' . $item->no_kamar_perawatan . '/' . $item->ruang_perawatan);
|
||||||
$sheet->setCellValue("G{$row}", $item->no_wa);
|
}else if($item->jenis_customer === "Karyawan RSAB Harapan Kita"){
|
||||||
$sheet->setCellValue("H{$row}", $item->email);
|
$sheet->setCellValue("E{$row}", $item->bagian_instalasi ?? '-');
|
||||||
$sheet->setCellValue("I{$row}", $item->cara_pembayaran);
|
}else{
|
||||||
$sheet->setCellValue("J{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
$sheet->setCellValue("E{$row}", '-');
|
||||||
$sheet->setCellValue("K{$row}", $item->total_harga);
|
}
|
||||||
|
$sheet->setCellValue("F{$row}", $item->status_order);
|
||||||
$sheet->setCellValue("L{$row}", $detail?->menu?->nama_menu ?? '-');
|
$sheet->setCellValue("G{$row}", $item->jenis_kelamin);
|
||||||
$sheet->setCellValue("M{$row}", $detail?->jumlah ?? '-');
|
$sheet->setCellValue("H{$row}", $item->no_wa);
|
||||||
$sheet->setCellValue("N{$row}", $detail?->status_order ?? "-");
|
$sheet->setCellValue("I{$row}", $item->email);
|
||||||
$sheet->setCellValue("O{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar");
|
$sheet->setCellValue("J{$row}", $item->cara_pembayaran);
|
||||||
$sheet->setCellValue("P{$row}", $detail?->type ?? "-");
|
$sheet->setCellValue("K{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
||||||
$sheet->setCellValue("Q{$row}", $detail?->catatan ?? "-");
|
$sheet->setCellValue("L{$row}", $item->total_harga);
|
||||||
|
if($detail?->masterMcu){
|
||||||
|
$sheet->setCellValue("M{$row}", 'Menu MCU');
|
||||||
|
}else{
|
||||||
|
$sheet->setCellValue("M{$row}", $detail?->menu?->apakah_someday ? "Menu Sameday" : "Menu Normal");
|
||||||
|
}
|
||||||
|
$sheet->setCellValue("N{$row}", $detail?->menu?->nama_menu ?? $detail?->masterMcu?->nama_mcu);
|
||||||
|
$sheet->setCellValue("O{$row}", $detail?->total_kalori ?? '-');
|
||||||
|
$sheet->setCellValue("P{$row}", $detail?->jumlah ?? '-');
|
||||||
|
$sheet->setCellValue("Q{$row}", $detail?->status_order ?? "-");
|
||||||
|
$sheet->setCellValue("R{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar");
|
||||||
|
$sheet->setCellValue("S{$row}", $detail?->type ?? $detail->jam_layanan);
|
||||||
|
$sheet->setCellValue("T{$row}", $detail?->catatan ?? "-");
|
||||||
// Border tiap baris
|
// Border tiap baris
|
||||||
$sheet->getStyle("A{$row}:Q{$row}")->getBorders()->getAllBorders()
|
$sheet->getStyle("A{$row}:T{$row}")->getBorders()->getAllBorders()
|
||||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
if($item->status_order === "Lunas"){
|
||||||
|
$totalPendapatan += $item?->total_harga;
|
||||||
|
}
|
||||||
$row++;
|
$row++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$sheet->getStyle("K{$row}:L{$row}")->getFont()->setBold(true);
|
||||||
|
$sheet->getStyle("K{$row}:L{$row}")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
$sheet->setCellValue("K{$row}", 'Total Pendapatan');
|
||||||
|
$sheet->setCellValue("L{$row}", $totalPendapatan);
|
||||||
// Auto size kolom
|
// Auto size kolom
|
||||||
foreach(range('A', 'Q') as $col){
|
foreach(range('A', 'T') as $col){
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||||
}
|
}
|
||||||
$lastRow = $row - 1;
|
$lastRow = $row - 1;
|
||||||
$sheet->setAutoFilter("A4:Q{$lastRow}");
|
$sheet->setAutoFilter("A4:T{$lastRow}");
|
||||||
// Download file
|
// Download file
|
||||||
$fileName = $title . now()->format('Ymd-His') . '.xlsx';
|
$fileName = $title . now()->format('Ymd-His') . '.xlsx';
|
||||||
$writer = new Xlsx($spreadsheet);
|
$writer = new Xlsx($spreadsheet);
|
||||||
@ -600,6 +700,7 @@ class PesananController extends Controller
|
|||||||
'total_detail' => $totalDetail,
|
'total_detail' => $totalDetail,
|
||||||
'selesai_detail' => $selesaiDetail,
|
'selesai_detail' => $selesaiDetail,
|
||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
|
'nama_institusi' => $first->nama_institusi,
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
->values();
|
->values();
|
||||||
@ -632,6 +733,7 @@ class PesananController extends Controller
|
|||||||
'o.note_dibatalkan',
|
'o.note_dibatalkan',
|
||||||
'o.medical_record',
|
'o.medical_record',
|
||||||
'o.evidence_medical_record',
|
'o.evidence_medical_record',
|
||||||
|
'o.nama_institusi',
|
||||||
'od.status_order as detail_status_order'
|
'od.status_order as detail_status_order'
|
||||||
)->get()->groupBy('order_id');
|
)->get()->groupBy('order_id');
|
||||||
return $data;
|
return $data;
|
||||||
@ -682,18 +784,18 @@ class PesananController extends Controller
|
|||||||
$sheet = $spreadsheet->getActiveSheet();
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
|
||||||
$sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
$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')->getFont()->setBold(true)->setSize(14);
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
||||||
|
|
||||||
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
||||||
$sheet->mergeCells('A2:P2');
|
$sheet->mergeCells('A2:S2');
|
||||||
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
||||||
|
|
||||||
// Header tabel
|
// 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", "Ruangan", "Jenis Kelamin", "NO.HP/WA", "Email" , "Jenis Pembayaran", "Tanggal Pesan", "Harga Total", "Jenis Menu", "Menu Pesanan", "Total Kalori (kal)", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"];
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
$sheet->fromArray($headers, null, 'A4');
|
||||||
$sheet->getStyle('A4:P4')->applyFromArray([
|
$sheet->getStyle('A4:S4')->applyFromArray([
|
||||||
'font' => ['bold' => true],
|
'font' => ['bold' => true],
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||||
'borders' => [
|
'borders' => [
|
||||||
@ -702,45 +804,63 @@ class PesananController extends Controller
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
$sheet->getStyle('A4:P4')->getFont()->setBold(true);
|
$sheet->getStyle('A4:S4')->getFont()->setBold(true);
|
||||||
$sheet->getStyle('A4:P4')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A4:S4')->getAlignment()->setHorizontal('center');
|
||||||
$sheet->getStyle('A4:P4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
$sheet->getStyle('A4:S4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
|
||||||
// Isi data
|
// Isi data
|
||||||
$row = 5;
|
$row = 5;
|
||||||
|
$totalPendapatan = 0;
|
||||||
foreach ($order as $index => $item) {
|
foreach ($order as $index => $item) {
|
||||||
foreach($item->orderDetail as $detail){
|
foreach($item->orderDetail as $detail){
|
||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
$sheet->setCellValue("A{$row}", $index + 1);
|
||||||
$sheet->setCellValue("B{$row}", $item->no_order);
|
$sheet->setCellValue("B{$row}", $item->no_order);
|
||||||
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
||||||
$sheet->setCellValue("D{$row}", $item->jenis_customer);
|
$sheet->setCellValue("D{$row}", $item->jenis_customer === "MCU" ? $item->nama_institusi . '-' . $item->jenis_customer : $item->jenis_customer);
|
||||||
$sheet->setCellValue("E{$row}", $item->jenis_kelamin);
|
if($item->jenis_customer === "Keluarga Pasien / Penunggu Pasien"){
|
||||||
$sheet->setCellValue("F{$row}", $item->no_wa);
|
$sheet->setCellValue("E{$row}", $item->kelas_perawatan . '/' . $item->no_kamar_perawatan . '/' . $item->ruang_perawatan);
|
||||||
$sheet->setCellValue("G{$row}", $item->email);
|
}else if($item->jenis_customer === "Karyawan RSAB Harapan Kita"){
|
||||||
$sheet->setCellValue("H{$row}", $item->cara_pembayaran);
|
$sheet->setCellValue("E{$row}", $item->bagian_instalasi ?? '-');
|
||||||
$sheet->setCellValue("I{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
}else{
|
||||||
$sheet->setCellValue("J{$row}", $item->total_harga);
|
$sheet->setCellValue("E{$row}", '-');
|
||||||
|
}
|
||||||
|
$sheet->setCellValue("F{$row}", $item->jenis_kelamin);
|
||||||
|
$sheet->setCellValue("G{$row}", $item->no_wa);
|
||||||
|
$sheet->setCellValue("H{$row}", $item->email);
|
||||||
|
$sheet->setCellValue("I{$row}", $item->cara_pembayaran);
|
||||||
|
$sheet->setCellValue("J{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
||||||
|
$sheet->setCellValue("K{$row}", $item->total_harga);
|
||||||
|
|
||||||
$sheet->setCellValue("K{$row}", $detail?->menu?->nama_menu ?? '-');
|
if($detail?->masterMcu){
|
||||||
$sheet->setCellValue("L{$row}", $detail?->jumlah ?? '-');
|
$sheet->setCellValue("L{$row}", 'Menu MCU');
|
||||||
$sheet->setCellValue("M{$row}", $detail?->status_order ?? "-");
|
}else{
|
||||||
$sheet->setCellValue("N{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar");
|
$sheet->setCellValue("L{$row}", $detail?->menu?->apakah_someday ? "Menu Sameday" : "Menu Normal");
|
||||||
$sheet->setCellValue("O{$row}", $detail?->type ?? "-");
|
}
|
||||||
$sheet->setCellValue("P{$row}", $detail?->catatan ?? "-");
|
$sheet->setCellValue("M{$row}", $detail?->menu?->nama_menu ?? $detail?->masterMcu?->nama_mcu);
|
||||||
|
$sheet->setCellValue("N{$row}", $detail?->total_kalori ?? '-');
|
||||||
|
$sheet->setCellValue("O{$row}", $detail?->jumlah ?? '-');
|
||||||
|
$sheet->setCellValue("P{$row}", $detail?->status_order ?? "-");
|
||||||
|
$sheet->setCellValue("Q{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "-");
|
||||||
|
$sheet->setCellValue("R{$row}", $detail?->type ?? $detail->jam_layanan);
|
||||||
|
$sheet->setCellValue("S{$row}", $detail?->catatan ?? "-");
|
||||||
// Border tiap baris
|
// Border tiap baris
|
||||||
$sheet->getStyle("A{$row}:P{$row}")->getBorders()->getAllBorders()
|
$sheet->getStyle("A{$row}:S{$row}")->getBorders()->getAllBorders()
|
||||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
$totalPendapatan += $item->total_harga;
|
||||||
$row++;
|
$row++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$sheet->getStyle("I{$row}:K{$row}")->getFont()->setBold(true);
|
||||||
|
$sheet->getStyle("I{$row}:K{$row}")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
$sheet->setCellValue("I{$row}", 'Total Pendapatan');
|
||||||
|
$sheet->setCellValue("K{$row}", $totalPendapatan);
|
||||||
|
// dd($totalPendapatan);
|
||||||
// Auto size kolom
|
// Auto size kolom
|
||||||
foreach(range('A', 'P') as $col){
|
foreach(range('A', 'S') as $col){
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||||
}
|
}
|
||||||
$lastRow = $row - 1;
|
$lastRow = $row - 1;
|
||||||
$sheet->setAutoFilter("A4:P{$lastRow}");
|
$sheet->setAutoFilter("A4:S{$lastRow}");
|
||||||
// Download file
|
// Download file
|
||||||
$fileName = 'laporan-pesanan-' . now()->format('Ymd-His') . '.xlsx';
|
$fileName = 'laporan-pesanan-' . now()->format('Ymd-His') . '.xlsx';
|
||||||
$writer = new Xlsx($spreadsheet);
|
$writer = new Xlsx($spreadsheet);
|
||||||
@ -847,7 +967,7 @@ class PesananController extends Controller
|
|||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
$sheet->setCellValue("A{$row}", $index + 1);
|
||||||
$sheet->setCellValue("B{$row}", $item->no_order);
|
$sheet->setCellValue("B{$row}", $item->no_order);
|
||||||
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
||||||
$sheet->setCellValue("D{$row}", $item->jenis_customer);
|
$sheet->setCellValue("D{$row}", $item->jenis_customer === "MCU" ? $item->nama_institusi . ' - ' . $item->jenis_customer : $item->jenis_customer);
|
||||||
$sheet->setCellValue("E{$row}", $item->cara_pembayaran);
|
$sheet->setCellValue("E{$row}", $item->cara_pembayaran);
|
||||||
$sheet->setCellValue("F{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
$sheet->setCellValue("F{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
||||||
$sheet->setCellValue("G{$row}", $item->total_harga);
|
$sheet->setCellValue("G{$row}", $item->total_harga);
|
||||||
@ -924,6 +1044,7 @@ class PesananController extends Controller
|
|||||||
'o.note_dibatalkan',
|
'o.note_dibatalkan',
|
||||||
'o.medical_record',
|
'o.medical_record',
|
||||||
'o.evidence_medical_record',
|
'o.evidence_medical_record',
|
||||||
|
'o.nama_institusi',
|
||||||
'od.status_order as detail_status_order'
|
'od.status_order as detail_status_order'
|
||||||
)->get()->groupBy('order_id');
|
)->get()->groupBy('order_id');
|
||||||
|
|
||||||
@ -948,6 +1069,7 @@ class PesananController extends Controller
|
|||||||
'total_detail' => $totalDetail,
|
'total_detail' => $totalDetail,
|
||||||
'selesai_detail' => $selesaiDetail,
|
'selesai_detail' => $selesaiDetail,
|
||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
|
'nama_institusi' => $first->nama_institusi,
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
->values();
|
->values();
|
||||||
@ -958,6 +1080,15 @@ class PesananController extends Controller
|
|||||||
'total' => $grouped->count()
|
'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.
|
* Show the form for creating a new resource.
|
||||||
*/
|
*/
|
||||||
|
|||||||
178
app/Http/Controllers/SurveyController.php
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Survey;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||||
|
|
||||||
|
class SurveyController extends Controller
|
||||||
|
{
|
||||||
|
public function index(Request $request){
|
||||||
|
if(!session()->has('payment_success')){
|
||||||
|
return redirect('/');
|
||||||
|
}
|
||||||
|
$no_order = $request->query('no_order');
|
||||||
|
$type = $request->query('type');
|
||||||
|
$data = [
|
||||||
|
'title' => 'Survey Gizi',
|
||||||
|
'mcu' => false,
|
||||||
|
'no_order' => $no_order,
|
||||||
|
'type' => $type
|
||||||
|
];
|
||||||
|
return view('guest.survey.index', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(){
|
||||||
|
DB::connection('dbOrderGizi')->beginTransaction();
|
||||||
|
try {
|
||||||
|
$payload =[
|
||||||
|
'no_order' => request('no_order'),
|
||||||
|
'type' => request('type'),
|
||||||
|
'keterangan' => request('kritik_saran'),
|
||||||
|
'kepuasan' => request('kepuasan'),
|
||||||
|
'created_at' => now()
|
||||||
|
];
|
||||||
|
Survey::create($payload);
|
||||||
|
DB::connection('dbOrderGizi')->commit();
|
||||||
|
session()->flash('payment_success', true);
|
||||||
|
session()->flash('no_order', $payload['no_order']);
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'message' => 'Survei berhasil disimpan'
|
||||||
|
]);
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
DB::connection('dbOrderGizi')->rollBack();
|
||||||
|
return response()->json([
|
||||||
|
'status' => false,
|
||||||
|
'message' => 'Data gagal disimpan ' . $th->getMessage()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function datatable(){
|
||||||
|
$data = Survey::query();
|
||||||
|
$tanggal = request('tanggal');
|
||||||
|
if(!empty($tanggal)){
|
||||||
|
$flattened = is_array($tanggal[0]) ? Arr::flatten($tanggal) : $tanggal;
|
||||||
|
$data->whereIn(DB::raw('DATE(created_at)'), $flattened);
|
||||||
|
}else{
|
||||||
|
$now = Carbon::now()->format('Y-m-d');
|
||||||
|
$data->whereDate('created_at', $now);
|
||||||
|
}
|
||||||
|
$data = $data->get();
|
||||||
|
return response()->json([
|
||||||
|
'rows' => $data->values(),
|
||||||
|
'total' => $data->count(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function chartDataSurvey(Request $request)
|
||||||
|
{
|
||||||
|
$tanggal = $request->query('tanggal');
|
||||||
|
if(is_string($tanggal)) $tanggal = json_decode($tanggal, true);
|
||||||
|
|
||||||
|
$query = Survey::query();
|
||||||
|
if (!empty($tanggal) && is_array($tanggal)) {
|
||||||
|
$query->whereIn(DB::raw('DATE(created_at)'), $tanggal);
|
||||||
|
} else {
|
||||||
|
$query->whereDate('created_at', Carbon::today());
|
||||||
|
}
|
||||||
|
|
||||||
|
$allData = $query->get();
|
||||||
|
|
||||||
|
// Pisahkan data untuk perhitungan Card
|
||||||
|
$dataBaru = $allData->where('type', 'pengguna_baru');
|
||||||
|
$dataLama = $allData->where('type', 'pelanggan_setia');
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'responden' => [
|
||||||
|
'baru' => $dataBaru->count(),
|
||||||
|
'lama' => $dataLama->count(),
|
||||||
|
],
|
||||||
|
'kepuasan_baru' => [
|
||||||
|
'total' => $dataBaru->count(),
|
||||||
|
'puas' => $dataBaru->where('kepuasan', 'Puas')->count(),
|
||||||
|
'tidak_puas' => $dataBaru->where('kepuasan', 'Tidak Puas')->count(),
|
||||||
|
],
|
||||||
|
'kepuasan_lama' => [
|
||||||
|
'total' => $dataLama->count(),
|
||||||
|
'puas' => $dataLama->where('kepuasan', 'Puas')->count(),
|
||||||
|
'tidak_puas' => $dataLama->where('kepuasan', 'Tidak Puas')->count(),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function dashboardSurvey(){
|
||||||
|
$data = [
|
||||||
|
'title' => 'List Survey Order Gizi'
|
||||||
|
];
|
||||||
|
return view('dashboard.survey.index', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function exportSurveyExcel(){
|
||||||
|
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
||||||
|
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
||||||
|
$data = Survey::whereBetween('created_at', [$startDate, $endDate])->get();
|
||||||
|
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$sheet->setCellValue('A1', "Laporan Survei dari {$startDate->format('Y-m-d')} sampai {$endDate->format('Y-m-d')}");
|
||||||
|
$sheet->mergeCells('A1:E1');
|
||||||
|
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
||||||
|
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
||||||
|
|
||||||
|
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
||||||
|
$sheet->mergeCells('A2:E2');
|
||||||
|
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
||||||
|
|
||||||
|
// Header tabel
|
||||||
|
$headers = ["No", "Nama", "Tipe Survei", "Kepuasan", "Kritik dan Saran"];
|
||||||
|
$sheet->fromArray($headers, null, 'A4');
|
||||||
|
$sheet->getStyle('A4:E4')->applyFromArray([
|
||||||
|
'font' => ['bold' => true],
|
||||||
|
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||||
|
'borders' => [
|
||||||
|
'allBorders' => [
|
||||||
|
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
$sheet->getStyle('A4:E4')->getFont()->setBold(true);
|
||||||
|
$sheet->getStyle('A4:E4')->getAlignment()->setHorizontal('center');
|
||||||
|
$sheet->getStyle('A4:E4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
// Isi data
|
||||||
|
$row = 5;
|
||||||
|
foreach ($data as $index => $item) {
|
||||||
|
$sheet->setCellValue("A{$row}", $index + 1);
|
||||||
|
$sheet->setCellValue("B{$row}", $item->order->nama_pemesan);
|
||||||
|
$sheet->setCellValue("C{$row}", $item->type === "pelanggan_setia" ? "Pelanggan Setia" : "Pengguna Baru");
|
||||||
|
$sheet->setCellValue("D{$row}", $item->kepuasan);
|
||||||
|
$sheet->setCellValue("E{$row}", $item->keterangan);
|
||||||
|
$row++;
|
||||||
|
}
|
||||||
|
// Auto size kolom
|
||||||
|
foreach(range('A', 'E') as $col){
|
||||||
|
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||||
|
}
|
||||||
|
$lastRow = $row - 1;
|
||||||
|
$sheet->setAutoFilter("A4:E{$lastRow}");
|
||||||
|
// Download file
|
||||||
|
$fileName = "Laporan Survei {$startDate->format('Y-m-d')} sampai {$endDate->format('Y-m-d')} ". '.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
16
app/Models/Karyawan.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Karyawan extends Model
|
||||||
|
{
|
||||||
|
protected $connection = 'dbKaryawan';
|
||||||
|
protected $table = 'public.pegawai_m';
|
||||||
|
public $timestamps = false;
|
||||||
|
protected $primaryKey = "id";
|
||||||
|
protected $guarded =[
|
||||||
|
'id'
|
||||||
|
];
|
||||||
|
}
|
||||||
@ -38,7 +38,9 @@ class Order extends Model
|
|||||||
'email',
|
'email',
|
||||||
'alamat',
|
'alamat',
|
||||||
'medical_record',
|
'medical_record',
|
||||||
'evidence_medical_record'
|
'evidence_medical_record',
|
||||||
|
'nama_institusi',
|
||||||
|
'nip'
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $cast = [
|
protected $cast = [
|
||||||
@ -47,6 +49,6 @@ class Order extends Model
|
|||||||
];
|
];
|
||||||
|
|
||||||
public function orderDetail(){
|
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',
|
'modified_at',
|
||||||
'statusenabled',
|
'statusenabled',
|
||||||
'master_menu_id',
|
'master_menu_id',
|
||||||
'paket_mcu_id',
|
'menu_mcu_id',
|
||||||
'harga_satuan',
|
'harga_satuan',
|
||||||
'jumlah',
|
'jumlah',
|
||||||
'tgl_antar',
|
'tgl_antar',
|
||||||
@ -24,13 +24,14 @@ class OrderDetail extends Model
|
|||||||
'status_order',
|
'status_order',
|
||||||
'karbohidrat_id',
|
'karbohidrat_id',
|
||||||
'catatan',
|
'catatan',
|
||||||
'jam_layanan'
|
'jam_layanan',
|
||||||
|
'total_kalori'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function menu(){
|
public function menu(){
|
||||||
return $this->belongsTo(Menu::class, 'master_menu_id', 'master_menu_id')->select('master_menu_id', 'nama_menu', 'foto');
|
return $this->belongsTo(Menu::class, 'master_menu_id', 'master_menu_id')->select('master_menu_id', 'nama_menu', 'foto', 'apakah_someday', 'apakah_mcu');
|
||||||
}
|
}
|
||||||
public function karbohidrat(){
|
public function karbohidrat(){
|
||||||
return $this->belongsTo(Karbohidrat::class, 'karbohidrat_id', 'karbohidrat_id')->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori');
|
return $this->belongsTo(Karbohidrat::class, 'karbohidrat_id', 'karbohidrat_id')->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori');
|
||||||
@ -38,4 +39,7 @@ class OrderDetail extends Model
|
|||||||
public function order(){
|
public function order(){
|
||||||
return $this->belongsTo(Order::class, 'order_id', 'order_id');
|
return $this->belongsTo(Order::class, 'order_id', 'order_id');
|
||||||
}
|
}
|
||||||
|
public function masterMcu(){
|
||||||
|
return $this->belongsTo(MasterMcu::class, 'menu_mcu_id', 'menu_mcu_id');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
25
app/Models/Survey.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Survey extends Model
|
||||||
|
{
|
||||||
|
protected $connection = 'dbOrderGizi';
|
||||||
|
protected $table = 'public.survey';
|
||||||
|
public $timestamps = false;
|
||||||
|
protected $primaryKey = "id";
|
||||||
|
protected $with = ['order'];
|
||||||
|
protected $fillable =[
|
||||||
|
'no_order',
|
||||||
|
'type',
|
||||||
|
'keterangan',
|
||||||
|
'kepuasan',
|
||||||
|
'created_at'
|
||||||
|
];
|
||||||
|
|
||||||
|
public function order(){
|
||||||
|
return $this->belongsTo(Order::class, 'no_order', 'no_order')->select('no_order', 'nama_pemesan');
|
||||||
|
}
|
||||||
|
}
|
||||||
16
app/Models/UnitInstalasi.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class UnitInstalasi extends Model
|
||||||
|
{
|
||||||
|
protected $connection = 'dbKaryawan';
|
||||||
|
protected $table = 'public.unitkerjapegawai_m';
|
||||||
|
public $timestamps = false;
|
||||||
|
protected $primaryKey = "id";
|
||||||
|
protected $guarded =[
|
||||||
|
'id'
|
||||||
|
];
|
||||||
|
}
|
||||||
@ -3,6 +3,7 @@
|
|||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Blade;
|
use Illuminate\Support\Facades\Blade;
|
||||||
|
use Illuminate\Support\Facades\URL;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
@ -22,5 +23,8 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
{
|
{
|
||||||
Blade::component('dashboard.pesanan.components.modalExport', 'modalExport');
|
Blade::component('dashboard.pesanan.components.modalExport', 'modalExport');
|
||||||
Blade::component('dashboard.pesanan.components.infoPesanan', 'infoPesanan');
|
Blade::component('dashboard.pesanan.components.infoPesanan', 'infoPesanan');
|
||||||
|
if ($this->app->environment('production')) {
|
||||||
|
URL::forceScheme('https');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": "^8.2",
|
"php": "^8.2",
|
||||||
"barryvdh/laravel-dompdf": "^3.1",
|
"barryvdh/laravel-dompdf": "^3.1",
|
||||||
|
"barryvdh/laravel-snappy": "^1.0",
|
||||||
"laravel/framework": "^12.0",
|
"laravel/framework": "^12.0",
|
||||||
"laravel/tinker": "^2.10.1",
|
"laravel/tinker": "^2.10.1",
|
||||||
"phpoffice/phpspreadsheet": "^4.5"
|
"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",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "696ae0d1187bc1634529f1760a11ffd0",
|
"content-hash": "9d83b6a45b530b893999cf984c08fde5",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "barryvdh/laravel-dompdf",
|
"name": "barryvdh/laravel-dompdf",
|
||||||
@ -83,6 +83,84 @@
|
|||||||
],
|
],
|
||||||
"time": "2025-02-13T15:07:54+00:00"
|
"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",
|
"name": "brick/math",
|
||||||
"version": "0.13.1",
|
"version": "0.13.1",
|
||||||
@ -1365,6 +1443,73 @@
|
|||||||
],
|
],
|
||||||
"time": "2025-02-03T10:55:03+00:00"
|
"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",
|
"name": "laravel/framework",
|
||||||
"version": "v12.20.0",
|
"version": "v12.20.0",
|
||||||
|
|||||||
@ -16,7 +16,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'default' => env('DB_CONNECTION', 'sqlite'),
|
'default' => env('DB_CONNECTION', 'pgsql'),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -152,6 +152,28 @@ return [
|
|||||||
'timezone' => env('APP_TIMEZONE', 'utc' ),
|
'timezone' => env('APP_TIMEZONE', 'utc' ),
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'dbKaryawan' => [
|
||||||
|
'driver' => 'pgsql',
|
||||||
|
'url' => env('DB_URL'),
|
||||||
|
'host' => env('DB_HOST_KARYAWAN', '127.0.0.1'),
|
||||||
|
'port' => env('DB_PORT_KARYAWAN', '3306'),
|
||||||
|
'database' => env('DB_DATABASE_KARYAWAN', 'laravel'),
|
||||||
|
'username' => env('DB_USERNAME_KARYAWAN', 'root'),
|
||||||
|
'password' => env('DB_PASSWORD_KARYAWAN', ''),
|
||||||
|
'charset' => env('DB_CHARSET', 'utf8'),
|
||||||
|
'prefix' => '',
|
||||||
|
'prefix_indexes' => true,
|
||||||
|
'search_path' => 'public',
|
||||||
|
'sslmode' => 'prefer',
|
||||||
|
'prefix' => '',
|
||||||
|
'prefix_indexes' => true,
|
||||||
|
'search_path' => 'public',
|
||||||
|
'sslmode' => 'prefer',
|
||||||
|
'timezone' => env('APP_TIMEZONE', 'utc' ),
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
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' => [],
|
||||||
|
],
|
||||||
|
|
||||||
|
];
|
||||||
18
env_prod
@ -1,9 +1,9 @@
|
|||||||
APP_NAME=Laravel
|
APP_NAME=Laravel
|
||||||
APP_ENV=local
|
APP_ENV=production
|
||||||
APP_KEY=base64:R54Pgs6qwWsP6eKZGCcHNd7rrsSSU0DsWSbFHwaT4Bc=
|
APP_KEY=base64:R54Pgs6qwWsP6eKZGCcHNd7rrsSSU0DsWSbFHwaT4Bc=
|
||||||
APP_DEBUG=true
|
APP_DEBUG=true
|
||||||
APP_URL=http://127.0.0.1:8000/
|
APP_URL=http://127.0.0.1:8000/
|
||||||
APP_TIMEZONE =Asia/Jakarta
|
APP_TIMEZONE=Asia/Jakarta
|
||||||
APP_LOCALE=en
|
APP_LOCALE=en
|
||||||
APP_FALLBACK_LOCALE=en
|
APP_FALLBACK_LOCALE=en
|
||||||
APP_FAKER_LOCALE=en_US
|
APP_FAKER_LOCALE=en_US
|
||||||
@ -23,16 +23,16 @@ LOG_LEVEL=debug
|
|||||||
DB_CONNECTION_ORDER_GIZI= pgsql
|
DB_CONNECTION_ORDER_GIZI= pgsql
|
||||||
DB_HOST_ORDER_GIZI = 172.16.88.22
|
DB_HOST_ORDER_GIZI = 172.16.88.22
|
||||||
DB_PORT_ORDER_GIZI = 5432
|
DB_PORT_ORDER_GIZI = 5432
|
||||||
DB_DATABASE_ORDER_GIZI = order_gizi
|
DB_DATABASE_ORDER_GIZI = lms_mutu
|
||||||
DB_USERNAME_ORDER_GIZI = simrs
|
DB_USERNAME_ORDER_GIZI = simrs
|
||||||
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
||||||
|
|
||||||
DB_CONNECTION_ORDER_GIZI= pgsql
|
DB_CONNECTION_AUTH_KARYAWAN = pgsql
|
||||||
DB_HOST_ORDER_GIZI = 172.16.88.22
|
DB_HOST_KARYAWAN = psql1.rsabhk.lan
|
||||||
DB_PORT_ORDER_GIZI = 5432
|
DB_PORT_KARYAWAN = 5432
|
||||||
DB_DATABASE_ORDER_GIZI = order_gizi
|
DB_DATABASE_KARYAWAN = rsab_hk_production
|
||||||
DB_USERNAME_ORDER_GIZI = simrs
|
DB_USERNAME_KARYAWAN = postgres
|
||||||
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
DB_PASSWORD_KARYAWAN = postgres
|
||||||
|
|
||||||
DB_CONNECTION_AUTH_DEV = pgsql
|
DB_CONNECTION_AUTH_DEV = pgsql
|
||||||
DB_HOST_AUTH_DEV = 172.16.88.22
|
DB_HOST_AUTH_DEV = 172.16.88.22
|
||||||
|
|||||||
@ -305,7 +305,7 @@ h6 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.header .logo img {
|
.header .logo img {
|
||||||
max-height: 36px;
|
max-height: 60px;
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,6 +347,10 @@ h6 {
|
|||||||
.header .navmenu {
|
.header .navmenu {
|
||||||
order: 3;
|
order: 3;
|
||||||
}
|
}
|
||||||
|
.header .logo img {
|
||||||
|
max-height: 35px;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.scrolled .header {
|
.scrolled .header {
|
||||||
|
|||||||
@ -1,3 +1,6 @@
|
|||||||
function checkOrderHref(){
|
function checkOrderHref(){
|
||||||
window.location.href = '/check-order'
|
window.location.href = '/check-order'
|
||||||
}
|
}
|
||||||
|
function mcu(){
|
||||||
|
window.location.href = '/order-mcu'
|
||||||
|
}
|
||||||
|
|||||||
BIN
public/assets/img/avatars/8.jpg
Normal file
|
After Width: | Height: | Size: 258 KiB |
BIN
public/cara_pesan/order_karyawan.png
Normal file
|
After Width: | Height: | Size: 430 KiB |
BIN
public/cara_pesan/order_keluarga_pasien.png
Normal file
|
After Width: | Height: | Size: 419 KiB |
BIN
public/cara_pesan/order_masyarakat_umum.png
Normal file
|
After Width: | Height: | Size: 421 KiB |
BIN
public/gambar/1NLtrcy20GE5m8e.jpg
Normal file
|
After Width: | Height: | Size: 154 KiB |
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/CXtFH1srSvubaRK.jpg
Normal file
|
After Width: | Height: | Size: 132 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/GaQjbwEteuivk8G.jpg
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
public/gambar/Lh5maoUqSTSHPpk.jpg
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
public/gambar/MIBkGAo6Wsv5U8J.jpg
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
public/gambar/MonkDUcZnb2adsT.jpg
Normal file
|
After Width: | Height: | Size: 149 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/S1D5M5yyMNxmKWO.jpg
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
public/gambar/T3ykjc5sLJCJ3ys.jpg
Normal file
|
After Width: | Height: | Size: 146 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/bt6RNaVgLohDg74.jpg
Normal file
|
After Width: | Height: | Size: 131 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/cs79vVJJbFkAV1C.jpg
Normal file
|
After Width: | Height: | Size: 129 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/default.png
Normal file
|
After Width: | Height: | Size: 466 KiB |
BIN
public/gambar/iJCWE840NZ8CPrD.jpg
Normal file
|
After Width: | Height: | Size: 175 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 |
@ -1,8 +1,7 @@
|
|||||||
|
|
||||||
async function submitOrderToServer(){
|
async function submitOrderToServer(){
|
||||||
const totalHarga = hitungTotalHarga();
|
const totalHarga = hitungTotalHarga();
|
||||||
|
|
||||||
if (sessionStorage.getItem('order_id')) {
|
if (sessionStorage.getItem('order_id')) {
|
||||||
currentStep = 2;
|
currentStep = 2;
|
||||||
showStep(currentStep);
|
showStep(currentStep);
|
||||||
return;
|
return;
|
||||||
@ -33,7 +32,12 @@ async function submitOrderToServer(){
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('message '+error);
|
console.error('message '+error);
|
||||||
alert('Terdapat kesalahan coba lagi nanti!')
|
Swal.fire({
|
||||||
|
title: 'Gagal!',
|
||||||
|
text: 'Terdapat kesalahan coba lagi nanti!',
|
||||||
|
icon: 'error',
|
||||||
|
confirmButtonText: 'Tutup!'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,6 +69,11 @@ async function submitOrderToServer(){
|
|||||||
|
|
||||||
$("#checkoutFormFinal").on('submit', async function(e){
|
$("#checkoutFormFinal").on('submit', async function(e){
|
||||||
e.preventDefault()
|
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 cara_pembayaran = document.getElementById('cara_pembayaran').value;
|
||||||
const bukti_pembayaran = document.querySelector('input[name="bukti_pembayaran"]').value;
|
const bukti_pembayaran = document.querySelector('input[name="bukti_pembayaran"]').value;
|
||||||
|
|
||||||
@ -74,6 +83,7 @@ async function submitOrderToServer(){
|
|||||||
text: 'Silahkan upload bukti pembayaran jika metode yang dipakai transfer.',
|
text: 'Silahkan upload bukti pembayaran jika metode yang dipakai transfer.',
|
||||||
icon: 'warning',
|
icon: 'warning',
|
||||||
})
|
})
|
||||||
|
buttonSubmit.prop('disabled', false).html('Selesaikan Pesanan');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,6 +91,12 @@ async function submitOrderToServer(){
|
|||||||
const form = this;
|
const form = this;
|
||||||
|
|
||||||
const formData = new FormData(form);
|
const formData = new FormData(form);
|
||||||
|
const clearSession = () => {
|
||||||
|
sessionStorage.removeItem('cart');
|
||||||
|
sessionStorage.removeItem('checkout_biodata');
|
||||||
|
sessionStorage.removeItem('order_id');
|
||||||
|
sessionStorage.removeItem('time_order');
|
||||||
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/finish-checkout', {
|
const response = await fetch('/finish-checkout', {
|
||||||
@ -92,29 +108,41 @@ async function submitOrderToServer(){
|
|||||||
});
|
});
|
||||||
|
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
|
|
||||||
if (result.status) {
|
if (result.status) {
|
||||||
// ✅ Hapus sessionStorage di client
|
// ✅ Hapus sessionStorage di client
|
||||||
sessionStorage.removeItem('cart');
|
clearSession()
|
||||||
sessionStorage.removeItem('checkout_biodata');
|
|
||||||
sessionStorage.removeItem('order_id');
|
|
||||||
sessionStorage.removeItem('time_order');
|
|
||||||
|
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Pesanan Berhasil!',
|
title: '<span style="color: #00796b;">Pesanan Berhasil!</span>',
|
||||||
text: 'Terima kasih, pesanan Anda sedang kami siapkan.',
|
|
||||||
icon: 'success',
|
icon: 'success',
|
||||||
confirmButtonText: 'Berhasil!',
|
iconColor: '#2e7d32', // Warna hijau Kemenkes
|
||||||
confirmButtonColor: '#28a745'
|
html: `
|
||||||
}).then(() => {
|
<p class="text-muted mb-4">Terima kasih, pesanan Anda sedang kami siapkan.</p>
|
||||||
window.location.href = "/success-page"; // kehalaman success
|
<div class="p-3 border-0 rounded-4 shadow-sm mb-3" style="background-color: #f1f8f7;">
|
||||||
});
|
<p class="small fw-bold mb-3 text-uppercase" style="color: #004d40; letter-spacing: 1px;">Bantu Kami Meningkatkan Layanan:</p>
|
||||||
|
|
||||||
|
<button type="button" onclick="location.href='/survey?no_order=${result.no_order}&type=pengguna_baru'"
|
||||||
|
class="btn w-100 mb-3 py-3 border-0 shadow-sm transition-hover"
|
||||||
|
style="background-color: #00a99d; color: white; border-radius: 12px;">
|
||||||
|
<div class="fw-bold px-2">Saya Pengguna Baru</div>
|
||||||
|
<div style="font-size: 0.75rem; opacity: 0.9;">Survei kemudahan aplikasi pemesanan</div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button type="button" onclick="location.href='/survey?no_order=${result.no_order}&type=pelanggan_setia'"
|
||||||
|
class="btn w-100 py-3 border-0 shadow-sm transition-hover"
|
||||||
|
style="background-color: #005eb8; color: white; border-radius: 12px;">
|
||||||
|
<div class="fw-bold px-2">Saya Pelanggan Setia</div>
|
||||||
|
<div style="font-size: 0.75rem; opacity: 0.9;">Survei rasa, variasi, dan penampilan menu</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
showConfirmButton: false,
|
||||||
|
showCancelButton: false,
|
||||||
|
allowOutsideClick: false,
|
||||||
|
allowEscapeKey: false
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
sessionStorage.removeItem('cart');
|
clearSession()
|
||||||
sessionStorage.removeItem('checkout_biodata');
|
Swal.fire({
|
||||||
sessionStorage.removeItem('order_id');
|
|
||||||
sessionStorage.removeItem('time_order');
|
|
||||||
Swal.fire({
|
|
||||||
title: 'Gagal!',
|
title: 'Gagal!',
|
||||||
text: result.message,
|
text: result.message,
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
@ -124,11 +152,14 @@ async function submitOrderToServer(){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
sessionStorage.removeItem('cart');
|
clearSession()
|
||||||
sessionStorage.removeItem('checkout_biodata');
|
Swal.fire({
|
||||||
sessionStorage.removeItem('order_id');
|
title: 'Gagal!',
|
||||||
sessionStorage.removeItem('time_order');
|
text: "Terjadi kesalahan saat mengirim data.",
|
||||||
console.error(err);
|
icon: 'error',
|
||||||
alert("Terjadi kesalahan saat mengirim data.");
|
confirmButtonText: 'Tutup!'
|
||||||
|
})
|
||||||
|
}finally{
|
||||||
|
buttonSubmit.prop('disabled', false).html('Selesaikan Pesanan');
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -10,13 +10,15 @@ function fetchDetailOrder(order_id){
|
|||||||
<div class="col-md-12 mb-3">
|
<div class="col-md-12 mb-3">
|
||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="row g-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;">
|
<img src="/gambar/${detail?.menu?.foto || 'default.jpg'}" alt="Foto Menu" class="img-fluid rounded shadow" style="max-height: 250px; width: auto;">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5 p-2">
|
<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 || '-'}</strong></p>
|
<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">Jumlah: <span>${detail?.jumlah || 0}</span></p>
|
||||||
<p class="mb-1">Tanggal Pesan: <span>${detail?.tgl_antar || 0}</span></p>
|
${detail?.total_kalori ? `<p class="mb-1">Total Kalori: <span>${detail?.total_kalori } kal</span></p>` : ''}
|
||||||
|
|
||||||
|
<p class="mb-1">Tanggal Antar: <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">Harga: <strong>Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||||
<p class="mb-1">Status Pesanan:
|
<p class="mb-1">Status Pesanan:
|
||||||
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
|
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
|
||||||
@ -24,7 +26,7 @@ function fetchDetailOrder(order_id){
|
|||||||
${detail?.status_order}
|
${detail?.status_order}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
@ -69,12 +71,12 @@ function fetchDetailOrder(order_id){
|
|||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<p class="mb-1">Alamat: <strong>${data.alamat || '-'}</strong></p>
|
<p class="mb-1">Alamat: <strong>${data.alamat || '-'}</strong></p>
|
||||||
</div>
|
</div>
|
||||||
` : `
|
` : data?.jenis_customer === 'Karyawan RSAB Harapan Kita' ?`
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<p class="mb-1">Bagian / Instalasi: <strong>${data.bagian_instalasi}</strong></p>
|
<p class="mb-1">Bagian / Instalasi: <strong>${data.bagian_instalasi}</strong></p>
|
||||||
<p class="mb-1">Ekstensien: <strong>${data.no_ekstensien || '-'}</strong></p>
|
<p class="mb-1">Ekstensien: <strong>${data.no_ekstensien || '-'}</strong></p>
|
||||||
</div>
|
</div>
|
||||||
`
|
` : ''
|
||||||
}
|
}
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
|||||||
@ -161,7 +161,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Kategori Customer",
|
title: "Kategori Customer",
|
||||||
field: 'jenis_customer',
|
formatter: function(value, row){
|
||||||
|
|
||||||
|
return row?.nama_institusi ? row?.nama_institusi + ' (MCU)': row?.jenis_customer;
|
||||||
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -222,8 +222,9 @@ document.getElementById('formMasterMenu').addEventListener('submit', function(e)
|
|||||||
const allFormSetsBeforSubmit = document.querySelectorAll('.form-set');
|
const allFormSetsBeforSubmit = document.querySelectorAll('.form-set');
|
||||||
|
|
||||||
for (let i = 0; i < allFormSetsBeforSubmit.length; i++) {
|
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) {
|
if (!checkSiang?.checked && !checkSore?.checked) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@ -91,7 +91,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title:"Nama Menu",
|
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
|
width: 300
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -94,18 +94,6 @@ let orderIndex = 0;
|
|||||||
$('#cartTotal').text('Rp ' + total.toLocaleString('id-ID'));
|
$('#cartTotal').text('Rp ' + total.toLocaleString('id-ID'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function renderCartTotalOnly() {
|
function renderCartTotalOnly() {
|
||||||
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||||
let total = 0;
|
let total = 0;
|
||||||
|
|||||||
@ -9,24 +9,34 @@ $(document).ready(function(){
|
|||||||
|
|
||||||
fetchMenu(filterState)
|
fetchMenu(filterState)
|
||||||
|
|
||||||
$('#tabJenisMenu .nav-link').on('click', function(e){
|
$('#tabJenisMenu .btn').on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const jenis = $(this).data('filter')
|
const jenis = $(this).data('filter');
|
||||||
$('#tabJenisMenu .nav-link').removeClass('active text-success').addClass('text-black');
|
|
||||||
|
|
||||||
$(this).closest('.nav-link').removeClass('text-black').addClass('active text-success');
|
// reset semua button jadi outline-success
|
||||||
|
$('#tabJenisMenu .btn')
|
||||||
|
.removeClass('btn-success active')
|
||||||
|
.addClass('btn-outline-success');
|
||||||
|
|
||||||
|
// set button yang dipilih jadi active
|
||||||
|
$(this)
|
||||||
|
.removeClass('btn-outline-success')
|
||||||
|
.addClass('btn-success active');
|
||||||
|
|
||||||
|
// reset datepicker & label
|
||||||
datePicker.clear();
|
datePicker.clear();
|
||||||
document.getElementById('tanggalTerpilihLabel').classList.add('d-none'); // Sembunyikan label
|
$('#tanggalTerpilihLabel').addClass('d-none').text('');
|
||||||
document.getElementById('tanggalTerpilihLabel').textContent = '';
|
$('#resetTanggal').addClass('d-none');
|
||||||
document.getElementById('resetTanggal').classList.add('d-none');
|
|
||||||
filterState.jenis_menu = jenis
|
// set filter state
|
||||||
fetchMenu(filterState)
|
filterState.jenis_menu = jenis;
|
||||||
})
|
fetchMenu(filterState);
|
||||||
|
});
|
||||||
|
|
||||||
$(".alert-link").on('click', function(e){
|
$(".alert-link").on('click', function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$('#tabJenisMenu .nav-link').removeClass('active text-success').addClass('text-black');
|
$('#tabJenisMenu .btn').removeClass('btn-success active').addClass('btn-outline-success');
|
||||||
$('#tabJenisMenu .nav-link[data-filter="konsultasi" ]').removeClass('text-black').addClass('active text-success');
|
$('#tabJenisMenu .btn[data-filter="konsultasi" ]').removeClass('btn-outline-success').addClass('btn-success active');
|
||||||
|
|
||||||
if (typeof datePicker !== 'undefined') {
|
if (typeof datePicker !== 'undefined') {
|
||||||
datePicker.clear();
|
datePicker.clear();
|
||||||
@ -51,6 +61,8 @@ $(document).ready(function(){
|
|||||||
fetchMenu(filterState)
|
fetchMenu(filterState)
|
||||||
}, 300)
|
}, 300)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
function changePerPage(select) {
|
function changePerPage(select) {
|
||||||
|
|||||||
@ -3,14 +3,152 @@
|
|||||||
if (cart.length > 0) {
|
if (cart.length > 0) {
|
||||||
$('#floatingCartButton').removeClass('d-none');
|
$('#floatingCartButton').removeClass('d-none');
|
||||||
$('#menuBtn').removeClass('d-none');
|
$('#menuBtn').removeClass('d-none');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function openImageModal(imageSrc, title) {
|
||||||
|
document.getElementById('modalImage').src = imageSrc;
|
||||||
|
document.getElementById('imageModalLabel').textContent = title;
|
||||||
|
$('#imageModal').modal('show');
|
||||||
|
}
|
||||||
|
|
||||||
function fetchMenu(filter = {}) {
|
function fetchMenu(filter = {}) {
|
||||||
const containerGuest = $("#order_guest_id");
|
const containerGuest = $("#order_guest_id");
|
||||||
$("#tanggal-filter").removeClass('d-none');
|
$("#tanggal-filter").removeClass('d-none');
|
||||||
|
if (filter.jenis_menu === "cara_pesan") {
|
||||||
|
$("#tanggal-filter").addClass('d-none');
|
||||||
|
const cara_pesan = [
|
||||||
|
{
|
||||||
|
type: "Karyawan RSAB Harapan Kita",
|
||||||
|
gambar: "/cara_pesan/order_karyawan.png",
|
||||||
|
color: "success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "Keluarga Pasien / Penunggu Pasien",
|
||||||
|
gambar: "/cara_pesan/order_keluarga_pasien.png",
|
||||||
|
color: "success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "Masyarakat Umum",
|
||||||
|
gambar: "/cara_pesan/order_masyarakat_umum.png",
|
||||||
|
color: "success"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
let html = `
|
||||||
|
<div class="container py-2">
|
||||||
|
<div class="text-center mb-3">
|
||||||
|
<h2 class="fw-bold text-gradient bg-gradient-primary">Cara Pemesanan</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row g-4 justify-content-center">
|
||||||
|
`;
|
||||||
|
|
||||||
|
cara_pesan.forEach((cara, index) => {
|
||||||
|
html += `
|
||||||
|
<div class="col-lg-4 col-md-6">
|
||||||
|
<div class="card border-0 shadow-lg hover-lift transition-all-3">
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<div class="mb-2">
|
||||||
|
<div class="avatar avatar-xxl mx-auto">
|
||||||
|
<a href="${cara.gambar}"
|
||||||
|
class="glightbox"
|
||||||
|
data-gallery="cara-pesan"
|
||||||
|
data-title="${cara.type}"
|
||||||
|
data-description="Panduan pemesanan ${cara.type}">
|
||||||
|
<img src="${cara.gambar}"
|
||||||
|
alt="${cara.type}"
|
||||||
|
class="img-fluid border rounded-3 border-3 border-${cara.color} shadow-sm image-zoom"
|
||||||
|
style="width: 120px; height: 120px; object-fit: cover; cursor: pointer;">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h5 class="fw-bold text-${cara.color}">${cara.type}</h5>
|
||||||
|
<small class="text-muted d-block">Panduan pemesanan</small>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer bg-white border-0 text-center mb-1">
|
||||||
|
<a href="${cara.gambar}"
|
||||||
|
class="btn btn-${cara.color} btn-rounded fw-semibold glightbox"
|
||||||
|
data-gallery="cara-pesan"
|
||||||
|
data-title="${cara.type}"
|
||||||
|
data-description="Panduan pemesanan ${cara.type}">
|
||||||
|
<i class="fas fa-eye me-2"></i>Lihat Panduan
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
html += `
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Modal Image Viewer -->
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.text-gradient {
|
||||||
|
background: linear-gradient(45deg, #667eea 0%, #764ba2 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-lift {
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover-lift:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
box-shadow: 0 1rem 3rem rgba(0,0,0,0.175) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.transition-all-3 {
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-rounded {
|
||||||
|
border-radius: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Image hover effect */
|
||||||
|
.image-zoom {
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-zoom:hover {
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Modal backdrop styling */
|
||||||
|
.modal-backdrop {
|
||||||
|
background-color: rgba(0, 0, 0, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal.fade .modal-dialog {
|
||||||
|
transition: transform 0.3s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal.show .modal-dialog {
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
`;
|
||||||
|
containerGuest.html(html);
|
||||||
|
|
||||||
|
GLightbox({
|
||||||
|
selector: '.glightbox',
|
||||||
|
touchNavigation: true,
|
||||||
|
loop: true,
|
||||||
|
zoomable: true,
|
||||||
|
autoplayVideos: true
|
||||||
|
});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
let params = new URLSearchParams({
|
let params = new URLSearchParams({
|
||||||
page: filter.page || 1,
|
page: filter.page || 1,
|
||||||
@ -40,12 +178,11 @@
|
|||||||
if(filter.jenis_menu === "konsultasi"){
|
if(filter.jenis_menu === "konsultasi"){
|
||||||
|
|
||||||
const jk = res.data|| [];
|
const jk = res.data|| [];
|
||||||
console.log(jk);
|
|
||||||
|
|
||||||
$("#tanggal-filter").addClass('d-none');
|
$("#tanggal-filter").addClass('d-none');
|
||||||
let html = `
|
let html = `
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h4 class="mb-4 fw-bold text-primary">
|
<h4 class="mb-4 fw-bold text-gradient">
|
||||||
<i class="fas fa-calendar-alt me-2"></i>
|
<i class="fas fa-calendar-alt me-2"></i>
|
||||||
Jadwal Konsultasi
|
Jadwal Konsultasi
|
||||||
</h4>
|
</h4>
|
||||||
@ -147,6 +284,11 @@
|
|||||||
--soft-gray: #f8f9fa;
|
--soft-gray: #f8f9fa;
|
||||||
--charcoal: #2d3436;
|
--charcoal: #2d3436;
|
||||||
}
|
}
|
||||||
|
.text-gradient {
|
||||||
|
background: linear-gradient(45deg, #667eea 0%, #764ba2 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
.bg-gradient-primary {
|
.bg-gradient-primary {
|
||||||
background: linear-gradient(135deg, var(--mint-dark) 0%, var(--mint) 100%);
|
background: linear-gradient(135deg, var(--mint-dark) 0%, var(--mint) 100%);
|
||||||
}
|
}
|
||||||
@ -202,6 +344,7 @@
|
|||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let html = '<div class="container"><div class="row row-cols-2 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-3">';
|
let html = '<div class="container"><div class="row row-cols-2 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-3">';
|
||||||
for (const [label, list] of Object.entries(groups)) {
|
for (const [label, list] of Object.entries(groups)) {
|
||||||
let scheduleInfo = '';
|
let scheduleInfo = '';
|
||||||
@ -227,6 +370,7 @@
|
|||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
list?.forEach(menu => {
|
list?.forEach(menu => {
|
||||||
|
|
||||||
html += `
|
html += `
|
||||||
<style>
|
<style>
|
||||||
.menu-card {
|
.menu-card {
|
||||||
@ -246,7 +390,8 @@
|
|||||||
|
|
||||||
<!-- GAMBAR + NAMA DI DALAM GAMBAR -->
|
<!-- GAMBAR + NAMA DI DALAM GAMBAR -->
|
||||||
<div class="position-relative">
|
<div class="position-relative">
|
||||||
<img src="gambar/${menu.foto || '3.jpeg'}"
|
|
||||||
|
<img src="${menu.exist_foto ? `/gambar/${menu?.foto}` : '/gambar/default.png'}"
|
||||||
class="rounded shadow-sm object-fit-cover w-100" height="150"
|
class="rounded shadow-sm object-fit-cover w-100" height="150"
|
||||||
alt="${menu.nama_menu}">
|
alt="${menu.nama_menu}">
|
||||||
|
|
||||||
@ -257,7 +402,7 @@
|
|||||||
<!-- di dalam .position-relative (gambar) -->
|
<!-- di dalam .position-relative (gambar) -->
|
||||||
<!-- Nama + kalori di dalam gambar (bawah) -->
|
<!-- Nama + kalori di dalam gambar (bawah) -->
|
||||||
<div class="position-absolute bottom-0 start-0 p-2 w-100">
|
<div class="position-absolute bottom-0 start-0 p-2 w-100">
|
||||||
<h6 class="fw-bold text-white mb-0" style="font-size:.75rem; max-width: 85%;">${menu.nama.substring(0, 39) + '...' }</h6>
|
<h5 class="fw-bold text-white mb-0" style="font-size:.80rem; max-width: 100%;">${menu.nama.length > 25 ? menu.nama.substring(0, 30) + '...' : menu.nama}</h5>
|
||||||
${menu?.kalori.length > 0 ? `
|
${menu?.kalori.length > 0 ? `
|
||||||
<small class="text-white badge bg-success">${(menu.kalori || []).slice(0,1).map(k=>k.nilai_kalori||0).join('')} kkal</small>`: ''}
|
<small class="text-white badge bg-success">${(menu.kalori || []).slice(0,1).map(k=>k.nilai_kalori||0).join('')} kkal</small>`: ''}
|
||||||
${(menu.klasifikasiMenu || [])
|
${(menu.klasifikasiMenu || [])
|
||||||
@ -286,29 +431,23 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-between align-items-center text-muted small mb-1">
|
||||||
|
<strong>Harga</strong>
|
||||||
<!-- Harga 1 baris -->
|
<strong class="text-success">Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')}</strong>
|
||||||
<div class="d-flex justify-content-between align-items-center text-muted small mt-1 px-1">
|
|
||||||
<small>Karyawan</small>
|
|
||||||
<strong class="text-success">Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}</strong>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-between align-items-center text-muted small px-1">
|
|
||||||
<small>Public</small>
|
<div class="d-flex align-items-center gap-1">
|
||||||
<strong class="text-success">Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')}</strong>
|
<small class="text-muted">Tersedia:</small>
|
||||||
</div>
|
|
||||||
<div class="d-flex align-items-center gap-1 mt-2 px-1">
|
|
||||||
<small class="text-muted fw-semibold">Tersedia:</small>
|
|
||||||
<div class="d-flex gap-1 overflow-auto" style="font-size:.65rem; scrollbar-width:none;">
|
|
||||||
${menu.apakah_menu_siang && menu.apakah_menu_sore
|
${menu.apakah_menu_siang && menu.apakah_menu_sore
|
||||||
? '<div class="badge bg-success text-dark d-flex align-items-center px-1 text-white" style="font-size:.65rem;">Makan Siang<br/> & Sore</div>'
|
? '<span class="badge bg-success text-white px-1" style="font-size:.6rem;">Siang & Sore</span>'
|
||||||
: menu.apakah_menu_siang
|
: menu.apakah_menu_siang
|
||||||
? '<div class="badge bg-warning text-dark d-flex align-items-center px-1" style="font-size:.65rem;">Makan Siang</div>'
|
? '<span class="badge bg-warning text-dark px-1" style="font-size:.6rem;">Siang</span>'
|
||||||
: menu.apakah_menu_sore
|
: menu.apakah_menu_sore
|
||||||
? '<div class="badge text-white d-flex align-items-center px-1" style="font-size:.65rem; background-color:#3A86FF;" >Makan Sore</div>'
|
? '<span class="badge text-white px-1" style="font-size:.6rem; background:#3A86FF;">Sore</span>'
|
||||||
: '<div class="badge bg-danger d-flex align-items-center px-1" style="font-size:.5rem;"><i class="fa fa-times-circle" style="font-size:.5rem"></i>Tutup</div>'}
|
: '<span class="badge bg-danger text-white px-1" style="font-size:.6rem;">Tutup</span>'
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Tombol -->
|
<!-- Tombol -->
|
||||||
@ -325,6 +464,7 @@
|
|||||||
data-tgl_tersedia="${(menu.dmph || []).map(tgl => tgl.tgl_harian).join(', ')}"
|
data-tgl_tersedia="${(menu.dmph || []).map(tgl => tgl.tgl_harian).join(', ')}"
|
||||||
data-kalori="${(menu.kalori || []).map(kkal => kkal.nilai_kalori).join(', ')}"
|
data-kalori="${(menu.kalori || []).map(kkal => kkal.nilai_kalori).join(', ')}"
|
||||||
data-foto="${menu.foto}"
|
data-foto="${menu.foto}"
|
||||||
|
data-exist_foto="${menu.exist_foto}"
|
||||||
data-apakah_menu_sore="${menu.apakah_menu_sore}"
|
data-apakah_menu_sore="${menu.apakah_menu_sore}"
|
||||||
data-apakah_menu_siang="${menu.apakah_menu_siang}"
|
data-apakah_menu_siang="${menu.apakah_menu_siang}"
|
||||||
data-apakah_someday="${menu.apakah_someday}">
|
data-apakah_someday="${menu.apakah_someday}">
|
||||||
@ -341,7 +481,8 @@
|
|||||||
data-klasifikasi_menu="${(menu.klasifikasiMenu || []).map(tag => tag.nama_kategori_diet).join(', ')}"
|
data-klasifikasi_menu="${(menu.klasifikasiMenu || []).map(tag => tag.nama_kategori_diet).join(', ')}"
|
||||||
data-tgl_tersedia="${(menu.dmph || []).map(tgl => tgl.tgl_harian).join(', ')}"
|
data-tgl_tersedia="${(menu.dmph || []).map(tgl => tgl.tgl_harian).join(', ')}"
|
||||||
data-kalori="${(menu.kalori || []).map(kkal => kkal.nilai_kalori).join(', ')}"
|
data-kalori="${(menu.kalori || []).map(kkal => kkal.nilai_kalori).join(', ')}"
|
||||||
data-foto="${menu.foto}"
|
${menu.exist_foto ? `data-foto=${menu.foto}` : `data-foto="default.png"`}
|
||||||
|
|
||||||
data-apakah_menu_sore="${menu.apakah_menu_sore}"
|
data-apakah_menu_sore="${menu.apakah_menu_sore}"
|
||||||
data-apakah_menu_siang="${menu.apakah_menu_siang}"
|
data-apakah_menu_siang="${menu.apakah_menu_siang}"
|
||||||
data-apakah_someday="${menu.apakah_someday}">
|
data-apakah_someday="${menu.apakah_someday}">
|
||||||
@ -401,25 +542,18 @@
|
|||||||
$("#scroll-top").addClass('d-none');
|
$("#scroll-top").addClass('d-none');
|
||||||
const tags = (el.data('klasifikasi_menu') || '').split(',').filter(Boolean).map(tag => tag.trim());
|
const tags = (el.data('klasifikasi_menu') || '').split(',').filter(Boolean).map(tag => tag.trim());
|
||||||
const kaloriRaw = el.data('kalori');
|
const kaloriRaw = el.data('kalori');
|
||||||
let kalori = [];
|
let kalori = String(kaloriRaw);
|
||||||
if(Array.isArray(kaloriRaw)){
|
|
||||||
kalori = kaloriRaw.map(k => String(k))
|
|
||||||
}else if(typeof kaloriRaw === 'string'){
|
|
||||||
kalori = kaloriRaw.split(',').map(k => k.trim())
|
|
||||||
}else if(kaloriRaw !== undefined && kaloriRaw !== null){
|
|
||||||
kalori = [String(kaloriRaw)]
|
|
||||||
}
|
|
||||||
const someday = el.data('apakah_someday');
|
const someday = el.data('apakah_someday');
|
||||||
const siang = el.data('apakah_menu_siang');
|
const siang = el.data('apakah_menu_siang');
|
||||||
const sore = el.data('apakah_menu_sore');
|
const sore = el.data('apakah_menu_sore');
|
||||||
|
const exist_foto = el.data('exist_foto');
|
||||||
|
|
||||||
const klasifikasiMenu = tags.map(tag => `
|
const klasifikasiMenu = tags.map(tag => `
|
||||||
<span class="badge bg-secondary me-1 mb-1">${tag}</span>
|
<span class="badge bg-secondary me-1 mb-1">${tag}</span>
|
||||||
`).join('');
|
`).join('');
|
||||||
|
|
||||||
const resultKkal = kalori.length > 0
|
const resultKkal = kalori ? `<small class="badge bg-success me-1 mb-1 fs-6">${kalori + ' kal'}</small>` : '';
|
||||||
? kalori.map(kkal => `<small class="badge bg-success me-1 mb-1 fs-6">${kkal ? kkal + ' kal' : ''}</small>`).join('')
|
|
||||||
: '';
|
|
||||||
|
|
||||||
const tglMenuTersedia = `
|
const tglMenuTersedia = `
|
||||||
<div class="mb-1 small text-muted">
|
<div class="mb-1 small text-muted">
|
||||||
@ -445,19 +579,32 @@
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
$('#checkoutModal').modal('show');
|
$('#checkoutModal').modal('show');
|
||||||
$('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.jpg'}`);
|
if(exist_foto){
|
||||||
|
$('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.png'}`);
|
||||||
|
}else{
|
||||||
|
$('#cathering_order_photo').attr('src', `/gambar/default.png`);
|
||||||
|
}
|
||||||
|
|
||||||
$('#cathering_order_name').html(`
|
$('#cathering_order_name').html(`
|
||||||
<div>${el.data('nama_menu')}
|
<div>${el.data('nama_menu')}</div>`);
|
||||||
${resultKkal}
|
$("#kalori_detail").html(resultKkal)
|
||||||
</div>`);
|
$('#kalori_checkout').val(el.data('id'));
|
||||||
$('#cathering_order_menu_id').val(el.data('id'));
|
$('#cathering_order_menu_id').val(el.data('id'));
|
||||||
$('#cathering_order_jenis_menu').val(el.data('jenis_menu'));
|
$('#cathering_order_jenis_menu').val(el.data('jenis_menu'));
|
||||||
$('#cathering_order_deskripsi').text(el.data('deskripsi') || '');
|
let deskripsi = el.data('deskripsi');
|
||||||
|
if (deskripsi) {
|
||||||
|
$('#cathering_order_deskripsi').html(
|
||||||
|
`<span class="fw-semibold text-dark">Deskripsi:</span> ${deskripsi}`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$('#cathering_order_deskripsi').html('');
|
||||||
|
}
|
||||||
|
|
||||||
$('#cathering_order_price_karyawan').text("Rp " + parseInt(el.data('harga_karyawan') || 0).toLocaleString('id-ID'));
|
$('#cathering_order_price_karyawan').text("Rp " + parseInt(el.data('harga_karyawan') || 0).toLocaleString('id-ID'));
|
||||||
$('#cathering_order_price_public').text("Rp " + parseInt(el.data('harga_public') || 0).toLocaleString('id-ID'));
|
$('#cathering_order_price_public').text("Rp " + parseInt(el.data('harga_public') || 0).toLocaleString('id-ID'));
|
||||||
$('#tag_klasifikasi_menu').html(klasifikasiMenu);
|
$('#tag_klasifikasi_menu').html(klasifikasiMenu);
|
||||||
$('#tgl_menu_tersedia').html(tglMenuTersedia);
|
$('#tgl_menu_tersedia').html(tglMenuTersedia);
|
||||||
|
$('#exist_foto').val(exist_foto ? 1 : 0);
|
||||||
$('#apakah_someday').val(someday ? 1 : 0);
|
$('#apakah_someday').val(someday ? 1 : 0);
|
||||||
$('#apakah_menu_siang').val(siang ? 1 : 0);
|
$('#apakah_menu_siang').val(siang ? 1 : 0);
|
||||||
$('#apakah_menu_sore').val(sore ? 1 : 0);
|
$('#apakah_menu_sore').val(sore ? 1 : 0);
|
||||||
@ -527,10 +674,11 @@
|
|||||||
|
|
||||||
let namaMenu = $("#cathering_order_name").text();
|
let namaMenu = $("#cathering_order_name").text();
|
||||||
|
|
||||||
console.log(cart);
|
|
||||||
let existingItem = cart.find(item => item.id_menu === idMenu);
|
let existingItem = cart.find(item => item.id_menu === idMenu);
|
||||||
|
|
||||||
if(!existingItem){
|
if(!existingItem){
|
||||||
|
let kaloriText = $('#kalori_detail').text().trim(); // misal "250 kal"
|
||||||
|
let kaloriOnly = kaloriText ? kaloriText.replace(' kal', '').trim() : '';
|
||||||
const orderItem ={
|
const orderItem ={
|
||||||
id:Date.now(),
|
id:Date.now(),
|
||||||
id_menu :idMenu,
|
id_menu :idMenu,
|
||||||
@ -544,7 +692,7 @@
|
|||||||
apakah_menu_sore: $('#apakah_menu_sore').val() === "1" ? true: false,
|
apakah_menu_sore: $('#apakah_menu_sore').val() === "1" ? true: false,
|
||||||
apakah_someday: $('#apakah_someday').val() === "1" ? true: false,
|
apakah_someday: $('#apakah_someday').val() === "1" ? true: false,
|
||||||
tgl_tersedia: $('#tgl_tersedia').val(),
|
tgl_tersedia: $('#tgl_tersedia').val(),
|
||||||
kalori: $('#kalori').text(),
|
kalori: kaloriOnly,
|
||||||
pesanan : orders
|
pesanan : orders
|
||||||
}
|
}
|
||||||
cart.push(orderItem)
|
cart.push(orderItem)
|
||||||
@ -585,6 +733,7 @@
|
|||||||
foto: $(e).data('foto'),
|
foto: $(e).data('foto'),
|
||||||
jenis_menu: $(e).data('jenis_menu'),
|
jenis_menu: $(e).data('jenis_menu'),
|
||||||
deskripsi: $(e).data('deskripsi'),
|
deskripsi: $(e).data('deskripsi'),
|
||||||
|
exist_foto: $(e).data('exist_foto'),
|
||||||
apakah_menu_siang: $(e).data('apakah_menu_siang'),
|
apakah_menu_siang: $(e).data('apakah_menu_siang'),
|
||||||
apakah_menu_sore: $(e).data('apakah_menu_sore'),
|
apakah_menu_sore: $(e).data('apakah_menu_sore'),
|
||||||
apakah_someday: $(e).data('apakah_someday'),
|
apakah_someday: $(e).data('apakah_someday'),
|
||||||
@ -596,6 +745,7 @@
|
|||||||
}
|
}
|
||||||
sessionStorage.setItem('cart', JSON.stringify(cart))
|
sessionStorage.setItem('cart', JSON.stringify(cart))
|
||||||
updateCartCount(cart.length)
|
updateCartCount(cart.length)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkout(){
|
function checkout(){
|
||||||
|
|||||||
@ -5,3 +5,6 @@ const modalDetailOrder = document.getElementById('modalDetailOrder');
|
|||||||
const modalActionOrder = document.getElementById('modalActionApproveOrder');
|
const modalActionOrder = document.getElementById('modalActionApproveOrder');
|
||||||
|
|
||||||
const modalExport = document.getElementById('modalExportPekerjaan');
|
const modalExport = document.getElementById('modalExportPekerjaan');
|
||||||
|
|
||||||
|
const modalInfoPending = document.getElementById('modalActionInfoPending')
|
||||||
|
const datatablePekerjaanPending = $("#datatableDataPending")
|
||||||
|
|||||||
@ -7,16 +7,21 @@ function detailOrder(id){
|
|||||||
document.getElementById('pesanan_container').innerHTML = '';
|
document.getElementById('pesanan_container').innerHTML = '';
|
||||||
document.getElementById('confirm_nama_pesanan').textContent = data?.order?.nama_pemesan;
|
document.getElementById('confirm_nama_pesanan').textContent = data?.order?.nama_pemesan;
|
||||||
let html = '';
|
let html = '';
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
html += `
|
html += `
|
||||||
<div class="col-md-12 mb-3">
|
<div class="col-md-12 mb-3">
|
||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="row g-0">
|
<div class="row g-0">
|
||||||
<div class="col-md-5 d-flex align-items-center p-2">
|
<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?.paket_menu?.foto}" alt="Foto Menu" class="img-fluid rounded shadow m-auto" style="max-height: 320px; width: auto;">
|
<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>
|
||||||
<div class="col-md-7 p-1">
|
<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?.paket_menu?.nama_menu}</strong></p>
|
<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">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">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">Harga Satuan: <strong>Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||||
<p class="mb-1">Status Pesanan:
|
<p class="mb-1">Status Pesanan:
|
||||||
@ -24,7 +29,8 @@ function detailOrder(id){
|
|||||||
${data?.status_order}
|
${data?.status_order}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</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">
|
<hr class="my-2">
|
||||||
<p class="mb-1">Pemesan: <strong>${data?.order?.nama_pemesan || '-'}</strong></p>
|
<p class="mb-1">Pemesan: <strong>${data?.order?.nama_pemesan || '-'}</strong></p>
|
||||||
<p class="mb-1">Jenis Kelamin: <strong>${data?.order?.jenis_kelamin || '-'}</strong></p>
|
<p class="mb-1">Jenis Kelamin: <strong>${data?.order?.jenis_kelamin || '-'}</strong></p>
|
||||||
@ -36,12 +42,13 @@ function detailOrder(id){
|
|||||||
` : data?.order?.jenis_customer === "Karyawan RSAB Harapan Kita" ? `
|
` : 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">Bagian /Instalasi: <strong>${data?.order?.bagian_instalasi || '-'}</strong></p>
|
||||||
<p class="mb-1">No Ekstensien: <strong>${data?.order?.no_ekstensien || '-'}</strong></p>
|
<p class="mb-1">No Ekstensien: <strong>${data?.order?.no_ekstensien || '-'}</strong></p>
|
||||||
` :`
|
<p class="mb-1">NIP : <strong>${data?.order?.nip || '-'}</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">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">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">Nomor Kamar Perawatan: <strong>${data?.order?.no_kamar_perawatan || '-'}</strong></p>
|
||||||
<p class="mb-1">Kelas Perawatan: <strong>${data?.order?.kelas_perawatan || '-'}</strong></p>
|
<p class="mb-1">Kelas Perawatan: <strong>${data?.order?.kelas_perawatan || '-'}</strong></p>
|
||||||
`
|
` : ''
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -63,8 +70,11 @@ function detailOrder(id){
|
|||||||
|
|
||||||
function approve(e){
|
function approve(e){
|
||||||
const data = $(e).data();
|
const data = $(e).data();
|
||||||
|
|
||||||
new bootstrap.Modal(modalActionOrder).show();
|
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 +')')
|
$("#confirmNoOrder").text(data?.no_order + ' (' + data?.nama_pemesan +')')
|
||||||
document.getElementById('formActionApproveOrder').setAttribute(`action`, `/dashboard/pending/update-detail-status/${data.id}`)
|
document.getElementById('formActionApproveOrder').setAttribute(`action`, `/dashboard/pending/update-detail-status/${data.id}`)
|
||||||
}
|
}
|
||||||
@ -92,6 +102,7 @@ document.getElementById('formActionApproveOrder').addEventListener('submit', fun
|
|||||||
backdrop: true,
|
backdrop: true,
|
||||||
});
|
});
|
||||||
datatablePekerjaan.bootstrapTable('refresh');
|
datatablePekerjaan.bootstrapTable('refresh');
|
||||||
|
|
||||||
modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
||||||
getReminderVerifikasiMakanan()
|
getReminderVerifikasiMakanan()
|
||||||
};
|
};
|
||||||
@ -114,3 +125,43 @@ document.getElementById('formActionApproveOrder').addEventListener('submit', fun
|
|||||||
function exportPekerjaan(){
|
function exportPekerjaan(){
|
||||||
new bootstrap.Modal(modalExport).show()
|
new bootstrap.Modal(modalExport).show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function datapending(){
|
||||||
|
new bootstrap.Modal(modalInfoPending).show()
|
||||||
|
datatablePekerjaanPending.bootstrapTable('destroy')
|
||||||
|
datatablePekerjaanPending.bootstrapTable({
|
||||||
|
url: "/dashboard/data/pending-pekerjaan",
|
||||||
|
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: "datatablePesananPending",
|
||||||
|
icons: {
|
||||||
|
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
|
||||||
|
columns: "fas fa-th-large"
|
||||||
|
},
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: "Tanggal",
|
||||||
|
field: 'tgl',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Total",
|
||||||
|
formatter: function(value, row){
|
||||||
|
return row?.total
|
||||||
|
},
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
if(row?.status_order !== "Selesai"){
|
if(row?.status_order !== "Selesai"){
|
||||||
buttons += `
|
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>
|
<i class="fa fa-check me-1"></i>
|
||||||
</button>
|
</button>
|
||||||
`
|
`
|
||||||
@ -92,7 +92,7 @@
|
|||||||
title: "Menu",
|
title: "Menu",
|
||||||
field: 'order_detail_id',
|
field: 'order_detail_id',
|
||||||
formatter:function(value, row){
|
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,
|
sortable: true,
|
||||||
},
|
},
|
||||||
@ -108,14 +108,30 @@
|
|||||||
},
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title:"Total Kalori",
|
||||||
|
formatter: function(value, row){
|
||||||
|
return row?.total_kalori ? row?.total_kalori + ' kal' : '-';
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "Pemesan",
|
title: "Pemesan",
|
||||||
field:'order.nama_pemesan',
|
field:'order.nama_pemesan',
|
||||||
formatter: function(value, row){
|
formatter: function(value, row){
|
||||||
return `<ul class="list-unstyled mb-0 text-nowrap;">
|
return `
|
||||||
<li><i class="fa fa-user me-1 text-muted"></i> <strong> ${row?.order.nama_pemesan ?? '-'} </strong></li>
|
<ul class="list-unstyled mb-0 text-nowrap">
|
||||||
<li><i class="fa fa-tag me-1 text-muted"></i> ${row?.order?.jenis_customer ?? '-'}</li>
|
<li><i class="fa fa-user me-1 text-muted"></i><strong>${row?.order?.nama_pemesan ?? '-'}</strong></li>
|
||||||
</ul>`
|
${row?.order?.nama_institusi ? `
|
||||||
|
<li><i class="fa fa-tag me-1 text-muted"></i> ${row?.order?.nama_institusi + '(' + row?.order?.jenis_customer +')'}</li>
|
||||||
|
` : `<li><i class="fa fa-tag me-1 text-muted"></i> ${row?.order?.jenis_customer ?? '-'}</li>`}
|
||||||
|
${row?.order?.nip ? `
|
||||||
|
<li><i class="fas fa-id-card me-1 text-muted"></i> ${row?.order?.nip ?? '-'}</li>
|
||||||
|
` : ``}
|
||||||
|
${row?.order?.bagian_instalasi ? `
|
||||||
|
<li><i class="fa fa-tag me-1 text-muted"></i> ${row?.order?.bagian_instalasi ?? '-'}</li>
|
||||||
|
` : ''}
|
||||||
|
</ul>`
|
||||||
|
|
||||||
},
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
@ -125,8 +141,12 @@
|
|||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Waktu Pemesanan",
|
title: "Waktu Pengantaran",
|
||||||
field: 'type',
|
formatter: function(value, row){
|
||||||
|
|
||||||
|
if(row?.order?.jenis_customer === 'MCU')return row.jam_layanan.slice(0, 5);
|
||||||
|
return row?.type
|
||||||
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -136,6 +156,14 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
|
onLoadSuccess: function (res) {
|
||||||
|
// res = data JSON dari server
|
||||||
|
if (res.dataPending && res.dataPending > 0) {
|
||||||
|
$("#data_pending").show(); // tampilkan tombol
|
||||||
|
} else {
|
||||||
|
$("#data_pending").hide(); // sembunyikan tombol
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
$(document).on('click', '#selectAll', function () {
|
$(document).on('click', '#selectAll', function () {
|
||||||
selectedRows = [];
|
selectedRows = [];
|
||||||
@ -170,5 +198,8 @@
|
|||||||
function labelDownload(){
|
function labelDownload(){
|
||||||
const selected = (typeof getSelectedRowsForLabel === 'function') ? getSelectedRowsForLabel() : [];
|
const selected = (typeof getSelectedRowsForLabel === 'function') ? getSelectedRowsForLabel() : [];
|
||||||
const order_detail_ids = selected.map(item => item.order_detail_id);
|
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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -18,3 +18,7 @@ const modalExportPekerjaan = document.getElementById('modalExportPekerjaan');
|
|||||||
const datatableOfPekerjaan = $("#datatableVerifikasiMakananOffcanvas")
|
const datatableOfPekerjaan = $("#datatableVerifikasiMakananOffcanvas")
|
||||||
const modalDetailOrder = document.getElementById('modalDetailOrderOf');
|
const modalDetailOrder = document.getElementById('modalDetailOrderOf');
|
||||||
const modalActionOrderPekerjaan = document.getElementById('modalActionApproveOrder');
|
const modalActionOrderPekerjaan = document.getElementById('modalActionApproveOrder');
|
||||||
|
|
||||||
|
|
||||||
|
const modalDataPending = document.getElementById('modalActionInfoPending')
|
||||||
|
const datatableDataPending = $("#datatableDataPending")
|
||||||
|
|||||||
@ -49,6 +49,7 @@ document.getElementById('formActionOrder').addEventListener('submit', function (
|
|||||||
});
|
});
|
||||||
getReminderKonfirmasiPesanan()
|
getReminderKonfirmasiPesanan()
|
||||||
getReminderVerifikasiMakanan()
|
getReminderVerifikasiMakanan()
|
||||||
|
getReminderVerifikasiMakananOffCanvas()
|
||||||
datatablePending.bootstrapTable('refresh');
|
datatablePending.bootstrapTable('refresh');
|
||||||
modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
modalActionOrder.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
||||||
};
|
};
|
||||||
@ -95,7 +96,7 @@ function AdminApproved(e){
|
|||||||
$("#billingOrder").addClass('d-none')
|
$("#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}`)
|
formActionApproveBillingOrder.attr(`action`, `/dashboard/pending/action-billing/${data.order_id}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,3 +158,43 @@ function approveProgress(order_id){
|
|||||||
function exportPending(){
|
function exportPending(){
|
||||||
new bootstrap.Modal(modalExport).show();
|
new bootstrap.Modal(modalExport).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function datapending(){
|
||||||
|
new bootstrap.Modal(modalDataPending).show();
|
||||||
|
datatableDataPending.bootstrapTable('destroy')
|
||||||
|
datatableDataPending.bootstrapTable({
|
||||||
|
url: "/dashboard/data/pending",
|
||||||
|
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: "datatablePesananPending",
|
||||||
|
icons: {
|
||||||
|
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
|
||||||
|
columns: "fas fa-th-large"
|
||||||
|
},
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: "Tanggal",
|
||||||
|
field: 'tgl',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Total",
|
||||||
|
formatter: function(value, row){
|
||||||
|
return row?.total
|
||||||
|
},
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
@ -6,34 +6,30 @@ function fetchDetailOrder(order_id){
|
|||||||
document.getElementById('pesanan_container').innerHTML =''
|
document.getElementById('pesanan_container').innerHTML =''
|
||||||
// Generate HTML untuk order_detail
|
// Generate HTML untuk order_detail
|
||||||
const detailHTML = (data?.order_detail || []).map(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 `
|
return `
|
||||||
<div class="col-md-12 mb-3">
|
<div class="col-md-12 mb-3">
|
||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="row g-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;">
|
<img src="/gambar/${detail?.menu?.foto || 'default.jpg'}" alt="Foto Menu" class="img-fluid rounded shadow" style="max-height: 250px; width: 240px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5 p-2">
|
<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 || '-'}</strong></p>
|
<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">Jumlah: <span>${detail?.jumlah || 0}</span></p>
|
||||||
<p class="mb-1">Tanggal Pesan: <span>${detail?.tgl_antar || 0}</span></p>
|
<p class="mb-1">Tanggal Antar: <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">Harga: <strong>Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||||
<p class="mb-1">Status Pesanan:
|
<p class="mb-1">Status Pesanan:
|
||||||
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
|
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
|
||||||
id="status_badge_${detail.order_detail_id}">
|
id="status_badge_${detail?.order_detail_id}">
|
||||||
${detail?.status_order}
|
${detail?.status_order}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</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 class="form-check form-switch mt-2">
|
|
||||||
<input class="form-check-input status-switch" type="checkbox"
|
|
||||||
id="switch_status_${detail.order_detail_id}"
|
|
||||||
data-id="${detail.order_detail_id}"
|
|
||||||
${detail.status_order === 'Selesai' ? 'checked' : ''} ${detail.status_order === 'Selesai' ? 'disabled' : ''}>
|
|
||||||
<label class="form-check-label " for="switch_status_${detail.order_detail_id}">
|
|
||||||
${detail.status_order === 'Selesai' ? `Selesai` : 'Tandai sebagai Selesai'}
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -42,99 +38,84 @@ function fetchDetailOrder(order_id){
|
|||||||
}).join('');
|
}).join('');
|
||||||
|
|
||||||
const html = `
|
const html = `
|
||||||
<div class="row mt-3">
|
<div class="row mt-4">
|
||||||
<!-- Bagian Kiri: Gambar Bukti Pembayaran -->
|
|
||||||
${data.bukti_pembayaran ? `
|
|
||||||
<div class="col-md-4 text-center mb-3 mb-md-0">
|
|
||||||
<a href="/storage/${data.bukti_pembayaran}" target="_blank">
|
|
||||||
<img src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}" alt="Bukti Pembayaran" class="img-fluid rounded shadow" style="max-height: 370px; width: auto;"></a>
|
|
||||||
</div>` : ''}
|
|
||||||
|
|
||||||
<!-- Bagian Kanan: Informasi Pemesan -->
|
|
||||||
<div class="${data?.bukti_pembayaran ? `col-md-8` : `col-md-12`}">
|
|
||||||
<div class="card shadow-sm border-0">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="mb-0">Nama Pemesan: <span class="text-primary" id="nama_pemesan">${data.nama_pemesan}</span></h5>
|
|
||||||
<small class="text-muted">Jenis Customer: <span id="jenis_customer">${data.jenis_customer}</span></small>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
${data?.jenis_customer === 'Keluarga Pasien / Penunggu Pasien' ?
|
|
||||||
`<div class="mb-2">
|
|
||||||
<p class="mb-1">Nama Pasien: <strong id="no_order">${data.nama_pasien || '-'}</strong></p>
|
|
||||||
<p class="mb-1">Nomor Kamar Perawatan: <strong id="no_order">${data.no_kamar_perawatan || '-'}</strong></p>
|
|
||||||
<p class="mb-1">Ruang Perawatan: <strong id="no_order">${data.kelas_perawatan || '-'}</strong></p>
|
|
||||||
<p class="mb-1">Kelas Perawatan: <strong id="no_order">${data.ruang_perawatan || '-'}</strong></p>
|
|
||||||
</div>`: `
|
|
||||||
<div class="mb-2">
|
|
||||||
<p class="mb-1">Bagian /Instalasi: <strong id="no_order">${data.bagian_instalasi || '-'}</strong></p>
|
|
||||||
<p class="mb-1">Ekstensien yang bisa di Hubungi: <strong id="no_order">${data.no_ekstensien || '-'}</strong></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
`}
|
|
||||||
|
|
||||||
|
|
||||||
<div class="mb-2">
|
|
||||||
<p class="mb-1">No Order: <strong id="no_order">${data.no_order}</strong></p>
|
|
||||||
<p class="mb-1">Type Pembayaran: <strong id="no_order">${data.cara_pembayaran}</strong></p>
|
|
||||||
<p class="mb-1">Tanggal Pembayaran: <span id="tgl_pembayaran">${data.tgl_pembayaran || '-'}</span></p>
|
|
||||||
<p class="mb-1">Total Harga: <strong id="total_harga">Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}</strong></p>
|
|
||||||
|
|
||||||
|
<!-- Gambar Bukti Pembayaran -->
|
||||||
|
${data.bukti_pembayaran ? `
|
||||||
|
<div class="col-md-4 text-center mb-3 mb-md-0">
|
||||||
|
<div class="border rounded shadow-sm p-2 bg-light">
|
||||||
|
<a href="/storage/${data?.bukti_pembayaran}" target="_blank">
|
||||||
|
<img src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
|
||||||
|
alt="Bukti Pembayaran"
|
||||||
|
class="img-fluid rounded"
|
||||||
|
style="max-height: 170px; width: auto;">
|
||||||
|
</a>
|
||||||
|
<div class="text-muted small mt-2">Bukti Pembayaran</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
` : ''}
|
||||||
|
|
||||||
<div class="mt-3">
|
<!-- Informasi Pemesan -->
|
||||||
<label class="form-label">Status Saat Ini:</label>
|
<div class="${data.bukti_pembayaran ? 'col-md-8' : 'col-md-12'}">
|
||||||
<span class="badge text-dark ${data?.status_order === 'Lunas' ? 'bg-success' : 'bg-warning'}" id="status_order">${data.status_order}</span>
|
<div class="card shadow-sm border-0">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title text-primary mb-1">${data?.nama_pemesan}</h5>
|
||||||
|
<p class="mb-2">Jenis Kelamin: <strong>${data?.jenis_kelamin}</strong></p>
|
||||||
|
<p class="mb-2">Jenis Customer: <strong>${data?.jenis_customer}</strong></p>
|
||||||
|
<p class="mb-2">Email: <strong>${data?.email || '-'}</strong></p>
|
||||||
|
<p class="mb-2">No.Hp / WA: <strong>${data?.no_wa || '-'}</strong></p>
|
||||||
|
<p class="mb-2">Tinggi Badan / Berat Badan: <strong>${data?.tinggi_badan || '-'} / ${data?.berat_badan || '-'}</strong></p>
|
||||||
|
|
||||||
|
${
|
||||||
|
data?.jenis_customer === "Masyarakat Umum"
|
||||||
|
? `
|
||||||
|
<p class="mb-1">Alamat: <strong>${data?.alamat || '-'}</strong></p>
|
||||||
|
`
|
||||||
|
: data?.jenis_customer === "Karyawan RSAB Harapan Kita"
|
||||||
|
? `
|
||||||
|
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
|
||||||
|
<p class="mb-1">No Ekstensien: <strong>${data?.no_ekstensien || '-'}</strong></p>
|
||||||
|
`
|
||||||
|
: 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>
|
||||||
|
${data?.cara_pembayaran === 'Billing' ? `
|
||||||
|
<p class="mb-1">No. Medical Record: <strong>${data.medical_record}</strong></p>
|
||||||
|
` : ''}
|
||||||
|
<p class="mb-1">Tanggal Pembayaran: <strong>${data.tgl_pembayaran || '-'}</strong></p>
|
||||||
|
<p class="mb-1">Total Harga: <strong>Rp ${parseInt(data.total_harga).toLocaleString('id-ID')}</strong></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-3">
|
||||||
|
<label class="form-label fw-semibold">Status Saat Ini:</label><br>
|
||||||
|
<span class="badge ${data?.status_order === 'Lunas' ? 'bg-success' : 'bg-warning'} text-dark">
|
||||||
|
${data.status_order}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<hr class="my-4">
|
<hr class="my-4">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
${detailHTML}
|
${detailHTML}
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
document.getElementById('pesanan_container').innerHTML = html;
|
document.getElementById('pesanan_container').innerHTML = html;
|
||||||
|
|
||||||
|
|
||||||
document.querySelectorAll('.status-switch').forEach(el => {
|
|
||||||
el.addEventListener('change', function () {
|
|
||||||
const id = this.dataset.id;
|
|
||||||
const isChecked = this.checked;
|
|
||||||
const newStatus = isChecked ? 'Selesai' : 'Pending';
|
|
||||||
|
|
||||||
// Update badge UI
|
|
||||||
const badge = document.getElementById(`status_badge_${id}`);
|
|
||||||
if (badge) {
|
|
||||||
badge.innerText = newStatus;
|
|
||||||
badge.className = `badge text-dark ${isChecked ? 'bg-success' : 'bg-warning'}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Kirim ke backend
|
|
||||||
fetch(`/dashboard/pending/update-detail-status/${id}`, {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value
|
|
||||||
},
|
|
||||||
body: JSON.stringify({ status_order: newStatus })
|
|
||||||
})
|
|
||||||
.then(res => res.json())
|
|
||||||
.then(res => {
|
|
||||||
el.disabled = true;
|
|
||||||
datatablePending.bootstrapTable('refresh')
|
|
||||||
showToast('Status berhasil diperbarui!');
|
|
||||||
getReminderVerifikasiMakanan()
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.error('Gagal update status:', err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
document.getElementById('pesanan_container').innerHTML = '<p class="text-danger">Terjadi kesalahan saat memuat data.</p>';
|
document.getElementById('pesanan_container').innerHTML = '<p class="text-danger">Terjadi kesalahan saat memuat data.</p>';
|
||||||
|
|||||||
@ -65,13 +65,13 @@
|
|||||||
</button>
|
</button>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
if(row?.status_order === "Lunas"){
|
// if(row?.status_order === "Lunas"){
|
||||||
buttons += `
|
buttons += `
|
||||||
<button class="btn btn-sm btn-warning text-dark" onclick="approveProgress('${row.order_id}')">
|
<button class="btn btn-sm btn-warning text-dark" onclick="approveProgress('${row.order_id}')">
|
||||||
<i class="fa fa-utensils me-1"></i>
|
<i class="fa fa-utensils me-1"></i>
|
||||||
</button>
|
</button>
|
||||||
`
|
`
|
||||||
}
|
// }
|
||||||
|
|
||||||
return `
|
return `
|
||||||
<div class="d-flex space-x">
|
<div class="d-flex space-x">
|
||||||
@ -88,7 +88,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Cara Pembayaran",
|
title: "Cara Pembayaran",
|
||||||
field: 'cara_pembayaran',
|
formatter: function(value, row){
|
||||||
|
return row?.cara_pembayaran || '-'
|
||||||
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -167,6 +169,7 @@
|
|||||||
{
|
{
|
||||||
title: "Tgl Pemesanan",
|
title: "Tgl Pemesanan",
|
||||||
formatter: function(value, row) {
|
formatter: function(value, row) {
|
||||||
|
|
||||||
if (!row?.entry_at) return '-';
|
if (!row?.entry_at) return '-';
|
||||||
const date = new Date(row.entry_at);
|
const date = new Date(row.entry_at);
|
||||||
return date.toLocaleString('id-ID', {
|
return date.toLocaleString('id-ID', {
|
||||||
@ -182,10 +185,21 @@
|
|||||||
{
|
{
|
||||||
title: "Kategori Customer",
|
title: "Kategori Customer",
|
||||||
field: 'jenis_customer',
|
field: 'jenis_customer',
|
||||||
|
formatter: function(value, row){
|
||||||
|
return row?.nama_institusi ? row?.nama_institusi + ' (MCU)': row?.jenis_customer;
|
||||||
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
|
onLoadSuccess: function (res) {
|
||||||
|
// res = data JSON dari server
|
||||||
|
if (res.dataPending && res.dataPending > 0) {
|
||||||
|
$("#data_pending").show(); // tampilkan tombol
|
||||||
|
} else {
|
||||||
|
$("#data_pending").hide(); // sembunyikan tombol
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,6 @@ function initPekerjaanDt(selectDate = []) {
|
|||||||
queryParams: params => ({
|
queryParams: params => ({
|
||||||
...params,
|
...params,
|
||||||
tanggal: selectDate,
|
tanggal: selectDate,
|
||||||
// status: $('#filterStatus').val()
|
|
||||||
}),
|
}),
|
||||||
showColumns: true,
|
showColumns: true,
|
||||||
showColumnsToggleAll: true,
|
showColumnsToggleAll: true,
|
||||||
@ -119,7 +118,8 @@ function toggleLabelButton(enable) {
|
|||||||
// Download Label
|
// Download Label
|
||||||
function labelDownload() {
|
function labelDownload() {
|
||||||
const ids = getSelectedRowsForLabel().map(item => item.order_detail_id);
|
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
|
// Table Columns
|
||||||
@ -142,7 +142,7 @@ function getTableColumns() {
|
|||||||
data-id="${r.order_detail_id}"
|
data-id="${r.order_detail_id}"
|
||||||
data-nama_pemesan="${r?.order?.nama_pemesan}"
|
data-nama_pemesan="${r?.order?.nama_pemesan}"
|
||||||
data-no_order="${r?.order?.no_order}"
|
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-jenis_customer="${r?.order?.jenis_customer}"
|
||||||
data-type="${r?.type}">
|
data-type="${r?.type}">
|
||||||
<i class="fa fa-check me-1"></i>
|
<i class="fa fa-check me-1"></i>
|
||||||
@ -164,7 +164,7 @@ function getTableColumns() {
|
|||||||
return `<span class="badge ${badgeClass} px-3 py-1">${status}</span>`;
|
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",
|
title: "Karbohidrat",
|
||||||
formatter: (v, r) => {
|
formatter: (v, r) => {
|
||||||
@ -175,16 +175,36 @@ function getTableColumns() {
|
|||||||
},
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title:"Total Kalori",
|
||||||
|
formatter: function(value, row){
|
||||||
|
|
||||||
|
return row?.total_kalori ? row?.total_kalori + ' kal' : '-'
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "Pemesan",
|
title: "Pemesan",
|
||||||
formatter: (v, r) => `
|
formatter: (v, r) => `
|
||||||
<ul class="list-unstyled mb-0 text-nowrap">
|
<ul class="list-unstyled mb-0 text-nowrap">
|
||||||
<li><i class="fa fa-user me-1 text-muted"></i><strong>${r?.order?.nama_pemesan ?? '-'}</strong></li>
|
<li><i class="fa fa-user me-1 text-muted"></i><strong>${r?.order?.nama_pemesan ?? '-'}</strong></li>
|
||||||
<li><i class="fa fa-tag me-1 text-muted"></i>${r?.order?.jenis_customer ?? '-'}</li>
|
${r?.order?.nama_institusi ? `
|
||||||
|
<li><i class="fa fa-tag me-1 text-muted"></i> ${r?.order?.nama_institusi + '(' + r?.order?.jenis_customer +')'}</li>
|
||||||
|
` : `<li><i class="fa fa-tag me-1 text-muted"></i> ${r?.order?.jenis_customer ?? '-'}</li>`}
|
||||||
|
${r?.order?.nip ? `
|
||||||
|
<li><i class="fas fa-id-card me-1 text-muted"></i> ${r?.order?.nip ?? '-'}</li>
|
||||||
|
` : ``}
|
||||||
|
${r?.order?.bagian_instalasi ? `
|
||||||
|
<li><i class="fa fa-tag me-1 text-muted"></i> ${r?.order?.bagian_instalasi ?? '-'}</li>
|
||||||
|
` : ''}
|
||||||
</ul>`
|
</ul>`
|
||||||
},
|
},
|
||||||
{ title: "Tgl Antar", field: 'tgl_antar' },
|
{ 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 },
|
{ title: "Catatan", field: 'catatan', sortable: true },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -193,7 +213,7 @@ function getTableColumns() {
|
|||||||
function detailOrder(id){
|
function detailOrder(id){
|
||||||
const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan'));
|
const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan'));
|
||||||
offcanvas.hide();
|
offcanvas.hide();
|
||||||
new bootstrap.Modal(modalDetailOrder).show();
|
new bootstrap.Modal(modalActionProgressOrder).show();
|
||||||
fetch(`/dashboard/pekerjaan/detail/${id}`)
|
fetch(`/dashboard/pekerjaan/detail/${id}`)
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(res => {
|
.then(res => {
|
||||||
@ -205,20 +225,22 @@ function detailOrder(id){
|
|||||||
<div class="col-md-12 mb-3">
|
<div class="col-md-12 mb-3">
|
||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="row g-0">
|
<div class="row g-0">
|
||||||
<div class="col-md-5 d-flex align-items-center p-2">
|
<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?.paket_menu?.foto}" alt="Foto Menu" class="img-fluid rounded shadow m-auto" style="max-height: 220px; width: auto;">
|
<img src="/gambar/${data?.menu?.foto}" alt="Foto Menu" class="img-fluid rounded shadow m-auto" style="max-height: 240px; width: 220px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-7 p-1">
|
<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?.paket_menu?.nama_menu}</strong></p>
|
<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">Tanggal Antar: <span>${data?.tgl_antar || 0}</span></p>
|
||||||
<p class="mb-1">Jumlah: <span>${data?.jumlah || 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">Harga Satuan: <strong>Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||||
<p class="mb-1">Status Pesanan:
|
<p class="mb-1">Status Pesanan:
|
||||||
<span class="badge text-dark ${data?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}">
|
<span class="badge text-dark ${data?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}">
|
||||||
${data?.status_order}
|
${data?.status_order}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</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">
|
<hr class="my-2">
|
||||||
<p class="mb-1">Pemesan: <strong>${data?.order?.nama_pemesan || '-'}</strong></p>
|
<p class="mb-1">Pemesan: <strong>${data?.order?.nama_pemesan || '-'}</strong></p>
|
||||||
<p class="mb-1">Jenis Kelamin: <strong>${data?.order?.jenis_kelamin || '-'}</strong></p>
|
<p class="mb-1">Jenis Kelamin: <strong>${data?.order?.jenis_kelamin || '-'}</strong></p>
|
||||||
@ -228,12 +250,13 @@ function detailOrder(id){
|
|||||||
` : data?.order?.jenis_customer === "Karyawan RSAB Harapan Kita" ? `
|
` : 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">Bagian /Instalasi: <strong>${data?.order?.bagian_instalasi || '-'}</strong></p>
|
||||||
<p class="mb-1">No Ekstensien: <strong>${data?.order?.no_ekstensien || '-'}</strong></p>
|
<p class="mb-1">No Ekstensien: <strong>${data?.order?.no_ekstensien || '-'}</strong></p>
|
||||||
` :`
|
<p class="mb-1">NIP : <strong>${data?.order?.nip || '-'}</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">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">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">Nomor Kamar Perawatan: <strong>${data?.order?.no_kamar_perawatan || '-'}</strong></p>
|
||||||
<p class="mb-1">Kelas Perawatan: <strong>${data?.order?.kelas_perawatan || '-'}</strong></p>
|
<p class="mb-1">Kelas Perawatan: <strong>${data?.order?.kelas_perawatan || '-'}</strong></p>
|
||||||
`
|
` : ''
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -244,7 +267,7 @@ function detailOrder(id){
|
|||||||
`
|
`
|
||||||
|
|
||||||
document.getElementById('pesanan_container').innerHTML = html;
|
document.getElementById('pesanan_container').innerHTML = html;
|
||||||
document.getElementById('modalDetailOrderOf').addEventListener('hidden.bs.modal', () => {
|
document.getElementById('modalActionProgressOrder').addEventListener('hidden.bs.modal', () => {
|
||||||
new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')).show()
|
new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')).show()
|
||||||
}, { once:true});
|
}, { once:true});
|
||||||
})
|
})
|
||||||
@ -267,7 +290,7 @@ function approve(e){
|
|||||||
offcanvas.hide();
|
offcanvas.hide();
|
||||||
const data = $(e).data();
|
const data = $(e).data();
|
||||||
new bootstrap.Modal(modalActionOrderPekerjaan).show();
|
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 +')')
|
$("#confirmNoOrder").text(data?.no_order + ' (' + data?.nama_pemesan +')')
|
||||||
document.getElementById('formActionApproveOrder').setAttribute(`action`, `/dashboard/pending/update-detail-status/${data.id}`)
|
document.getElementById('formActionApproveOrder').setAttribute(`action`, `/dashboard/pending/update-detail-status/${data.id}`)
|
||||||
document.getElementById('modalActionApproveOrder').addEventListener('hidden.bs.modal', () => {
|
document.getElementById('modalActionApproveOrder').addEventListener('hidden.bs.modal', () => {
|
||||||
@ -313,3 +336,49 @@ document.getElementById('formActionApproveOrder').addEventListener('submit', fun
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function dataPendingPekerjaan(){
|
||||||
|
const offcanvas = bootstrap.Offcanvas.getInstance(document.getElementById('offcanvasKonfirmasiPesanan')) || new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan'));
|
||||||
|
offcanvas.hide();
|
||||||
|
new bootstrap.Modal(modalDataPending).show();
|
||||||
|
datatableDataPending.bootstrapTable('destroy')
|
||||||
|
datatableDataPending.bootstrapTable({
|
||||||
|
url: "/dashboard/data/pending-pekerjaan",
|
||||||
|
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: "datatablePesananPending",
|
||||||
|
icons: {
|
||||||
|
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
|
||||||
|
columns: "fas fa-th-large"
|
||||||
|
},
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: "Tanggal",
|
||||||
|
field: 'tgl',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Total",
|
||||||
|
formatter: function(value, row){
|
||||||
|
return row?.total
|
||||||
|
},
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
document.getElementById('modalActionInfoPending').addEventListener('hidden.bs.modal', () => {
|
||||||
|
new bootstrap.Offcanvas(document.getElementById('offcanvasKonfirmasiPesanan')).show()
|
||||||
|
}, { once:true});
|
||||||
|
}
|
||||||
|
|||||||
@ -10,13 +10,13 @@ function fetchDetailOrder(order_id){
|
|||||||
<div class="col-md-12 mb-3">
|
<div class="col-md-12 mb-3">
|
||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="row g-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;">
|
<img src="/gambar/${detail?.menu?.foto || 'default.jpg'}" alt="Foto Menu" class="img-fluid rounded shadow" style="max-height: 250px; width: 240px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5 p-2">
|
<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 || '-'}</strong></p>
|
<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">Jumlah: <span>${detail?.jumlah || 0}</span></p>
|
||||||
<p class="mb-1">Tanggal Pesan: <span>${detail?.tgl_antar || 0}</span></p>
|
<p class="mb-1">Tanggal Antar: <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">Harga: <strong>Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||||
<p class="mb-1">Status Pesanan:
|
<p class="mb-1">Status Pesanan:
|
||||||
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
|
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
|
||||||
@ -24,7 +24,8 @@ function fetchDetailOrder(order_id){
|
|||||||
${detail?.status_order}
|
${detail?.status_order}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
@ -39,11 +40,12 @@ function fetchDetailOrder(order_id){
|
|||||||
${data.bukti_pembayaran ? `
|
${data.bukti_pembayaran ? `
|
||||||
<div class="col-md-4 text-center mb-3 mb-md-0">
|
<div class="col-md-4 text-center mb-3 mb-md-0">
|
||||||
<div class="border rounded shadow-sm p-2 bg-light">
|
<div class="border rounded shadow-sm p-2 bg-light">
|
||||||
<img
|
<a href="/storage/${data?.bukti_pembayaran}" target="_blank">
|
||||||
src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
|
<img src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
|
||||||
alt="Bukti Pembayaran"
|
alt="Bukti Pembayaran"
|
||||||
class="img-fluid rounded"
|
class="img-fluid rounded"
|
||||||
style="max-height: 170px; width: auto;">
|
style="max-height: 170px; width: auto;">
|
||||||
|
</a>
|
||||||
<div class="text-muted small mt-2">Bukti Pembayaran</div>
|
<div class="text-muted small mt-2">Bukti Pembayaran</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -69,12 +71,12 @@ function fetchDetailOrder(order_id){
|
|||||||
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
|
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
|
||||||
<p class="mb-1">No Ekstensien: <strong>${data?.no_ekstensien || '-'}</strong></p>
|
<p class="mb-1">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">Nama Pasien: <strong>${data?.nama_pasien || '-'}</strong></p>
|
||||||
<p class="mb-1">Ruang Perawatan: <strong>${data?.ruang_perawatan || '-'}</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">Nomor Kamar Perawatan: <strong>${data?.no_kamar_perawatan || '-'}</strong></p>
|
||||||
<p class="mb-1">Kelas Perawatan: <strong>${data?.kelas_perawatan || '-'}</strong></p>
|
<p class="mb-1">Kelas Perawatan: <strong>${data?.kelas_perawatan || '-'}</strong></p>
|
||||||
`
|
` :''
|
||||||
}
|
}
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|||||||
@ -160,9 +160,12 @@
|
|||||||
},
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
title: "Kategori Customer",
|
title: "Kategori Customer",
|
||||||
field: 'jenis_customer',
|
formatter: function(value, row){
|
||||||
|
return row?.nama_institusi ? row?.nama_institusi + ' (MCU)': row?.jenis_customer;
|
||||||
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -6,17 +6,21 @@ function fetchDetailOrder(order_id){
|
|||||||
document.getElementById('pesanan_container').innerHTML =''
|
document.getElementById('pesanan_container').innerHTML =''
|
||||||
// Generate HTML untuk order_detail
|
// Generate HTML untuk order_detail
|
||||||
const detailHTML = (data?.order_detail || []).map(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 `
|
return `
|
||||||
<div class="col-md-12 mb-3">
|
<div class="col-md-12 mb-3">
|
||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="row g-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;">
|
<img src="/gambar/${detail?.menu?.foto || 'default.jpg'}" alt="Foto Menu" class="img-fluid rounded shadow" style="max-height: 250px; width: 240px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5 p-2">
|
<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 || '-'}</strong></p>
|
<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">Jumlah: <span>${detail?.jumlah || 0}</span></p>
|
||||||
<p class="mb-1">Tanggal Pesan: <span>${detail?.tgl_antar || 0}</span></p>
|
<p class="mb-1">Tanggal Antar: <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">Harga: <strong>Rp ${parseInt(detail?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
|
||||||
<p class="mb-1">Status Pesanan:
|
<p class="mb-1">Status Pesanan:
|
||||||
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
|
<span class="badge text-dark ${detail?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"
|
||||||
@ -24,7 +28,8 @@ function fetchDetailOrder(order_id){
|
|||||||
${detail?.status_order}
|
${detail?.status_order}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
@ -39,11 +44,12 @@ function fetchDetailOrder(order_id){
|
|||||||
${data.bukti_pembayaran ? `
|
${data.bukti_pembayaran ? `
|
||||||
<div class="col-md-4 text-center mb-3 mb-md-0">
|
<div class="col-md-4 text-center mb-3 mb-md-0">
|
||||||
<div class="border rounded shadow-sm p-2 bg-light">
|
<div class="border rounded shadow-sm p-2 bg-light">
|
||||||
<img
|
<a href="/storage/${data?.bukti_pembayaran}" target="_blank">
|
||||||
src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
|
<img src="/storage/${data.bukti_pembayaran || 'gambar/default.jpg'}"
|
||||||
alt="Bukti Pembayaran"
|
alt="Bukti Pembayaran"
|
||||||
class="img-fluid rounded"
|
class="img-fluid rounded"
|
||||||
style="max-height: 170px; width: auto;">
|
style="max-height: 170px; width: auto;">
|
||||||
|
</a>
|
||||||
<div class="text-muted small mt-2">Bukti Pembayaran</div>
|
<div class="text-muted small mt-2">Bukti Pembayaran</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -70,12 +76,12 @@ function fetchDetailOrder(order_id){
|
|||||||
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
|
<p class="mb-1">Bagian / Instalasi: <strong>${data?.bagian_instalasi || '-'}</strong></p>
|
||||||
<p class="mb-1">No Ekstensien: <strong>${data?.no_ekstensien || '-'}</strong></p>
|
<p class="mb-1">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">Nama Pasien: <strong>${data?.nama_pasien || '-'}</strong></p>
|
||||||
<p class="mb-1">Ruang Perawatan: <strong>${data?.ruang_perawatan || '-'}</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">Nomor Kamar Perawatan: <strong>${data?.no_kamar_perawatan || '-'}</strong></p>
|
||||||
<p class="mb-1">Kelas Perawatan: <strong>${data?.kelas_perawatan || '-'}</strong></p>
|
<p class="mb-1">Kelas Perawatan: <strong>${data?.kelas_perawatan || '-'}</strong></p>
|
||||||
`
|
` : ''
|
||||||
}
|
}
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|||||||
@ -63,12 +63,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Kategori Customer",
|
title: "Kategori Customer",
|
||||||
field: 'jenis_customer',
|
formatter: function(value, row){
|
||||||
|
return row?.nama_institusi ? row?.nama_institusi + ' (MCU)': row?.jenis_customer;
|
||||||
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Cara Pembayaran",
|
title: "Cara Pembayaran",
|
||||||
field: 'cara_pembayaran',
|
formatter: function(value, row){
|
||||||
|
return row?.cara_pembayaran || '-'
|
||||||
|
},
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
BIN
public/logo/gizi.png
Normal file
|
After Width: | Height: | Size: 216 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 42 KiB |
BIN
public/logo/icon.ico
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/logo/logo-kemkes-kiri.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/logo/nice.png
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
public/logo/no_nice.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
public/logo/qris.jpg
Normal file
|
After Width: | Height: | Size: 286 KiB |
|
Before Width: | Height: | Size: 758 B After Width: | Height: | Size: 758 B |
@ -17,7 +17,7 @@
|
|||||||
<title>{{ $title }}</title>
|
<title>{{ $title }}</title>
|
||||||
|
|
||||||
<meta name="description" content="" />
|
<meta name="description" content="" />
|
||||||
|
<link rel="icon" href="/logo/icon.ico" type="image/x-icon">
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
|
|||||||
188
resources/views/dashboard/label/index.blade.php
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="id">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Label {{ $label?->order?->no_order ?? '-' }}</title>
|
||||||
|
<style>
|
||||||
|
@page {
|
||||||
|
size: 80mm 130mm landscape;
|
||||||
|
margin: 4mm 1.5mm 2mm 1.5mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family:'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
|
||||||
|
font-size: 8.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: 11px;
|
||||||
|
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: 10.5px;
|
||||||
|
}
|
||||||
|
.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 {
|
||||||
|
margin-top:5px;
|
||||||
|
height: 40px; /* samakan tinggi logo */
|
||||||
|
}
|
||||||
|
.footer-text {
|
||||||
|
font-size: 12px;
|
||||||
|
margin-left:-12px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.footer-text-muted {
|
||||||
|
font-size: 10.5px;
|
||||||
|
}
|
||||||
|
</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">
|
||||||
|
@if($label->order?->jenis_customer === 'MCU')
|
||||||
|
<tr>
|
||||||
|
<td>Tanggal Pemeriksaan
|
||||||
|
</td>
|
||||||
|
<td>: {{ $label?->tgl_antar ? \Carbon\Carbon::parse($label->tgl_antar)->translatedFormat('d F Y') : '-' }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>{{ $label->order?->jenis_customer !== 'MCU' ? 'Nama Pemesan' : 'Nama Pasien'}}
|
||||||
|
{{ $label?->order?->jenis_customer === "Keluarga Pasien / Penunggu Pasien" ? '/ Pasien' : ''}}
|
||||||
|
</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?->nama_pemesan }} {{ $label?->order?->jenis_customer === "Keluarga Pasien / Penunggu Pasien" ? '/ ' . $label?->order?->nama_pasien : ''}}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@if($label?->order?->jenis_customer === "Keluarga Pasien / Penunggu Pasien")
|
||||||
|
<tr>
|
||||||
|
<td>Ruang Perawatan/No Kamar</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?->ruang_perawatan ?? '-'}} / {{ $label?->order?->no_kamar_perawatan ?? '-'}}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@elseif($label?->order?->jenis_customer === "Karyawan RSAB Harapan Kita")
|
||||||
|
<tr>
|
||||||
|
<td>Bagian/No Ekstensien </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?->bagian_instalasi ?? '-'}} / {{ $label?->order?->no_ekstensien ?? '-'}}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if ($label?->order?->nama_institusi)
|
||||||
|
<tr>
|
||||||
|
<td style="vertical-align: top;">Nama Institusi</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?->nama_institusi }}
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endif
|
||||||
|
<tr>
|
||||||
|
<td> {{ $label->order?->jenis_customer !== 'MCU' ? 'Pesanan' : 'Jenis MCU'}}</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>
|
||||||
|
@if($label->total_kalori)
|
||||||
|
<tr><td>Total Kalori</td><td>: {{ $label->total_kalori }}</td></tr>
|
||||||
|
@endif
|
||||||
|
<tr><td>Catatan</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?->catatan ?? '-' }}
|
||||||
|
</span></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" class="footer-logo">
|
||||||
|
<span class="footer-text">SELAMAT MENIKMATI</span>
|
||||||
|
<img src="{{ public_path('logo/iso_gizi.png') }}" alt="ISO 22000" class="footer-logo">
|
||||||
|
</div>
|
||||||
|
<span class="footer-text-muted">Makanan sebaiknya dikonsumsi dalam waktu maksimal 2 jam setelah diberikan</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</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
|
||||||
@ -19,7 +19,7 @@
|
|||||||
<meta name="description" content="" />
|
<meta name="description" content="" />
|
||||||
|
|
||||||
<!-- Favicon -->
|
<!-- Favicon -->
|
||||||
|
<link rel="icon" href="/logo/icon.ico" type="image/x-icon">
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
<!-- fontawosome CSS -->
|
<!-- 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="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 --}}
|
{{-- flatcpicker css --}}
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.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>
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
<input type="hidden" id="apakah_menu_siang">
|
<input type="hidden" id="apakah_menu_siang">
|
||||||
<input type="hidden" id="apakah_menu_sore">
|
<input type="hidden" id="apakah_menu_sore">
|
||||||
<input type="hidden" id="tgl_tersedia">
|
<input type="hidden" id="tgl_tersedia">
|
||||||
|
<input type="hidden" id="exist_foto">
|
||||||
<img id="cathering_order_photo" class="img-fluid rounded shadow" style="max-height: 370px; width:270px;" alt="Foto Menu">
|
<img id="cathering_order_photo" class="img-fluid rounded shadow" style="max-height: 370px; width:270px;" alt="Foto Menu">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
document.write(new Date().getFullYear());
|
document.write(new Date().getFullYear());
|
||||||
</script>
|
</script>
|
||||||
, made with by
|
, made with by
|
||||||
<a href="https://themeselection.com" target="_blank" class="footer-link fw-bolder">TIM SIMRS</a>
|
<span class="footer-link fw-bolder">TIM SIMRS</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@ -77,7 +77,7 @@
|
|||||||
<li class="menu-item {{ Request::is('dashboard/pending') ? 'active' : '' }}">
|
<li class="menu-item {{ Request::is('dashboard/pending') ? 'active' : '' }}">
|
||||||
<a href="/dashboard/pending" class="menu-link">
|
<a href="/dashboard/pending" class="menu-link">
|
||||||
<i class="menu-icon tf-icons bx bx-collection"></i>
|
<i class="menu-icon tf-icons bx bx-collection"></i>
|
||||||
<div data-i18n="Basic">Konfirmasi Pesanan<span class="badge badge-canter rounded-circle bg-danger ms-1 mb-1 fs-6" id="konfirmasi_pesanan"></span>
|
<div data-i18n="Basic">Konfirmasi Pesanan <span class="badge badge-canter rounded-circle bg-danger ms-1 mb-1 fs-6" id="konfirmasi_pesanan"></span>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@ -109,6 +109,14 @@
|
|||||||
<div data-i18n="User interface">Laporan Pesanan </div>
|
<div data-i18n="User interface">Laporan Pesanan </div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="menu-item {{ Request::is('dashboard/survey') ? 'active' : '' }}">
|
||||||
|
<a href="/dashboard/survey" class="menu-link">
|
||||||
|
<i class="menu-icon tf-icons bx bx-box"></i>
|
||||||
|
<div data-i18n="User interface">Survei </div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{-- <li class="menu-item {{ Request::is('dashboard/laporan-pesanan') ? 'active' : '' }}">
|
{{-- <li class="menu-item {{ Request::is('dashboard/laporan-pesanan') ? 'active' : '' }}">
|
||||||
|
|||||||
@ -30,7 +30,7 @@
|
|||||||
<li class="nav-item navbar-dropdown dropdown-user dropdown">
|
<li class="nav-item navbar-dropdown dropdown-user dropdown">
|
||||||
<a class="nav-link dropdown-toggle hide-arrow" href="javascript:void(0);" data-bs-toggle="dropdown">
|
<a class="nav-link dropdown-toggle hide-arrow" href="javascript:void(0);" data-bs-toggle="dropdown">
|
||||||
<div class="avatar avatar-online">
|
<div class="avatar avatar-online">
|
||||||
<img src="/assets/img/avatars/1.png" alt class="w-px-40 h-auto rounded-circle" />
|
<img src="/assets/img/avatars/8.jpg" alt class="w-px-40 h-auto rounded-circle" />
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-end">
|
<ul class="dropdown-menu dropdown-menu-end">
|
||||||
@ -39,12 +39,11 @@
|
|||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<div class="flex-shrink-0 me-3">
|
<div class="flex-shrink-0 me-3">
|
||||||
<div class="avatar avatar-online">
|
<div class="avatar avatar-online">
|
||||||
<img src="/assets/img/avatars/1.png" alt class="w-px-40 h-auto rounded-circle" />
|
<img src="/assets/img/avatars/8.jpg" alt class="w-px-40 h-auto rounded-circle" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<span class="fw-semibold d-block">John Doe</span>
|
<span class="fw-semibold d-block">Admin</span>
|
||||||
<small class="text-muted">Admin</small>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
<option value="Masyarakat Umum">Masyarakat Umum</option>
|
<option value="Masyarakat Umum">Masyarakat Umum</option>
|
||||||
<option value="Karyawan RSAB Harapan Kita">Karyawan RSAB Harapan Kita</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="Keluarga Pasien / Penunggu Pasien">Keluarga Pasien / Penunggu Pasien</option>
|
||||||
|
<option value="MCU">MCU</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||