let promosHtml = ''; for (let nombre in agrupadorPromos) { let info = agrupadorPromos[nombre]; totalDescuentosPromo += info.monto; currentDescuentosPromo[nombre] = info.monto; promosHtml += `
${nombre} -$${info.monto.toFixed(2)}
`; } if (promosHtml !== '' || sugerenciasPromoHtml !== '') { promosContainer.innerHTML = `
${promosHtml}${sugerenciasPromoHtml}
`; } else { promosContainer.innerHTML = ''; } let totalTrasPromo = subtotal - totalDescuentosPromo; // Cálculo del beneficio de frecuencia activo (si aplica por puntos) descuentoFrecuenciaVal = 0; if (clienteAplicaFrecuencia && reglaFrecuenciaActual && totalTrasPromo > 0) { if (reglaFrecuenciaActual.tipo_beneficio === 'PORCENTAJE_DESC') { let porc = parseFloat(reglaFrecuenciaActual.valor_descuento) / 100; descuentoFrecuenciaVal = totalTrasPromo * porc; } else if (reglaFrecuenciaActual.tipo_beneficio === 'PRODUCTO_GRATIS') { let idArtRegalo = reglaFrecuenciaActual.id_articulo_regalo; if (catalogo[idArtRegalo]) { descuentoFrecuenciaVal = parseFloat(catalogo[idArtRegalo].precio); } } } let totalFinal = totalTrasPromo - descuentoFrecuenciaVal; if (totalFinal < 0) totalFinal = 0; ultimoSubtotal = subtotal; ultimoTotalFinal = totalFinal; document.getElementById('lbl_subtotal').innerText = '$' + subtotal.toFixed(2); document.getElementById('lbl_total').innerText = '$' + totalFinal.toFixed(2); const rowLoyalty = document.getElementById('row_loyalty_discount'); if (clienteAplicaFrecuencia && reglaFrecuenciaActual && descuentoFrecuenciaVal > 0) { rowLoyalty.style.display = 'flex'; document.getElementById('lbl_loyalty_title').innerHTML = ` ${reglaFrecuenciaActual.nombre_promocion}`; document.getElementById('lbl_loyalty_discount').innerText = '-$' + descuentoFrecuenciaVal.toFixed(2); } else { rowLoyalty.style.display = 'none'; } } function updateItemQty(id, delta) { let currentQty = parseInt(cart[id] || 0); let newQty = currentQty + delta; if (newQty <= 0) { if (confirm(`¿Deseas quitar "${catalogo[id].nombre}" de tu resumen?`)) { delete cart[id]; } else { return; } } else { cart[id] = newQty; } localStorage.setItem('orire_cart', JSON.stringify(cart)); calculateBreakdown(); } function cancelEntireOrder() { if (confirm("¿Estás seguro de que deseas cancelar todo el pedido actual? Se perderán los artículos seleccionados.")) { localStorage.removeItem('orire_client_phone'); localStorage.removeItem('orire_client_name'); cancelEntireOrderForce(); } } function cancelEntireOrderForce() { localStorage.removeItem('orire_cart'); window.location.href = 'pedido_movil.php'; } function validateClientPhoneNumber(val) { const statusEl = document.getElementById('lookup_status'); const phone = val.replace(/\D/g, ''); clearTimeout(lookupTimer); if (phone.length === 10) { statusEl.className = "form-text small mt-1 text-muted"; statusEl.innerHTML = ' Verificando historial y lealtad...'; lookupTimer = setTimeout(() => { fetch(`checkout.php?action=buscar_cliente&telefono=${phone}`) .then(response => response.json()) .then(data => { if (data.existe && data.nombre) { document.getElementById('client_name').value = data.nombre; saveClientData(); statusEl.className = "form-text small mt-1 text-success fw-bold animate__animated animate__fadeIn"; statusEl.innerHTML = ` ¡Hola de nuevo, ${data.nombre}! (Visitas: ${data.puntos})`; } else { statusEl.className = "form-text small mt-1 text-secondary animate__animated animate__fadeIn"; statusEl.innerHTML = ' Cliente nuevo registrado.'; } clienteAplicaFrecuencia = data.aplica_frecuencia; reglaFrecuenciaActual = data.regla_frecuencia; if (clienteAplicaFrecuencia && reglaFrecuenciaActual) { statusEl.innerHTML += ` 🎁 ¡${reglaFrecuenciaActual.nombre_promocion} Disponible!`; } calculateBreakdown(); }) .catch(error => { console.error('Error AJAX:', error); clienteAplicaFrecuencia = false; reglaFrecuenciaActual = null; calculateBreakdown(); }); }, 300); } else { statusEl.innerHTML = ''; clienteAplicaFrecuencia = false; reglaFrecuenciaActual = null; calculateBreakdown(); } } function selectPayment(method) { selectedMethod = method; document.getElementById('opt_caja').classList.toggle('selected', method === 'CAJA'); document.getElementById('opt_spei').classList.toggle('selected', method === 'SPEI'); document.getElementById('spei_field_container').style.display = (method === 'SPEI') ? 'block' : 'none'; } function processOrderConfirmation() { const nameInput = document.getElementById('client_name'); const phoneInput = document.getElementById('client_phone'); const folioInput = document.getElementById('payment_folio'); const name = nameInput.value.trim(); const phone = phoneInput.value.trim().replace(/\D/g, ''); if (!name) { alert('Por favor, ingresa tu Nombre Completo.'); nameInput.focus(); return; } if (phone.length !== 10) { alert('Por favor, ingresa un número de WhatsApp / Teléfono válido de 10 dígitos.'); phoneInput.focus(); return; } let folioSpeiVal = ''; if (selectedMethod === 'SPEI') { folioSpeiVal = folioInput.value.trim(); if (folioSpeiVal.length < 4) { alert('Por favor, ingresa los últimos 4 dígitos del folio bancario SPEI.'); folioInput.focus(); return; } } const payload = { telefono: phone, nombre: name, metodo_pago: selectedMethod, folio_spei: folioSpeiVal, subtotal: ultimoSubtotal, total: ultimoTotalFinal, cart: cart, descuentos_promo_map: descuentosPromoMap, aplicar_frecuencia: clienteAplicaFrecuencia, id_config_promo: (clienteAplicaFrecuencia && reglaFrecuenciaActual) ? reglaFrecuenciaActual.id_config : null }; const confirmBtn = document.querySelector('.btn-confirm-order'); confirmBtn.disabled = true; confirmBtn.innerHTML = ' Procesando venta...'; fetch('checkout.php?action=guardar_pedido', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }) .then(response => response.json()) .then(data => { if (data.success) { alert('¡Venta registrada, puntos de frecuencia actualizados y guardados con éxito!'); localStorage.removeItem('orire_cart'); localStorage.removeItem('orire_client_phone'); localStorage.removeItem('orire_client_name'); window.location.href = 'pedido_movil.php'; } else { alert('Error al guardar la venta: ' + (data.error || 'Desconocido')); confirmBtn.disabled = false; confirmBtn.innerHTML = 'Confirmar Pedido'; } }) .catch(error => { console.error('Error:', error); alert('Ocurrió un error de conexión al procesar el pedido.'); confirmBtn.disabled = false; confirmBtn.innerHTML = 'Confirmar Pedido'; }); } window.onload = function() { loadClientData(); calculateBreakdown(); };