async function submitOrderToServer(){ const totalHarga = hitungTotalHarga(); if (sessionStorage.getItem('order_id')) { currentStep = 2; showStep(currentStep); return; } const biodataResult = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}'); const cartResult = JSON.parse(sessionStorage.getItem('cart') || '[]'); try { const response = await fetch('/submit-checkout', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content'), }, body: JSON.stringify({ cartResult, biodataResult, totalHarga }), }) const result = await response.json(); if (response.ok && result.status) { // Hapus sessionStorage sessionStorage.setItem('order_id', result.data.no_order); sessionStorage.setItem('time_order', result.entry_at); currentStep = 2; showStep(currentStep) document.getElementById('no_order_display').textContent = result.data.no_order document.getElementById('no_order_price').textContent = result.data.total_harga ? 'Rp ' + parseInt(result.data.total_harga).toLocaleString('id-ID') : '' $("#no_order_result").val(result.data.no_order) } } catch (error) { console.error('message '+error); Swal.fire({ title: 'Gagal!', text: 'Terdapat kesalahan coba lagi nanti!', icon: 'error', confirmButtonText: 'Tutup!' }) } } function previewBuktiPembayaran() { const input = document.getElementById('bukti_pembayaran'); const preview = document.getElementById('bukti_preview'); const previewText = document.getElementById('preview_text'); if (input.files && input.files[0]) { const file = input.files[0]; const reader = new FileReader(); reader.onload = function (e) { preview.src = e.target.result; preview.classList.remove('d-none'); previewText.classList.add('d-none'); } if (file.size <= 2 * 1024 * 1024) { // 2MB limit reader.readAsDataURL(file); } else { alert("Ukuran file maksimal 2MB."); input.value = ''; preview.classList.add('d-none'); previewText.classList.remove('d-none'); } } } $("#checkoutFormFinal").on('submit', async function(e){ e.preventDefault() const buttonSubmit = $(this).find('button[type="submit"]') if(buttonSubmit.prop('disabled')) return; buttonSubmit.prop('disabled', true) .html('Memproses...') const cara_pembayaran = document.getElementById('cara_pembayaran').value; const bukti_pembayaran = document.querySelector('input[name="bukti_pembayaran"]').value; if(cara_pembayaran === 'transfer' && !bukti_pembayaran){ Swal.fire({ title: 'Bukti pembayaran kosong!', text: 'Silahkan upload bukti pembayaran jika metode yang dipakai transfer.', icon: 'warning', }) buttonSubmit.prop('disabled', false).html('Selesaikan Pesanan'); return; } // } const form = this; const formData = new FormData(form); const clearSession = () => { sessionStorage.removeItem('cart'); sessionStorage.removeItem('checkout_biodata'); sessionStorage.removeItem('order_id'); sessionStorage.removeItem('time_order'); }; try { const response = await fetch('/finish-checkout', { method: 'POST', body: formData, headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content') } }); const result = await response.json(); if (result.status) { // ✅ Hapus sessionStorage di client clearSession() Swal.fire({ title: 'Pesanan Berhasil!', icon: 'success', iconColor: '#2e7d32', // Warna hijau Kemenkes html: `

Terima kasih, pesanan Anda sedang kami siapkan.

Bantu Kami Meningkatkan Layanan:

`, showConfirmButton: false, showCancelButton: true, cancelButtonText: 'Lewati & Selesai', cancelButtonColor: '#6c757d', customClass: { popup: 'rounded-4', cancelButton: 'px-4 py-2 rounded-3' } }).then(() => { window.location.href = "/success-page"; // kehalaman success }); } else { clearSession() Swal.fire({ title: 'Gagal!', text: result.message, icon: 'error', confirmButtonText: 'Tutup!' }).then(() => { window.location.href = "/"; }); } } catch (err) { clearSession() Swal.fire({ title: 'Gagal!', text: "Terjadi kesalahan saat mengirim data.", icon: 'error', confirmButtonText: 'Tutup!' }) }finally{ buttonSubmit.prop('disabled', false).html('Selesaikan Pesanan'); } })