development #6

Merged
Joko merged 2 commits from development into production 2025-08-20 07:27:22 +00:00

View File

@ -338,11 +338,7 @@ function renderCartSummary() {
<!-- Tanggal --> <!-- Tanggal -->
<div class="col-12 col-md-2"> <div class="col-12 col-md-2">
<input type="text" <input type="text" class="form-control form-control-sm tanggal-input" id="tanggal-${item.id}-${i}" readonly placeholder="Pilih Tanggal">
class="form-control form-control-sm tanggal-input"
id="${item?.apakah_someday ? `tgl_someday-${item.id}-${i}`: `tanggal-${item.id}-${i}`}"
readonly
placeholder="Pilih Tanggal">
</div> </div>
<!-- Karbohidrat --> <!-- Karbohidrat -->
@ -398,7 +394,8 @@ function renderCartSummary() {
<!-- Jumlah --> <!-- Jumlah -->
<div class="col-6 col-md-2"> <div class="col-6 col-md-2">
<div class="d-flex align-items-center justify-content-between"> <div class="d-flex align-items-center justify-content-between">
<button class="btn btn-sm btn-outline-success" onclick="decrement(${item.id}, ${i})">
<button class="btn btn-sm btn-outline-success" onclick="decrement(${item.id}, ${i})" ${p.jumlah > 1 ? '' : 'disabled'}>
<i class="fa fa-minus"></i> <i class="fa fa-minus"></i>
</button> </button>
<input type="text" class="form-control form-control-sm text-center mx-2 jumlah-input" <input type="text" class="form-control form-control-sm text-center mx-2 jumlah-input"
@ -473,10 +470,7 @@ function renderCartSummary() {
`; `;
container.insertAdjacentHTML('beforeend', itemHTML); container.insertAdjacentHTML('beforeend', itemHTML);
pesananList.forEach((p, i) => { pesananList.forEach((p, i) => initFlatpickrTersedia(item, i));
initFlatpickrTersedia(item, i);
});
}); });
container.insertAdjacentHTML('beforeend', ` container.insertAdjacentHTML('beforeend', `
@ -507,7 +501,7 @@ function onTanggalChange(itemId, index) {
const input = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .tanggal-input`); 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; cart.find(item => item.id === itemId).pesanan[index].tgl = input.value;
sessionStorage.setItem('cart', JSON.stringify(cart)); sessionStorage.setItem('cart', JSON.stringify(cart));
// renderCartSummary(); renderCartSummary();
} }
function onKarbohidratChange(itemId, index, el, kalori){ function onKarbohidratChange(itemId, index, el, kalori){
@ -537,20 +531,11 @@ function onKategoriChange(itemId, index, isToday) {
let jam = now.getHours(); let jam = now.getHours();
if (kategori === "Makan Siang" && isToday && jam >= 10) { if (kategori === "Makan Siang" && isToday && jam >= 10) {
batasLewat = true;
alert("Pemesanan Makan Siang hanya bisa dilakukan sebelum jam 10:00."); alert("Pemesanan Makan Siang hanya bisa dilakukan sebelum jam 10:00.");
} else if (kategori === "Makan Sore" && isToday && jam >= 15) { } else if (kategori === "Makan Sore" && isToday && jam >= 13) {
batasLewat = true;
alert("Pemesanan Makan Sore hanya bisa dilakukan sebelum jam 13:00."); alert("Pemesanan Makan Sore hanya bisa dilakukan sebelum jam 13:00.");
} }
if (batasLewat) {
// Kembalikan ke value sebelumnya
const previous = selectEl.dataset.previousValue || '';
selectEl.value = previous;
return;
}
const item = cart.find(item => item.id === itemId); const item = cart.find(item => item.id === itemId);
if (item && item.pesanan && item.pesanan[index]) { if (item && item.pesanan && item.pesanan[index]) {
item.pesanan[index].kategoriPemesanan = kategori; item.pesanan[index].kategoriPemesanan = kategori;
@ -708,6 +693,7 @@ function validateCartBeforeSubmit() {
cart.forEach((item, index) => { cart.forEach((item, index) => {
const pesananList = item.pesanan || []; const pesananList = item.pesanan || [];
pesananList.forEach((pesanan, i) => { pesananList.forEach((pesanan, i) => {
console.log(!pesanan.karbohidrat_id, !item?.apakah_someday);
if (!pesanan.tgl) { if (!pesanan.tgl) {
isValid = false; isValid = false;
@ -745,45 +731,23 @@ function hitungTotalHarga(){
} }
function copyNoRek() { function copyNoRek() {
const text = document.getElementById('noRekText').innerText; const text = document.getElementById('noRekText').innerText;
navigator.clipboard.writeText(text).then(() => { navigator.clipboard.writeText(text).then(() => {
Swal.fire({ alert("Nomor rekening berhasil disalin: " + text);
icon: 'success', }).catch(err => {
title: 'Disalin!', console.error('Gagal menyalin: ', err);
text: 'Nomor rekening berhasil disalin: ' + text, alert("Gagal menyalin teks.");
showConfirmButton: false, });
timer: 1500 }
});
}).catch(err => {
console.error('Gagal menyalin: ', err);
Swal.fire({
icon: 'warning',
text: 'Gagal menyalin teks: ' + text,
showConfirmButton: false,
timer: 2000
});
});
}
function copyNoOrder() { function copyNoOrder() {
const text = document.getElementById('no_order_display').innerText; const text = document.getElementById('no_order_display').innerText;
navigator.clipboard.writeText(text).then(() => { navigator.clipboard.writeText(text).then(() => {
Swal.fire({ alert("Nomor order berhasil disalin: " + text);
icon: 'success',
title: 'Disalin!',
text: 'Nomor order berhasil disalin: ' + text,
showConfirmButton: false,
timer: 1500
});
}).catch(err => { }).catch(err => {
console.error('Gagal menyalin: ', err); console.error('Gagal menyalin: ', err);
Swal.fire({ alert("Gagal menyalin teks.");
icon: 'warning',
text: 'Gagal menyalin teks: ' + text,
showConfirmButton: false,
timer: 2000
});
}); });
} }
@ -846,26 +810,16 @@ function initFlatpickrTersedia(item, i) {
} }
const id = item?.apakah_someday flatpickr(`#tanggal-${item.id}-${i}`, {
? `#tgl_someday-${item.id}-${i}` dateFormat: "Y-m-d",
: `#tanggal-${item.id}-${i}`; ...(item?.apakah_someday ? {minDate: minTanggal} : {enable:availableDates}),
defaultDate: item.pesanan[i]?.tgl || null,
disableMobile: true,
onChange: function(selectedDates, dateStr) {
onTanggalChange(item.id, i, dateStr);
}
});
const config = item?.apakah_someday
? {
disableMobile: true,
minDate: minTanggal,
onChange: (selectedDates, dateStr) =>
onTanggalChange(item.id, i, dateStr)
}
: {
dateFormat: "Y-m-d",
enable: availableDates,
defaultDate: item.pesanan[i]?.tgl || null,
onChange: (selectedDates, dateStr) =>
onTanggalChange(item.id, i, dateStr)
};
flatpickr(id, config);
} }
function increment(itemId, index) { function increment(itemId, index) {
@ -877,6 +831,7 @@ function increment(itemId, index) {
function decrement(itemId, index) { function decrement(itemId, index) {
const input = document.getElementById(`jumlah-${itemId}-${index}`); const input = document.getElementById(`jumlah-${itemId}-${index}`);
let current = parseInt(input.value || "0"); let current = parseInt(input.value || "0");
console.log(current);
if (current > 1) { if (current > 1) {
input.value = current - 1; input.value = current - 1;
@ -952,6 +907,7 @@ document.getElementById('submitNote').addEventListener('click', function(e){
const noted = $("#note_order").val() const noted = $("#note_order").val()
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
const item =cart.find(item => item.id === id) const item =cart.find(item => item.id === id)
console.log(id, index, item);
if(item && item.pesanan && item.pesanan[index]){ if(item && item.pesanan && item.pesanan[index]){
item.pesanan[index].catatan = noted item.pesanan[index].catatan = noted