// ======================= // DATA SETUP // ======================= let checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}'); let order_id = sessionStorage.getItem('order_id') || '[]'; // ======================= // EVENT ON LOAD // ======================= document.addEventListener('DOMContentLoaded', () => { $("#cartButton").addClass('d-none'); $("#no_order_result").val(order_id) let currentStep = 0; let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); // Redirect jika cart kosong if (cart.length === 0) { window.location.href = "/"; return; } // Setup button step document.querySelectorAll('.next-step').forEach(btn => { btn.addEventListener('click', async () => { if (currentStep === 0){ if(!validateStepOne()) return isiKonfirmasi(); currentStep++; showStep(currentStep); }else if(currentStep === 1){ const {isValid, errorMessage} =validateCartBeforeSubmit(); if (!isValid) { alert(errorMessage); return } if (!sessionStorage.getItem('order_id')) { await submitOrderToServer(); // async function simpan ke server } currentStep++; showStep(currentStep) }else if(currentStep === 2){ renderCartSummary() } }); }); document.querySelectorAll('.prev-step').forEach(btn => { btn.addEventListener('click', () => { if (currentStep > 0) { currentStep--; showStep(currentStep); } }); }); // Inisialisasi tampilan dan data renderCartSummary(); showStep(currentStep); isiKonfirmasi(); toggleCustomerFields() document.getElementById('no_order_display').textContent = order_id }); // ======================= // FUNGSI STEP // ======================= const steps = document.querySelectorAll('.form-step'); const progressBar = document.getElementById('stepProgressBar'); 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}`; for(let i = 1; i <= total; i++){ const circle = document.getElementById(`step-circle-${i}`) if(circle){ circle.classList.toggle('active', i === index + 1) } } } // ======================= // FUNGSI BIODATA // ======================= 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(); } } $('input[name="jenis_customer"]').on('change', toggleCustomerFields); toggleCustomerFields(); if (typeof checkout_biodata === 'object') { if (checkout_biodata.jenis_customer) { $(`input[name="jenis_customer"][value="${checkout_biodata.jenis_customer}"]`).prop('checked', true); } if(checkout_biodata.jenis_kelamin){ $(`input[name="jenis_kelamin"][value="${checkout_biodata.jenis_kelamin}"]`).prop('checked', true); } $('#nama_pemesan').val(checkout_biodata.nama_pemesan); // $('#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 isiKonfirmasi() { const biodata = { jenis_customer: $('input[name="jenis_customer"]:checked').val(), nama_pemesan: $('#nama_pemesan').val(), jenis_kelamin: $('input[name="jenis_kelamin"]:checked').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; renderCartSummary(); } // ======================= // FUNGSI CART / PESANAN // ======================= function renderCartSummary() { const container = document.getElementById('checkout_cart_summary'); let now = new Date(); let today = now.toISOString().split('T')[0]; let isAfter12 = now.getHours() >= 12; container.innerHTML = ''; let totalKeseluruhan = 0; let carts = JSON.parse(sessionStorage.getItem('cart') || '[]'); carts.forEach((item) => { const pesananList = Array.isArray(item.pesanan) ? item.pesanan : []; let pesananHTML = ''; let countDate = pesananList.length; pesananList.forEach((p, i) => { let isTodayAndLate = p.tgl === today && isAfter12 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); totalKeseluruhan += itemTotal 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); }); container.insertAdjacentHTML('beforeend', `
Total Keseluruhan: Rp ${totalKeseluruhan.toLocaleString('id-ID')}
`); document.getElementById('no_order_price').textContent = 'Rp ' + totalKeseluruhan.toLocaleString('id-ID') } // ======================= // EVENT HANDLER FIELD // ======================= function onJumlahChange(itemId, index) { let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); const input = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .jumlah-input`); if (!isNaN(input.value)) { cart.find(item => item.id === itemId).pesanan[index].jumlah = parseInt(input.value); sessionStorage.setItem('cart', JSON.stringify(cart)); isiKonfirmasi(); } } function onTanggalChange(itemId, index) { let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); const input = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .tanggal-input`); cart.find(item => item.id === itemId).pesanan[index].tgl = input.value; sessionStorage.setItem('cart', JSON.stringify(cart)); renderCartSummary(); } function onKategoriChange(itemId, index) { let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); 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)); renderCartSummary(); } // ======================= // TAMBAH / HAPUS PESANAN // ======================= function addOrderDate(itemId) { let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); 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(); } } function removeOrderDate(itemId, index, count) { let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); const item = cart.find(i => i.id === itemId); if(count == 1){ cart = cart.filter(i => i.id !== itemId); sessionStorage.setItem('cart', JSON.stringify(cart)); }else if(item && Array.isArray(item.pesanan) && item.pesanan.length > index) { item.pesanan.splice(index, 1); sessionStorage.setItem('cart', JSON.stringify(cart)); } renderCartSummary(); } function removeCartItem(itemId){ let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); cart = cart.filter(i => i.id !== itemId); sessionStorage.setItem('cart', JSON.stringify(cart)); renderCartSummary() } // validasi step one dan sebelum submit function validateStepOne() { const jenisCustomer = document.querySelector('input[name="jenis_customer"]:checked'); const jenisKelamin = document.querySelector('input[name="jenis_kelamin"]:checked'); const namaPemesan = document.getElementById('nama_pemesan').value.trim(); const noWA = document.getElementById('no_whatsapp').value.trim(); if (!jenisCustomer) { alert('Silakan pilih jenis customer.'); return false; } if (!namaPemesan) { alert('Silakan isi nama pemesan.'); return false; } if (!jenisKelamin) { alert('Silakan pilih jenis kelamin.'); return false; } if (!noWA) { alert('Silakan isi nomor WhatsApp.'); return false; } // Validasi tambahan sesuai jenis customer const selected = jenisCustomer.value; if (selected === 'Karyawan RSAB Harapan Kita') { const bagian = document.getElementById('bagian_instalasi').value.trim(); const ekstension = document.getElementById('no_ekstensien').value.trim(); if (!bagian) { alert('Silakan lengkapi data karyawan.'); return false; } } else if (selected === 'Keluarga Pasien / Penunggu Pasien') { const namaPasien = document.getElementById('nama_pasien').value.trim(); const ruang = document.getElementById('ruang_perawatan').value; const noKamar = document.getElementById('no_kamar').value.trim(); const kelas = document.getElementById('kelas_perawatan').value; if (!namaPasien || !ruang || !noKamar || !kelas) { alert('Silakan lengkapi data pasien.'); return false; } } return true; } function validateCartBeforeSubmit() { const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); let isValid = true; let errorMessage = ""; cart.forEach((item, index) => { const pesananList = item.pesanan || []; pesananList.forEach((pesanan, i) => { if (!pesanan.tgl) { isValid = false; errorMessage = `Tanggal belum diisi pada item "${item.nama_menu}" (baris ${i + 1})`; } else if (!pesanan.kategoriPemesanan) { isValid = false; errorMessage = `Kategori pemesanan belum dipilih pada item "${item.nama_menu}" (baris ${i + 1})`; } else if (!pesanan.jumlah || pesanan.jumlah <= 0) { isValid = false; errorMessage = `Jumlah harus lebih dari 0 pada item "${item.nama_menu}" (baris ${i + 1})`; } }); }); return { isValid, errorMessage }; } function hitungTotalHarga(){ const biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}'); const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); let total =0; cart.forEach(item => { const harga = biodata.jenis_customer === "Karyawan RSAB Harapan Kita" ? item.harga_karyawan || 0 : item.harga_kp || 0 const itemTotal = item.pesanan?.reduce((sum, p) => sum + (p.jumlah * harga), 0); total += itemTotal }) return total; } function copyNoRek() { const text = document.getElementById('noRekText').innerText; navigator.clipboard.writeText(text).then(() => { alert("Nomor rekening berhasil disalin: " + text); }).catch(err => { console.error('Gagal menyalin: ', err); alert("Gagal menyalin teks."); }); } function copyNoOrder() { const text = document.getElementById('no_order_display').innerText; navigator.clipboard.writeText(text).then(() => { alert("Nomor order berhasil disalin: " + text); }).catch(err => { console.error('Gagal menyalin: ', err); alert("Gagal menyalin teks."); }); }