diff --git a/js/comprobante.js b/js/comprobante.js new file mode 100644 index 0000000..b94104d --- /dev/null +++ b/js/comprobante.js @@ -0,0 +1,30 @@ +function imprimirComprobante() { + const contenido = document.getElementById('comprobante-imprimible').innerHTML; + const ventanaImpresion = window.open('', '_blank'); + + ventanaImpresion.document.write(` + <html> + <head> + <title>Comprobante de Venta</title> + <style> + body { font-family: Arial, sans-serif; } + .header { border-bottom: 2px solid #333; padding-bottom: 10px; margin-bottom: 20px; } + .info-venta { display: flex; justify-content: space-between; margin-bottom: 20px; } + .info-item { margin-bottom: 10px; } + .info-label { font-weight: bold; } + table { width: 100%; border-collapse: collapse; margin-bottom: 20px; } + th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } + th { background-color: #f8f9fa; } + .total { font-size: 18px; font-weight: bold; text-align: right; margin-top: 20px; padding-top: 10px; border-top: 1px solid #ddd; } + </style> + </head> + <body> + ${contenido} + </body> + </html> + `); + + ventanaImpresion.document.close(); + ventanaImpresion.focus(); + ventanaImpresion.print(); +} \ No newline at end of file diff --git a/js/index.js b/js/index.js new file mode 100644 index 0000000..83361ea --- /dev/null +++ b/js/index.js @@ -0,0 +1,83 @@ +document.addEventListener('DOMContentLoaded', function() { + const asientos = document.querySelectorAll('.asiento.disponible'); + const resumenAsientos = document.getElementById('asientosSeleccionados'); + const resumenTotal = document.getElementById('totalVenta'); + const asientosInput = document.getElementById('asientosSeleccionadosInput'); + const formulario = document.getElementById('formularioVenta'); + + let seleccionados = []; + const precioBoleto = 50.00; // Precio por boleto + + // Función para actualizar el resumen + function actualizarResumen() { + if (seleccionados.length === 0) { + resumenAsientos.textContent = 'Ninguno'; + resumenTotal.textContent = '0.00'; + } else { + // Mostrar los asientos seleccionados + const detalles = seleccionados.map(asiento => { + const fila = Math.floor((asiento.id - 1) / 15) + 1; + const numero = ((asiento.id - 1) % 15) + 1; + return `F${fila}-${numero}`; + }); + + resumenAsientos.textContent = detalles.join(', '); + resumenTotal.textContent = (seleccionados.length * precioBoleto).toFixed(2); + + // Actualizar campo oculto para el envío del formulario + asientosInput.innerHTML = ''; + seleccionados.forEach(asiento => { + const input = document.createElement('input'); + input.type = 'hidden'; + input.name = 'asientos[]'; + input.value = asiento.id; + asientosInput.appendChild(input); + }); + } + } + + // Escuchar clics en los asientos + asientos.forEach(asiento => { + asiento.addEventListener('click', function() { + const asientoId = parseInt(this.getAttribute('data-id')); + + // Verificar si ya está seleccionado + const indice = seleccionados.findIndex(a => a.id === asientoId); + + if (indice === -1) { + // Agregar a seleccionados + seleccionados.push({ + id: asientoId, + elemento: this + }); + this.classList.remove('disponible'); + this.classList.add('seleccionado'); + } else { + // Quitar de seleccionados + seleccionados.splice(indice, 1); + this.classList.remove('seleccionado'); + this.classList.add('disponible'); + } + + actualizarResumen(); + }); + }); + + // Validar formulario antes de enviar + formulario.addEventListener('submit', function(e) { + if (seleccionados.length === 0) { + e.preventDefault(); + alert('Por favor, seleccione al menos un asiento.'); + return false; + } + + const nombreCliente = document.getElementById('nombre_cliente').value.trim(); + if (nombreCliente === '') { + e.preventDefault(); + alert('Por favor, ingrese el nombre del cliente.'); + return false; + } + + return true; + }); +}); \ No newline at end of file