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();
};