// Precios por artista y fila const preciosPorArtista = { 'The Driver Era': { 1: 4500, // Filas 1-3 4: 2600, // Filas 4-7 8: 1300 // Filas 8-10 }, 'The 1975': { 1: 5000, // Filas 1-3 4: 3100, // Filas 4-7 8: 1600 // Filas 8-10 }, 'Taylor Swift': { 1: 7800, // Filas 1-3 4: 3800, // Filas 4-7 8: 2100 // Filas 8-10 } }; // Datos específicos del artista (se pasan como parámetros al inicializar) let artista, dias; // Configuración inicial const filas = 10; const columnas = 12; let diaSeleccionado; const asientosVendidos = {}; let asientosSeleccionados = {}; // Objeto: { "1A": 4500, "4B": 2600, ... } // Función para inicializar la página function inicializarPagina(nombreArtista, diasArtista) { artista = nombreArtista; dias = diasArtista; diaSeleccionado = dias[0]; // Seleccionar el primer día por defecto // Inicializar asientos vendidos para cada día dias.forEach(dia => asientosVendidos[dia] = new Set()); // Verificar e insertar asientos si no existen verificarEInsertarAsientos(); // Renderizar los días disponibles renderizarDias(); } // Función para obtener el precio de un asiento según la fila function obtenerPrecio(fila) { if (!artista || !preciosPorArtista[artista]) { console.error("Artista no definido o no tiene precios asignados."); return 0; } if (fila >= 1 && fila <= 3) { return preciosPorArtista[artista][1]; } else if (fila >= 4 && fila <= 7) { return preciosPorArtista[artista][4]; } else if (fila >= 8 && fila <= 10) { return preciosPorArtista[artista][8]; } else { return 0; // En caso de fila no válida } } // Función para verificar e insertar asientos si no existen function verificarEInsertarAsientos() { const url = 'verificar_e_insertar_asientos.php'; const data = { artista: artista, dias: dias, filas: filas, columnas: columnas }; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(response => response.json()) .then(result => { if (result.error) { console.error("Error al verificar/insertar asientos:", result.error); } else { console.log(result.message); cargarAsientos(); // Cargar los asientos después de insertarlos } }) .catch(error => console.error('Error al verificar/insertar asientos:', error)); } // Función para renderizar los días disponibles function renderizarDias() { const contenedorDias = document.querySelector('.dias'); contenedorDias.innerHTML = ''; dias.forEach(dia => { const boton = document.createElement('button'); boton.className = 'btn btn-primary'; boton.textContent = dia; boton.onclick = () => seleccionarDia(dia); contenedorDias.appendChild(boton); }); } // Función para seleccionar un día function seleccionarDia(dia) { diaSeleccionado = dia; asientosSeleccionados = {}; // Reiniciar los asientos seleccionados document.querySelectorAll('.dias button').forEach(btn => btn.classList.remove('selected')); event.target.classList.add('selected'); cargarAsientos(); } // Función para cargar los asientos desde el servidor function cargarAsientos() { const url = `consultar_asientos.php?artista=${encodeURIComponent(artista)}&dia=${diaSeleccionado}`; fetch(url) .then(response => response.json()) .then(data => { if (data.error) { console.error("Error al cargar los asientos:", data.error); return; } asientosVendidos[diaSeleccionado].clear(); data.asientos.forEach(asiento => { if (asiento.estado === 'vendido') { asientosVendidos[diaSeleccionado].add(asiento.asiento); } }); renderizarAsientos(); }) .catch(error => console.error('Error al cargar los asientos:', error)); } // Función para seleccionar/deseleccionar un asiento function toggleAsiento(asiento, precio) { if (asientosVendidos[diaSeleccionado].has(asiento)) return; if (asientosSeleccionados[asiento]) { // Si el asiento ya está seleccionado, eliminarlo delete asientosSeleccionados[asiento]; } else { // Si el asiento no está seleccionado, agregarlo asientosSeleccionados[asiento] = precio; console.log(`Asiento seleccionado: ${asiento}, Precio: $${precio}`); // Verificar en la consola } renderizarAsientos(); } // Función para renderizar los asientos function renderizarAsientos() { const contenedor = document.getElementById('asientos'); contenedor.innerHTML = ''; for (let i = 0; i < filas * columnas; i++) { const fila = Math.floor(i / columnas) + 1; const columna = String.fromCharCode(65 + (i % columnas)); // A, B, C, ..., L const asiento = `${fila}${columna}`; const precio = obtenerPrecio(fila); const boton = document.createElement('button'); boton.className = 'asiento'; if (asientosVendidos[diaSeleccionado].has(asiento)) { boton.classList.add('vendido'); } else if (asientosSeleccionados[asiento]) { boton.style.backgroundColor = 'orange'; } boton.textContent = `${asiento} - $${precio}`; boton.onclick = () => toggleAsiento(asiento, precio); contenedor.appendChild(boton); } } // Función para vender los asientos seleccionados function venderAsientos() { const asientos = Object.keys(asientosSeleccionados); if (asientos.length === 0) { alert("Selecciona al menos un asiento para vender."); return; } let precioTotal = 0; const asientosSeleccionadosArray = []; // Calcular el precio total y obtener los asientos seleccionados asientos.forEach(asiento => { const precio = asientosSeleccionados[asiento]; if (typeof precio === 'number') { // Verificar que el precio es un número precioTotal += precio; asientosSeleccionadosArray.push(`${asiento} - $${precio}`); } else { console.error(`Precio no válido para el asiento ${asiento}:`, precio); } }); console.log(`Precio total calculado: $${precioTotal}`); // Verificar en la consola const fechaHora = new Date().toLocaleString(); // Llenar los datos del modal document.getElementById('modalArtista').textContent = artista; document.getElementById('modalDia').textContent = diaSeleccionado; document.getElementById('modalAsientos').textContent = asientosSeleccionadosArray.join(', '); document.getElementById('modalPrecioTotal').textContent = `$${precioTotal}`; document.getElementById('modalFechaHora').textContent = fechaHora; // Mostrar el modal document.getElementById('comprobanteModal').style.display = 'block'; } // Función para confirmar la venta function confirmarVenta() { const url = 'vender_asientos.php'; const data = { artista: artista, dia: diaSeleccionado, asientos: Object.keys(asientosSeleccionados) // Enviar solo los asientos }; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(response => response.json()) .then(result => { if (result.error) { console.error("Error al vender los asientos:", result.error); alert("Error al vender los asientos: " + result.error); } else { console.log("Venta realizada:", result.message); alert(result.message); // Marcar los asientos como vendidos en la interfaz Object.keys(asientosSeleccionados).forEach(asiento => { asientosVendidos[diaSeleccionado].add(asiento); }); asientosSeleccionados = {}; // Reiniciar los asientos seleccionados renderizarAsientos(); } }) .catch(error => console.error('Error al vender los asientos:', error)); // Cerrar el modal document.getElementById('comprobanteModal').style.display = 'none'; } // Función para rechazar la venta function rechazarVenta() { // Deseleccionar los asientos asientosSeleccionados = {}; renderizarAsientos(); // Mostrar mensaje de compra cancelada alert("Compra cancelada"); // Cerrar el modal document.getElementById('comprobanteModal').style.display = 'none'; } // Manejar el cierre del modal const modal = document.getElementById('comprobanteModal'); const span = document.getElementsByClassName('close')[0]; span.onclick = () => modal.style.display = 'none'; window.onclick = (event) => { if (event.target === modal) { modal.style.display = 'none'; } };