$(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, Pencarian tidak ditemukan.
');
}
let 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');
}
}