const steps = [ { step: 1, title: "Periksa Data Belanja" }, { step: 2, title: "Periksa Informasi Anda" }, { step: 3, title: "Pilih Metode Pembayaran" }, { step: 4, title: "Lakukan Pembayaran" }, ]; function getStep() { const params = new URLSearchParams(window.location.search); let step = parseInt(params.get("step")); if (!step || step < 1 || step > 4) step = 1; return step; } function goToStep(step) { if ( (localStorage.getItem("paymentMethod") || null) === null && step === 4 ) { alert("Pilih salah satu metode pembayaran!", false); return; } window.location.href = "payment.html?step=" + step; } function renderStepNav(currentStep) { let navHtml = `
Langkah ${s.step} | `; }); navHtml += `
---|
No | Nama Produk | Harga | Quantity | Subtotal |
---|---|---|---|---|
Keranjang kosong. | ||||
${index++} | ${product.name} | ${formatRupiah(product.price)} | ${qty} | ${formatRupiah(subtotal)} |
Total | ${formatRupiah(totalPrice)} |
Silakan scan QR Code berikut dengan aplikasi pembayaran Anda:
`; document.getElementById("step-content").innerHTML = html; generateQRCode(); } else if (method === "bank") { html += ``; document.getElementById("step-content").innerHTML = html; await loadBankList(); } else { html += ``; document.getElementById("step-content").innerHTML = html; } } async function processFinalPayment() { const method = localStorage.getItem("paymentMethod") || "card"; let valid = true; if (method === "bank") { valid = document.getElementById("bankName").value.trim() && document.getElementById("accountNumber").value.trim(); } else if (method === "card") { valid = document.getElementById("cardNumber").value.trim() && document.getElementById("expiry").value.trim() && document.getElementById("cvv").value.trim(); } if (!valid) { alert("Semua input wajib diisi!", false); return; } await alert( "Proses pembayaran...", true, true, 7, [ { timeOut: 3, message: "Pembayaran Berhasil!", }, ], 3 ); await clearCart(method); } async function clearCart(payment_method) { const userData = await getUserData(); const transactions = userData.transactions ? userData.transactions : {}; const updatedUser = { uid: userData.uid, name: userData.name, email: userData.email, phone: userData.phone, address: userData.address, photo_profile: userData.photo_profile, cart: [], transactions: transactions, }; console.log("clearCart", updatedUser); await saveTransaction(updatedUser, userData.cart, payment_method); updateCartIcon(); } async function saveTransaction(userData, productIDs, paymentMethod) { let now = new Date(); let transactionID = now.getFullYear() + "_" + String(now.getMonth() + 1).padStart(2, "0") + "_" + String(now.getDate()).padStart(2, "0") + "_" + String(now.getHours()).padStart(2, "0") + "_" + String(now.getMinutes()).padStart(2, "0") + "_" + String(now.getSeconds()).padStart(2, "0") + "_" + String(now.getMilliseconds()).padStart(3, "0"); const products = await fetchProductsData(); const transactions = userData.transactions; let productMap = {}; productIDs.forEach((id) => { if (products[id]) { if (productMap[id]) { productMap[id].total += 1; } else { productMap[id] = { ...products[id], total: 1 }; } } }); let theProducts = Object.values(productMap); transactions[transactionID] = { products: theProducts, payment_method: paymentMethod, user: { name: userData.name, email: userData.email, phone: userData.phone, address: userData.address, photo_profile: userData.photo_profile, }, }; userData.transactions = transactions; await updateUserDataToGitHub(userData); localStorage.setItem("userData", JSON.stringify(userData)); console.log("saveTransaction", userData); console.log("Transaksi berhasil disimpan dengan ID:", transactionID); window.location.href = `transaction.html?date=${transactionID}`; } function computeCRC(input) { let crc = 0xffff; for (let i = 0; i < input.length; i++) { crc ^= input.charCodeAt(i) << 8; for (let j = 0; j < 8; j++) { if (crc & 0x8000) { crc = ((crc << 1) ^ 0x1021) & 0xffff; } else { crc = (crc << 1) & 0xffff; } } } return crc.toString(16).toUpperCase().padStart(4, "0"); } function generateQRCode() { const qrContainer = document.getElementById("qr-code"); if (!qrContainer) return; qrContainer.innerHTML = ""; const payloadWithoutCRC = `00 02 01 01 0F ID.CO.QRIS000001 02 07 QRIS V2 03 02 12 04 03 360 05 06 ${totalPrice} 06 02 ID 07 0B BRI Virtual 08 07 Sidoarjo 63 04`; const payloadForCRC = payloadWithoutCRC + "0000"; const crcValue = computeCRC(payloadForCRC); const finalPayload = payloadWithoutCRC + crcValue; new QRCode(qrContainer, { text: finalPayload, width: 200, height: 200, }); } async function initPaymentSteps() { const step = getStep(); const cart = await getCarts(); if (cart.length === 0) window.location.href = `cart.html?message=${encodeURIComponent("Anda belum memesan produk apapun. Pergi ke halaman produk untuk berbelanja")}`; products = await fetchProductsData(); switch (step) { case 1: await displayStep1Content(); break; case 2: await displayStep2Content(); break; case 3: displayStep3Content(); break; case 4: await displayStep4Content(); break; default: displayStep1Content(); } renderStepNav(step); renderStepButtons(step); } document.addEventListener("DOMContentLoaded", function () { AOS.init(); initPaymentSteps(); });