From 911d4fe68e4882a4be0af607f3f4c9d5b48f772e Mon Sep 17 00:00:00 2001 From: JokoPrasetio Date: Tue, 22 Jul 2025 05:56:06 +0700 Subject: [PATCH] progreess --- app/Http/Controllers/CustomerController.php | 2 +- public/js/checkout/index.js | 228 +++++++++++++++--- public/js/order_guest/checkout.js | 57 +---- public/js/order_guest/index.js | 19 +- .../guest/checkout/checkout_payment.blade.php | 153 ++++++++++++ .../views/guest/checkout_payment.blade.php | 131 ---------- 6 files changed, 363 insertions(+), 227 deletions(-) create mode 100644 resources/views/guest/checkout/checkout_payment.blade.php delete mode 100644 resources/views/guest/checkout_payment.blade.php diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 182ccff..b836b8c 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -168,7 +168,7 @@ class CustomerController extends Controller $payload = [ 'title' => 'Checkout ' ]; - return view('guest.checkout_payment', $payload); + return view('guest.checkout.checkout_payment', $payload); } public function submitCheckout(){ diff --git a/public/js/checkout/index.js b/public/js/checkout/index.js index 5d967b0..7260422 100644 --- a/public/js/checkout/index.js +++ b/public/js/checkout/index.js @@ -1,42 +1,208 @@ - - document.addEventListener('DOMContentLoaded', () => { $("#cartButton").addClass('d-none'); - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - if (cart.length === 0) { - window.location.href="/" - return - } - function toggleCustomerFields() { - const selected = $('input[name="jenis_customer"]:checked').val(); + const steps = document.querySelectorAll('.form-step'); + const progressBar = document.getElementById('stepProgressBar'); + let currentStep = 0; - if (selected === 'Karyawan RSAB Harapan Kita') { - $('.karyawan').show(); - $('.pasien').hide(); - } else if (selected === 'Keluarga Pasien / Penunggu Pasien') { - $('.pasien').show(); - $('.karyawan').hide(); - } else { - $('.karyawan, .pasien').hide(); - } + let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + let checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}'); + + if (cart.length === 0) { + window.location.href = "/"; + return; + } + + function toggleCustomerFields() { + const selected = $('input[name="jenis_customer"]:checked').val(); + if (selected === 'Karyawan RSAB Harapan Kita') { + $('.karyawan').show(); + $('.pasien').hide(); + } else if (selected === 'Keluarga Pasien / Penunggu Pasien') { + $('.pasien').show(); + $('.karyawan').hide(); + } else { + $('.karyawan, .pasien').hide(); } + } - // Jalankan saat load awal (jika radio sudah terpilih) - toggleCustomerFields(); + $('input[name="jenis_customer"]').on('change', toggleCustomerFields); + toggleCustomerFields(); - // Jalankan saat user memilih salah satu radio - $('input[name="jenis_customer"]').on('change', function() { - toggleCustomerFields(); + if (typeof checkout_biodata === 'object') { + if (checkout_biodata.jenis_customer) { + $(`input[name="jenis_customer"][value="${checkout_biodata.jenis_customer}"]`).prop('checked', true); + } + $('#nama_pemesan').val(checkout_biodata.nama_pemesan); + $('#jenis_kelamin').val(checkout_biodata.jenis_kelamin); + $('#tanggal_lahir').val(checkout_biodata.tanggal_lahir); + $('#tinggi_badan').val(checkout_biodata.tinggi_badan); + $('#berat_badan').val(checkout_biodata.berat_badan); + $('#no_whatsapp').val(checkout_biodata.no_whatsapp); + $('#nama_pasien').val(checkout_biodata.nama_pasien); + $('#ruang_perawatan').val(checkout_biodata.ruang_perawatan); + $('#no_kamar').val(checkout_biodata.no_kamar); + $('#kelas_perawatan').val(checkout_biodata.kelas_perawatan); + $('#bagian_instalasi').val(checkout_biodata.bagian_instalasi); + $('#no_ekstensien').val(checkout_biodata.no_ekstensien); + } + + function showStep(index) { + steps.forEach((step, i) => { + step.classList.toggle('active', i === index); + step.classList.toggle('d-none', i !== index); }); + const total = steps.length; + const progress = ((index + 1) / total) * 100; + progressBar.style.width = progress + '%'; + progressBar.innerText = `Langkah ${index + 1} dari ${total}`; + } - $("#checkoutFormFinal").on('submit', function(e){ - if(cart.length === 0){ - e.preventDefault(); - alert("Keranjang kosong. Silakan pilih menu terlebih dahulu!"); - return; + function isiKonfirmasi() { + const biodata = { + jenis_customer: $('input[name="jenis_customer"]:checked').val(), + nama_pemesan: $('#nama_pemesan').val(), + jenis_kelamin: $('#jenis_kelamin').val(), + tanggal_lahir: $('#tanggal_lahir').val(), + tinggi_badan: $('#tinggi_badan').val(), + berat_badan: $('#berat_badan').val(), + no_whatsapp: $('#no_whatsapp').val(), + nama_pasien: $('#nama_pasien').val(), + ruang_perawatan: $('#ruang_perawatan').val(), + no_kamar: $('#no_kamar').val(), + kelas_perawatan: $('#kelas_perawatan').val(), + bagian_instalasi: $('#bagian_instalasi').val(), + no_ekstensien: $('#no_ekstensien').val(), + }; + + sessionStorage.setItem('checkout_biodata', JSON.stringify(biodata)); + checkout_biodata = biodata; // Update global var + renderCartSummary(); + } + + function renderCartSummary() { + const container = document.getElementById('checkout_cart_summary'); + container.innerHTML = ''; + + cart.forEach((item) => { + const pesananList = Array.isArray(item.pesanan) ? item.pesanan : []; + + let pesananHTML = ''; + pesananList.forEach((p, i) => { + pesananHTML += ` +
+
+ +
+
+ +
+
+ +
+
+ +
+
`; + }); + + const harga = checkout_biodata.jenis_customer === 'Karyawan RSAB Harapan Kita' ? item.harga_karyawan || 0 : item.harga_kp || 0; + const itemTotal = pesananList.reduce((sum, p) => sum + (p.jumlah * harga), 0); + + const itemHTML = ` +
+
+
+ ${item.nama_menu} +
+
+
+
${item.nama_menu}
+
Rp ${parseInt(harga).toLocaleString('id-ID')}
+

${item.deskripsi || ''}

+ ${pesananHTML} +
+ +
Total: Rp ${itemTotal.toLocaleString('id-ID')}
+ +
+
+
+
+
`; + container.insertAdjacentHTML('beforeend', itemHTML); + }); + } + + window.onTanggalChange = function (itemId, index) { + const tanggalInput = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .tanggal-input`).value; + cart.forEach(item => { + if (item.id === itemId) item.pesanan[index].tgl = tanggalInput; + }); + sessionStorage.setItem('cart', JSON.stringify(cart)); + }; + + window.onKategoriChange = function (itemId, index) { + const kategori = $(`[data-item-id='${itemId}'][data-index='${index}'] .kategori-pemesanan-input`).val(); + cart.find(item => item.id === itemId).pesanan[index].kategoriPemesanan = kategori; + sessionStorage.setItem('cart', JSON.stringify(cart)); + }; + + window.onJumlahChange = function (itemId, index) { + const jumlahInput = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .jumlah-input`).value; + if (!isNaN(jumlahInput)) { + cart.find(item => item.id === itemId).pesanan[index].jumlah = parseInt(jumlahInput); + sessionStorage.setItem('cart', JSON.stringify(cart)); + isiKonfirmasi(); } - document.getElementById('cart_data').value = JSON.stringify(cart) - }); -}); + }; + window.addOrderDate = function(itemId) { + const item = cart.find(i => i.id === itemId); + if (item && Array.isArray(item.pesanan)) { + item.pesanan.push({ tgl: '', jumlah: 1, kategoriPemesanan: '' }); + sessionStorage.setItem('cart', JSON.stringify(cart)); + renderCartSummary(); + } + } + + window.removeOrderDate = function(itemId, index) { + const item = cart.find(i => i.id === itemId); + + if (item && Array.isArray(item.pesanan) && item.pesanan.length > index) { + item.pesanan.splice(index, 1); + sessionStorage.setItem('cart', JSON.stringify(cart)); + renderCartSummary(); + } + } + + + + document.querySelectorAll('.next-step').forEach(btn => { + btn.addEventListener('click', () => { + if (currentStep === 0) isiKonfirmasi(); + if (currentStep < steps.length - 1) { + currentStep++; + showStep(currentStep); + } + }); + }); + + document.querySelectorAll('.prev-step').forEach(btn => { + btn.addEventListener('click', () => { + if (currentStep > 0) { + currentStep--; + showStep(currentStep); + } + }); + }); + + showStep(currentStep); + isiKonfirmasi(); +}); \ No newline at end of file diff --git a/public/js/order_guest/checkout.js b/public/js/order_guest/checkout.js index d31d05b..49f5d80 100644 --- a/public/js/order_guest/checkout.js +++ b/public/js/order_guest/checkout.js @@ -94,26 +94,7 @@ let orderIndex = 0; } - function addOrderDate(itemId) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const item = cart.find(i => i.id === itemId); - if (item) { - item.pesanan.push({ tgl: '', jumlah: 1 }); - sessionStorage.setItem('cart', JSON.stringify(cart)); - renderCartList(); - - } - } - - function removeOrderDate(itemId, index) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const item = cart.find(i => i.id === itemId); - if (item && item.pesanan.length > index) { - item.pesanan.splice(index, 1); - sessionStorage.setItem('cart', JSON.stringify(cart)); - renderCartList(); - } - } + function removeCartItem(itemId){ let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); @@ -123,41 +104,11 @@ let orderIndex = 0; renderCartList() } - function onJumlahChange(itemId, index) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const jumlahInput = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .jumlah-input`).value; - if (!isNaN(jumlahInput)) { - cart.forEach(item => { - if (item.id === itemId) { - item.pesanan[index].jumlah = parseInt(jumlahInput); - } - }); - sessionStorage.setItem('cart', JSON.stringify(cart)); - renderCartList(); - } - } + - function onTanggalChange(itemId, index) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const tanggalInput = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .tanggal-input`).value; - cart.forEach(item => { - if (item.id === itemId) { - item.pesanan[index].tgl = tanggalInput; - } - }); - sessionStorage.setItem('cart', JSON.stringify(cart)); - validateCheckoutButton(); - } + - function onKategoriChange(itemId, index) { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - const item = cart.find(i => i.id === itemId); - if (!item) return; - - const kategori = $(`[data-item-id='${itemId}'][data-index='${index}'] .kategori-pemesanan-input`).val(); - item.pesanan[index].kategoriPemesanan = kategori; - sessionStorage.setItem('cart', JSON.stringify(cart)); - } + function renderCartTotalOnly() { diff --git a/public/js/order_guest/index.js b/public/js/order_guest/index.js index 13ef420..dec3083 100644 --- a/public/js/order_guest/index.js +++ b/public/js/order_guest/index.js @@ -1,13 +1,8 @@ $(document).ready(function () { - // Auto render setiap buka offcanvas - - cartSidebar.addEventListener('shown.bs.offcanvas', renderCartList); - cartSidebar.addEventListener('hidden.bs.offcanvas', function () { - const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); - if (cart.length > 0) { - $('#floatingCartButton').removeClass('d-none'); - } - }); + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + if (cart.length > 0) { + $('#floatingCartButton').removeClass('d-none'); + } }); @@ -57,9 +52,9 @@
Harga
Karyawan:
-
Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}
+
Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}
Keluarga Pasien:
-
Rp ${parseInt(menu.harga_keluarga_pasien).toLocaleString('id-ID')}
+
Rp ${parseInt(menu.harga_keluarga_pasien).toLocaleString('id-ID')}
@@ -228,6 +223,7 @@ harga_kp : $("#cathering_order_price_keluarga_pasien").text(), foto: $('#cathering_order_photo').attr('src'), jenis_menu: $('#cathering_order_jenis_menu').text(), + deskripsi:$("#cathering_order_deskripsi").text(), pesanan : orders } cart.push(orderItem) @@ -271,6 +267,7 @@ harga_kp : $(e).data('harga_keluarga_pasien'), foto: $(e).data('foto'), jenis_menu: $(e).data('jenis_menu'), + deskripsi: $(e).data('deskripsi'), pesanan : orders } cart.push(orderItem) diff --git a/resources/views/guest/checkout/checkout_payment.blade.php b/resources/views/guest/checkout/checkout_payment.blade.php new file mode 100644 index 0000000..24db248 --- /dev/null +++ b/resources/views/guest/checkout/checkout_payment.blade.php @@ -0,0 +1,153 @@ +@extends('guest.layout.main') +@section('body_main_guests') + +
+
+
+

Checkout Order

+ + Kembali ke Menu + +
+ + {{-- Form Identitas --}} +
+ @csrf +
+
+ Langkah 1 dari 2 +
+
+ {{-- STEP ONE --}} +
+
+ +
+ +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + {{-- Pasien --}} +
+ + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ {{-- End Pasien --}} + + {{-- Karyawan --}} +
+ + +
+
+ + +
+ {{-- End Karyawan --}} +
+ +
+ + + + {{-- STEP TWO --}} +
+
Langkah 2: Konfirmasi Pemesanan
+ + {{-- Ringkasan Pesanan --}} +
Pesanan Gizi
+ +
+ {{-- Akan diisi oleh JavaScript --}} +
+ + {{-- Tombol Navigasi --}} +
+ + +
+
+ +
+
+ +
+ + +@endsection diff --git a/resources/views/guest/checkout_payment.blade.php b/resources/views/guest/checkout_payment.blade.php deleted file mode 100644 index dc2896e..0000000 --- a/resources/views/guest/checkout_payment.blade.php +++ /dev/null @@ -1,131 +0,0 @@ -@extends('guest.layout.main') -@section('body_main_guests') - -
-
-
-

Checkout Order

- - Kembali ke Menu - -
- - - - {{-- Form Identitas --}} -
- @csrf -
- -
- -
- - -
-
- - -
-
- - -
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- - {{-- Pasien --}} -
- - -
-
- - -
- -
- - -
- -
- - -
- {{-- End Pasien --}} - - {{-- Karyawan --}} -
- - -
-
- - -
- {{-- End Karyawan --}} -
- - -
-
-
- - -@endsection