$(document).ready(function () { // Auto render setiap buka offcanvas const cartSidebar = document.getElementById('cartSidebar'); 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'); } }); }); function fetchMenu(filter = {}) { const containerGuest = $("#order_guest_id"); let params = new URLSearchParams({ page: filter.page || 1, per_page: filter.per_page || 6, search: filter.search || '', jenis_menu: filter.jenis_menu || '' }).toString(); containerGuest.html('

Memuat data....

'); fetch(`/datamenu?${params}`) .then(res => res.json()) .then(res => { if (!res.status){ return containerGuest.html('

Gagal Memuat Data...

'); } const session = JSON.parse(sessionStorage.getItem('customerData') || '{}') let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); if(cart.length > 0){ updateCartCount(cart.length) } if(session.nama_customer){ $("#welcomeMessage").html(`Selamat Datang, ${session.nama_customer} !`) } const menus = res.data.data || []; if (menus.length === 0){ return containerGuest.html('

Pencarian tidak ditemukan.

'); } let html = '
'; menus.forEach(menu => { let hargaResult = 0; if(session.jenis_customer === "Karyawan RSAB Harapan Kita"){ hargaResult = menu.harga_karyawan }else if(session.jenis_customer === "Keluarga Pasien / Penunggu Pasien"){ hargaResult = menu.harga_keluarga_pasien }else{ hargaResult = menu.harga_public } html += `
${menu.nama_menu}
${menu.nama}

Rp ${parseInt(hargaResult).toLocaleString('id-ID')}

${menu.deskripsi || ''}

${(menu.klasifikasiMenu || []).map(tag => `${tag.nama_kategori_diet}`).join('')}
`; }); html += '
'; html += `
` // Pagination buttons if (res.data.last_page > 1) { html += `
`; for (let i = 1; i <= res.data.last_page; i++) { html += ` `; } html += `
`; } containerGuest.html(html); }) .catch(err => { containerGuest.html('

Terjadi kesalahan saat memuat data.

'); console.error(err); }); } const modalCheckout = $("#checkoutModal") function orderMenu(e){ const klasifikasiStr = $(e).data('klasifikasi_menu') || ''; const tags = klasifikasiStr.split(',').map(tag => tag.trim()).filter(tag => tag !== '') const klasifikasiMenu =tags.map(tag => ` ${tag} `).join(''); modalCheckout.modal("show") $('#cathering_order_photo').attr('src', `/gambar/${$(e).data('foto')}`) $('#cathering_order_name').text($(e).data('nama_menu')) $('#cathering_order_price').text("Rp " + parseInt($(e).data('harga')).toLocaleString('id-ID')) $("#tag_klasifikasi_menu").html(klasifikasiMenu) $('#order_input_wrapper').empty(); addOrderRow(); } let orderIndex = 0; function addOrderRow(data = {}) { orderIndex++; const html = `
`; $('#order_input_wrapper').append(html); } function removeOrderRow(index) { $(`#order_input_wrapper [data-row="${index}"]`).remove(); } function updateCartCount(count) { const $cartCount = $('#cartCount'); if (count > 0) { $cartCount.text(count).show(); let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); let totalHarga = cart.reduce((total, item) => { const harga = parseInt(item.harga.replace(/[^\d]/g, '')) || 0; const subtotal = item.pesanan.reduce((sum, p) => sum + (p.jumlah * harga), 0); return total + subtotal; }, 0); $('#floatingCartButton').removeClass('d-none'); $('#floatingCartCount').text(count); $('#floatingCartTotal').text('Rp ' + totalHarga.toLocaleString('id-ID')); $('#floatingCartDesc').text(cart[0].nama_menu); } else { $cartCount.hide(); $('#floatingCartButton').addClass('d-none'); } } $("#checkoutForm").on('submit', function(e){ e.preventDefault(); const orders = []; let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); $("#order_input_wrapper .row").each(function(){ const tgl = $(this).find('input[type="date"]').val(); const jumlah = $(this).find('input[type="number"]').val(); if(tgl && jumlah > 0){ orders.push({ tgl, jumlah}) } }) let existingItem = cart.find(item => item.nama_menu === $("#cathering_order_name").text()); if(existingItem){ orders.forEach(newOrder => { const existingOrder =existingItem.pesanan.find(p => p.tgl === newOrder.tgl) if(existingOrder){ existingOrder.jumlah += newOrder.jumlah; }else{ existingItem.pesanan.push(newOrder) } }) }else{ const orderItem ={ id:Date.now(), nama_menu : $("#cathering_order_name").text(), harga : $("#cathering_order_price").text(), foto: $('#cathering_order_photo').attr('src'), pesanan : orders } cart.push(orderItem) } sessionStorage.setItem('cart', JSON.stringify(cart)) updateCartCount(cart.length) modalCheckout.modal('hide') }) function renderCartList() { $("#cartSidebar").offcanvas('show') $('#floatingCartButton').addClass('d-none'); const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); let total = 0; const html = cart.map(item => { const hargaNum = parseInt(item.harga.replace(/[^\d]/g, '')); let pesananHTML = ''; item.pesanan.forEach((p, i) => { pesananHTML += `
`; }); const itemTotal = item.pesanan.reduce((sum, p) => sum + (p.jumlah * hargaNum), 0); total += itemTotal; return `
${item.nama_menu}
${item.harga}
${pesananHTML}
Total: Rp ${itemTotal.toLocaleString('id-ID')}
`; }).join(''); $('#cartListContainer').html(html); $('#cartTotal').text('Rp ' + total.toLocaleString('id-ID')); } 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') || '[]'); cart = cart.filter(i => i.id !== itemId); sessionStorage.setItem('cart', JSON.stringify(cart)); updateCartCount(cart.length); 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 renderCartTotalOnly() { const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); let total = 0; cart.forEach(item => { const hargaNum = parseInt(item.harga.replace(/[^\d]/g, '')); const itemTotal = item.pesanan.reduce((sum, p) => sum + (p.jumlah * hargaNum), 0); total += itemTotal; }); $('#cartTotal').text('Rp ' + total.toLocaleString('id-ID')); } function updateFloatingCartButton() { const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); const totalItem = cart.reduce((sum, item) => { return sum + item.pesanan.reduce((s, p) => s + p.jumlah, 0); }, 0); const totalHarga = cart.reduce((sum, item) => { const harga = parseInt(item.harga.replace(/[^\d]/g, '')); return sum + item.pesanan.reduce((s, p) => s + (p.jumlah * harga), 0); }, 0); if (cart.length > 0) { $('#floatingCartButton').removeClass('d-none'); $('#floatingCartCount').text(totalItem); $('#floatingCartTotal').text('Rp ' + totalHarga.toLocaleString('id-ID')); $('#floatingCartDesc').text(`Total pesanan dari ${cart[0].nama_menu}`); } else { $('#floatingCartButton').addClass('d-none'); } }