Compare commits
4 Commits
8dcb3b7e90
...
7bf0a56761
Author | SHA1 | Date |
---|---|---|
|
7bf0a56761 | |
|
e89e2a4ed4 | |
|
ddad222152 | |
|
6e8afe9501 |
|
@ -0,0 +1,62 @@
|
||||||
|
<?php
|
||||||
|
require_once '../modelo/BaseDatos.php';
|
||||||
|
require_once '../modelo/Venta.php';
|
||||||
|
require_once '../modelo/Boleto.php';
|
||||||
|
require_once '../modelo/Sala.php';
|
||||||
|
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
// Configuración de la base de datos
|
||||||
|
$host = 'localhost';
|
||||||
|
$usuario = 'root';
|
||||||
|
$password = 'password';
|
||||||
|
$nombreBD = 'boletos_db';
|
||||||
|
$bd = new BaseDatos($host, $usuario, $password, $nombreBD);
|
||||||
|
|
||||||
|
// Verificar que los datos fueron recibidos correctamente
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
$nombreCliente = $_POST['nombre_cliente'] ?? '';
|
||||||
|
$asientosSeleccionados = $_POST['asientos'] ?? [];
|
||||||
|
$idSala = 1; // Asegúrate de que el ID de la sala está definido
|
||||||
|
|
||||||
|
if (empty($nombreCliente) || empty($asientosSeleccionados) || !$idSala) {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Datos incompletos']);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cargar la sala desde la base de datos
|
||||||
|
$sala = $bd->cargarSala($idSala);
|
||||||
|
if (!$sala) {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Sala no encontrada']);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtener los boletos seleccionados
|
||||||
|
$boletosDisponibles = $sala->obtenerBoletosPorId($asientosSeleccionados);
|
||||||
|
if (count($boletosDisponibles) !== count($asientosSeleccionados)) {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Uno o más boletos no están disponibles']);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calcular el total de la venta
|
||||||
|
$total = array_reduce($boletosDisponibles, function($sum, $boleto) {
|
||||||
|
return $sum + $boleto->getPrecio();
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
// Crear una nueva venta
|
||||||
|
$venta = new Venta($nombreCliente);
|
||||||
|
$venta->agregarBoletos($boletosDisponibles);
|
||||||
|
|
||||||
|
// Guardar la venta en la base de datos
|
||||||
|
if ($bd->guardarVenta($venta)) {
|
||||||
|
echo json_encode(['success' => true, 'message' => 'Venta realizada con éxito', 'total' => $total]);
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Error al registrar la venta']);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Método no permitido']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$bd->cerrarConexion();
|
||||||
|
?>
|
|
@ -17,63 +17,46 @@
|
||||||
|
|
||||||
<div id="mensajeAlerta" class="alert alert-warning d-none" role="alert"></div>
|
<div id="mensajeAlerta" class="alert alert-warning d-none" role="alert"></div>
|
||||||
|
|
||||||
<div class="main-content">
|
<div class="sala">
|
||||||
<div class="sala">
|
<h2>Selección de Asientos - Sala Principal</h2>
|
||||||
<h2>Selección de Asientos - Sala Principal</h2>
|
<div class="escenario">ESCENARIO</div>
|
||||||
<div class="escenario">ESCENARIO</div>
|
|
||||||
|
<div class="filas" id="mapaAsientos">
|
||||||
<div class="filas" id="mapaAsientos">
|
<!-- El mapa de asientos se cargará dinámicamente con JavaScript -->
|
||||||
<!-- El mapa de asientos se cargará dinámicamente con JavaScript -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="leyenda">
|
|
||||||
<div class="leyenda-item">
|
|
||||||
<div class="leyenda-color" style="background-color: #28a745;"></div>
|
|
||||||
<span>Disponible</span>
|
|
||||||
</div>
|
|
||||||
<div class="leyenda-item">
|
|
||||||
<div class="leyenda-color" style="background-color: #007bff;"></div>
|
|
||||||
<span>Seleccionado</span>
|
|
||||||
</div>
|
|
||||||
<div class="leyenda-item">
|
|
||||||
<div class="leyenda-color" style="background-color: #dc3545;"></div>
|
|
||||||
<span>Vendido</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sidebar">
|
<div class="leyenda">
|
||||||
<div class="concierto-detalles mb-4 p-3 bg-light border rounded">
|
<div class="leyenda-item">
|
||||||
<h3 class="mb-3"><i class="bi bi-music-note-beamed"></i> Detalles del Concierto</h3>
|
<div class="leyenda-color" style="background-color: #28a745;"></div>
|
||||||
<ul class="list-unstyled">
|
<span>Disponible</span>
|
||||||
<li class="mb-2"><i class="bi bi-person-circle"></i> <strong>Artista:</strong> Nombre del Artista</li>
|
</div>
|
||||||
<li class="mb-2"><i class="bi bi-calendar-event"></i> <strong>Fecha:</strong> 15 de abril, 2025</li>
|
<div class="leyenda-item">
|
||||||
<li class="mb-2"><i class="bi bi-clock"></i> <strong>Hora:</strong> 20:00 hrs</li>
|
<div class="leyenda-color" style="background-color: #007bff;"></div>
|
||||||
<li class="mb-2"><i class="bi bi-geo-alt"></i> <strong>Lugar:</strong> Arena Principal</li>
|
<span>Seleccionado</span>
|
||||||
<li class="mb-2"><i class="bi bi-hourglass-split"></i> <strong>Duración:</strong> 2 horas</li>
|
</div>
|
||||||
<li class="mb-2"><i class="bi bi-door-open"></i> <strong>Apertura:</strong> 18:30 hrs</li>
|
<div class="leyenda-item">
|
||||||
</ul>
|
<div class="leyenda-color" style="background-color: #dc3545;"></div>
|
||||||
|
<span>Vendido</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form id="formularioVenta">
|
|
||||||
<h3><i class="bi bi-cart"></i> Datos de Venta</h3>
|
|
||||||
<div class="form-group mb-3">
|
|
||||||
<label for="nombre_cliente"><i class="bi bi-person"></i> Nombre del Cliente:</label>
|
|
||||||
<input type="text" id="nombre_cliente" name="nombre_cliente" class="form-control" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="resumen" id="resumen">
|
|
||||||
<h3><i class="bi bi-ticket-perforated"></i> Resumen de Selección</h3>
|
|
||||||
<p><i class="bi bi-seat"></i> Asientos seleccionados: <span id="asientosSeleccionados">Ninguno</span></p>
|
|
||||||
<p><i class="bi bi-cash"></i> Total: $<span id="totalVenta">0.00</span></p>
|
|
||||||
<button type="submit" id="btnVender" class="btn btn-primary"><i class="bi bi-check-circle"></i> Confirmar Venta</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Campo oculto para almacenar IDs de asientos seleccionados -->
|
|
||||||
<div id="asientosSeleccionadosInput"></div>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<form id="formularioVenta">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="nombre_cliente">Nombre del Cliente:</label>
|
||||||
|
<input type="text" id="nombre_cliente" name="nombre_cliente" class="form-control" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="resumen" id="resumen">
|
||||||
|
<h3>Resumen de Selección</h3>
|
||||||
|
<p>Asientos seleccionados: <span id="asientosSeleccionados">Ninguno</span></p>
|
||||||
|
<p>Total: $<span id="totalVenta">0.00</span></p>
|
||||||
|
<button type="submit" id="btnVender" class="btn btn-primary">Confirmar Venta</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Campo oculto para almacenar IDs de asientos seleccionados -->
|
||||||
|
<div id="asientosSeleccionadosInput"></div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/index.js"></script>
|
<script src="js/index.js"></script>
|
||||||
|
|
|
@ -142,52 +142,50 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async function validarYEnviarFormulario(e) {
|
||||||
// Función para validar y enviar el formulario
|
|
||||||
function validarYEnviarFormulario(e) {
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
if (seleccionados.length === 0) {
|
if (seleccionados.length === 0) {
|
||||||
mostrarMensaje('Por favor, seleccione al menos un asiento.');
|
mostrarMensaje('Por favor, seleccione al menos un asiento.');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nombreCliente = document.getElementById('nombre_cliente').value.trim();
|
const nombreCliente = document.getElementById('nombre_cliente').value.trim();
|
||||||
if (nombreCliente === '') {
|
if (nombreCliente === '') {
|
||||||
mostrarMensaje('Por favor, ingrese el nombre del cliente.');
|
mostrarMensaje('Por favor, ingrese el nombre del cliente.');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preparar los datos para enviar
|
const formData = new FormData();
|
||||||
const asientosIds = seleccionados.map(asiento => asiento.id);
|
formData.append('nombre_cliente', nombreCliente);
|
||||||
const datos = {
|
seleccionados.forEach(asiento => {
|
||||||
asientos: asientosIds,
|
formData.append('asientos[]', asiento.id);
|
||||||
nombre_cliente: nombreCliente
|
|
||||||
};
|
|
||||||
|
|
||||||
// Enviar los datos mediante fetch
|
|
||||||
fetch('../controlador/venta.php', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
|
||||||
body: JSON.stringify(datos)
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(result => {
|
|
||||||
if (result.success) {
|
|
||||||
// Redireccionar a la página de comprobante
|
|
||||||
window.location.href = result.redirect || 'comprobante.php';
|
|
||||||
} else {
|
|
||||||
mostrarMensaje(result.mensaje || 'Error al procesar la venta', 'error');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('Error:', error);
|
|
||||||
mostrarMensaje('Error de conexión con el servidor', 'error');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return false;
|
try {
|
||||||
|
const response = await fetch('../controlador/procesarVenta.php', {
|
||||||
|
method: 'POST',
|
||||||
|
body: formData
|
||||||
|
});
|
||||||
|
|
||||||
|
const responseText = await response.text(); // Capturar respuesta como texto para depurar
|
||||||
|
console.log('Respuesta del servidor:', responseText);
|
||||||
|
|
||||||
|
// Intentar parsear como JSON
|
||||||
|
const data = JSON.parse(responseText);
|
||||||
|
|
||||||
|
if (!data.success) {
|
||||||
|
mostrarMensaje(data.message || 'Error en la venta'); // Cambiar 'mensaje' a 'message'
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mostrarMensaje('Venta confirmada con éxito', 'success');
|
||||||
|
setTimeout(() => location.reload(), 2000);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error al enviar la venta:', error);
|
||||||
|
mostrarMensaje('Error de conexión con el servidor', 'error');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Función para mostrar mensajes
|
// Función para mostrar mensajes
|
||||||
|
|
Loading…
Reference in New Issue