$(document).ready(function () { const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); if (cart.length > 0) { $('#floatingCartButton').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 = {}) { const containerGuest = $("#order_guest_id"); $("#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 = `

Cara Pemesanan

`; cara_pesan.forEach((cara, index) => { html += `
${cara.type}
Panduan pemesanan
`; }); html += `
`; containerGuest.html(html); GLightbox({ selector: '.glightbox', touchNavigation: true, loop: true, zoomable: true, autoplayVideos: true }); return } let params = new URLSearchParams({ page: filter.page || 1, per_page: filter.per_page || 50, search: filter.search || '', jenis_menu: filter.jenis_menu || '', tanggal_awal: filter.tanggal_awal || '', tanggal_akhir: filter.tanggal_akhir || '', }).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(filter.jenis_menu === "konsultasi"){ const jk = res.data|| []; console.log(jk); $("#tanggal-filter").addClass('d-none'); let html = `

Jadwal Konsultasi

`; jk.forEach(jadwal => { html += `
${jadwal.nama_dokter}
${jadwal.nama_dokter}
Jadwal Tersedia
${jadwal.tgl_available?.length ? `
${jadwal.tgl_available .map(item => { const hari = Number(item?.tgl_harian); if (!hari) return null; const now = new Date(); const tahun = now.getFullYear(); const bulanIni = now.getMonth(); const hariIni = now.getDate(); const bulan = hari < hariIni ? bulanIni + 1 : bulanIni; const date = new Date(tahun, bulan, hari); const isToday = date.toDateString() === now.toDateString(); const isTomorrow = new Date(date.getTime() - 86400000).toDateString() === now.toDateString(); return { date, display: date.toLocaleDateString('id-ID', { day: '2-digit', month: 'short', year: '2-digit' }), isToday, isTomorrow }; }) .filter(Boolean) .sort((a, b) => a.date - b.date) .map(o => ` ${o.display} ${o.isToday ? ' Hari ini' : ''} ${o.isTomorrow ? ' Besok' : ''} `) .join('') }
` : `

Belum ada jadwal tersedia

` }
`; }); html += `
`; return containerGuest.html(html); }else{ const menus = res.data.data || []; const groups = {}; menus.forEach(menu => { const key = menu.group_label || 'Tanpa Tanggal' if (!groups[key]) groups[key] = []; groups[key].push(menu); }); if (menus.length === 0){ return containerGuest.html(`
Tidak ada menu
Belum ada menu yang tersedia untuk saat ini.
`); } let html = '
'; for (const [label, list] of Object.entries(groups)) { let scheduleInfo = ''; if (label === "Menu Sameday") { scheduleInfo = ` `; } else { scheduleInfo = `
Dipesan maksimal H-1 sebelum pukul 13.00 WIB
`; } html += `
${label}
${scheduleInfo}
`; list?.forEach(menu => { html += `
`; }); } html += '
'; html += `
`; if(res.data.total > 50){ 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 el = $(e); $("#scroll-top").addClass('d-none'); const tags = (el.data('klasifikasi_menu') || '').split(',').filter(Boolean).map(tag => tag.trim()); const kaloriRaw = el.data('kalori'); let kalori = []; 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 siang = el.data('apakah_menu_siang'); const sore = el.data('apakah_menu_sore'); const klasifikasiMenu = tags.map(tag => ` ${tag} `).join(''); const resultKkal = kalori.length > 0 ? kalori.map(kkal => `${kkal ? kkal + ' kal' : ''}`).join('') : ''; const tglMenuTersedia = `
${someday ? 'Tersedia setiap hari (Senin - Minggu)' : el.data('tgl_tersedia') ? `Tersedia pada tanggal: ${el.data('tgl_tersedia')}` : 'Tidak ada info tanggal tersedia'}
Menu: ${someday ? 'Sameday' : 'Menu Normal'}
${ siang && sore ? ' Tersedia untuk makan siang dan sore' : siang ? ' Tersedia untuk makan siang' : sore ? ' Tersedia untuk makan sore' : ' Tidak tersedia untuk waktu makan apapun' }
`; $('#checkoutModal').modal('show'); $('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.jpg'}`); $('#cathering_order_name').html(`
${el.data('nama_menu')} ${resultKkal}
`); $('#cathering_order_menu_id').val(el.data('id')); $('#cathering_order_jenis_menu').val(el.data('jenis_menu')); $('#cathering_order_deskripsi').text(el.data('deskripsi') || ''); $('#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')); $('#tag_klasifikasi_menu').html(klasifikasiMenu); $('#tgl_menu_tersedia').html(tglMenuTersedia); $('#apakah_someday').val(someday ? 1 : 0); $('#apakah_menu_siang').val(siang ? 1 : 0); $('#apakah_menu_sore').val(sore ? 1 : 0); $('#tgl_tersedia').val(el.data('tgl_tersedia')); } function updateCartCount(count) { const $cartCount = $('#cartCount'); if (count > 0) { $cartCount.text(count).show(); let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); let menuNames = cart.map(item => item.nama_menu).join(', '); const maxLength = 50; if (menuNames.length > maxLength) { menuNames = menuNames.substring(0, maxLength).trim() + '...'; } $('#menuBtn').removeClass('d-none'); $('#floatingCartButton').removeClass('d-none'); $('#floatingCartCount').text(cart.length); $('#floatingCartDesc').text(menuNames); $("#scroll-top").addClass('d-none'); } else { $cartCount.hide(); $('#floatingCartButton').addClass('d-none'); $('#menuBtn').addClass('d-none'); } } function parseRupiahToNumber(rpText) { return parseInt(rpText.replace(/[^\d]/g, ''), 10) || 0; } $("#checkoutForm").on('submit', function(e){ e.preventDefault(); let order_id = sessionStorage.getItem('order_id') || null; if(order_id){ Swal.fire({ icon: 'warning', title: 'Pesanan Belum Selesai', text: 'Silakan selesaikan pesanan Anda terlebih dahulu sebelum melanjutkan.', timer: 2500, }).then(() => { window.location.href = '/checkout'; }); } let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); const now = new Date(); const todayFormatted = now.getFullYear() + '-' + (now.getMonth() + 1).toString().padStart(2, '0') + '-' + now.getDate().toString().padStart(2, '0') const orders = [{ tgl: todayFormatted, jumlah: 1, kategoriPemesanan: $('#apakah_menu_sore').val() === "1" ? 'Makan Sore' : 'Makan Siang' }]; let idText = $("#cathering_order_menu_id").val(); let idMenu = parseInt(idText.replace(/[^\d]/g, ''), 10); let foto = $('#cathering_order_photo').attr('src') let resultFoto = foto.replace('/gambar', ''); let namaMenu = $("#cathering_order_name").text(); let existingItem = cart.find(item => item.id_menu === idMenu); if(!existingItem){ const orderItem ={ id:Date.now(), id_menu :idMenu, nama_menu : $("#cathering_order_name").text(), harga_karyawan : parseRupiahToNumber($("#cathering_order_price_karyawan").text()), harga_public : parseRupiahToNumber($("#cathering_order_price_public").text()), foto: resultFoto, jenis_menu: $('#cathering_order_jenis_menu').text(), deskripsi:$("#cathering_order_deskripsi").text(), apakah_menu_siang: $('#apakah_menu_siang').val() === "1" ? true: false, apakah_menu_sore: $('#apakah_menu_sore').val() === "1" ? true: false, apakah_someday: $('#apakah_someday').val() === "1" ? true: false, tgl_tersedia: $('#tgl_tersedia').val(), kalori: $('#kalori').text(), pesanan : orders } cart.push(orderItem) } sessionStorage.setItem('cart', JSON.stringify(cart)) updateCartCount(cart.length) modalCheckout.modal('hide') }) function saveItem(e){ let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); const orders = [{ tgl: '', jumlah: 1, kategoriPemesanan: $(e).data('apakah_menu_sore') ? 'Makan Sore' : 'Makan Siang' }]; let idMenu = $(e).data('id'); let namaMenu = $(e).data('nama_menu'); let existingItem = cart.find(item => item.id_menu === idMenu); 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(), id_menu : idMenu, nama_menu : namaMenu, harga_karyawan : $(e).data('harga_karyawan'), harga_public : $(e).data('harga_public'), foto: $(e).data('foto'), jenis_menu: $(e).data('jenis_menu'), deskripsi: $(e).data('deskripsi'), apakah_menu_siang: $(e).data('apakah_menu_siang'), apakah_menu_sore: $(e).data('apakah_menu_sore'), apakah_someday: $(e).data('apakah_someday'), tgl_tersedia: $(e).data('tgl_tersedia'), kalori: $(e).data('kalori'), pesanan : orders } cart.push(orderItem) } sessionStorage.setItem('cart', JSON.stringify(cart)) updateCartCount(cart.length) } function checkout(){ const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); if(cart.length > 0){ window.location.href = '/checkout' }else{ alert("Pilih Menu terlebih dahulu yang ingin dipesan !"); return } } function handleClick(e){ const originalHTML = e.innerHTML; // Efek klik e.classList.add('btn-clicked'); setTimeout(() => e.classList.remove('btn-clicked'), 80); // Ganti isi tombol jadi checklist e.innerHTML = ''; // Simulasi proses setTimeout(() => { e.innerHTML = originalHTML; }, 1000); const order_id = sessionStorage.getItem('order_id') || null; if(order_id){ Swal.fire({ icon: 'warning', title: 'Pesanan Belum Selesai', text: 'Silakan selesaikan pesanan Anda terlebih dahulu sebelum melanjutkan.', timer: 2500, }).then(() => { window.location.href = '/checkout'; }); }else{ saveItem(e) } } function toggleCartList() { const list = document.getElementById('cartList'); list.classList.toggle('d-none'); const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); renderCart(cart); // jika baru dibuka, render & pasang listener if (!list.classList.contains('d-none')) { setTimeout(() => document.addEventListener('click', closeOnOutside, { once: true }), 0); } } function renderCart(cart) { const body = document.getElementById('cartListBody'); body.innerHTML = cart.length ? cart.map((it, i) => `
${it.nama_menu}
`).join('') : '

Keranjang kosong

'; if (cart.length === 0) { document.getElementById('cartList').classList.add('d-none'); } } function removeItem(index) { const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); cart.splice(index, 1); sessionStorage.setItem('cart', JSON.stringify(cart)); renderCart(cart); updateCartCount(cart.length); } function closeOnOutside(e) { const list = document.getElementById('cartList'); const removeButton = e.target.closest('button[onclick^="removeItem"]') if (!list.contains(e.target) && !document.getElementById('menuBtn').contains(e.target) && !removeButton) { list.classList.add('d-none'); } }