83 lines
3.8 KiB
PHP
83 lines
3.8 KiB
PHP
<?php
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 1);
|
|
include 'conexion.php';
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
$rawData = file_get_contents("php://input");
|
|
$data = json_decode($rawData, true);
|
|
|
|
// Verificar si los datos están bien formateados
|
|
if (!isset($data['asientos']) || !is_array($data['asientos']) || !isset($data['nombre_comprador'])) {
|
|
echo json_encode(["error" => "Datos inválidos", "datosRecibidos" => $data]);
|
|
exit;
|
|
}
|
|
|
|
$nombreComprador = $data['nombre_comprador'];
|
|
$conexionBD->begin_transaction();
|
|
|
|
try {
|
|
$boletosComprados = [];
|
|
|
|
foreach ($data['asientos'] as $idAsiento) {
|
|
// Verificar si el asiento sigue disponible y obtener el precio
|
|
$stmtVerificar = $conexionBD->prepare("
|
|
SELECT a.estado, a.numero_asiento, a.id_zona, z.nombre_zona, z.precio,
|
|
c.id_concierto, c.nombre_concierto, c.artista, c.fecha
|
|
FROM asientos a
|
|
JOIN zonas z ON a.id_zona = z.id_zona
|
|
JOIN conciertos c ON z.id_concierto = c.id_concierto
|
|
WHERE a.id_asiento = ?");
|
|
$stmtVerificar->bind_param("i", $idAsiento);
|
|
$stmtVerificar->execute();
|
|
$resultado = $stmtVerificar->get_result()->fetch_assoc();
|
|
|
|
if (!$resultado || $resultado['estado'] !== 'disponible') {
|
|
throw new Exception("El asiento ID $idAsiento ya está ocupado o no existe.");
|
|
}
|
|
|
|
// Marcar el asiento como ocupado
|
|
$stmtActualizar = $conexionBD->prepare("UPDATE asientos SET estado = 'ocupado' WHERE id_asiento = ?");
|
|
if (!$stmtActualizar) throw new Exception("Error en la preparación de la actualización: " . $conexionBD->error);
|
|
$stmtActualizar->bind_param("i", $idAsiento);
|
|
if (!$stmtActualizar->execute()) throw new Exception("Error al actualizar asiento: " . $stmtActualizar->error);
|
|
|
|
// Insertar el boleto en la base de datos
|
|
$stmtBoleto = $conexionBD->prepare("INSERT INTO boletos (id_concierto, id_zona, id_asiento, nombre_comprador, precio, fecha_concierto, artista)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?)");
|
|
if (!$stmtBoleto) throw new Exception("Error en la preparación del insert de boletos: " . $conexionBD->error);
|
|
$stmtBoleto->bind_param("iiisdss", $resultado['id_concierto'], $resultado['id_zona'], $idAsiento, $nombreComprador, $resultado['precio'], $resultado['fecha'], $resultado['artista']);
|
|
if (!$stmtBoleto->execute()) throw new Exception("Error al insertar boleto: " . $stmtBoleto->error);
|
|
|
|
// Obtener el ID del boleto recién insertado
|
|
$idBoleto = $stmtBoleto->insert_id;
|
|
|
|
// Insertar la venta en la tabla "ventas"
|
|
$stmtVenta = $conexionBD->prepare("INSERT INTO ventas (id_concierto, id_boleto) VALUES (?, ?)");
|
|
if (!$stmtVenta) throw new Exception("Error en la preparación del insert de ventas: " . $conexionBD->error);
|
|
$stmtVenta->bind_param("ii", $resultado['id_concierto'], $idBoleto);
|
|
if (!$stmtVenta->execute()) throw new Exception("Error al registrar la venta: " . $stmtVenta->error);
|
|
|
|
// Guardar datos del boleto para enviarlos al frontend
|
|
$boletosComprados[] = [
|
|
'nombre_concierto' => $resultado['nombre_concierto'],
|
|
'artista' => $resultado['artista'],
|
|
'fecha' => $resultado['fecha'],
|
|
'zona' => $resultado['nombre_zona'],
|
|
'numero_asiento' => $resultado['numero_asiento'],
|
|
'precio' => $resultado['precio'],
|
|
'nombre_comprador' => $nombreComprador
|
|
];
|
|
}
|
|
|
|
$conexionBD->commit();
|
|
echo json_encode(["success" => true, "message" => "¡Compra realizada con éxito! El boleto ha sido generado y registrado en ventas.", "boletos" => $boletosComprados]);
|
|
|
|
} catch (Exception $e) {
|
|
$conexionBD->rollback();
|
|
echo json_encode(["error" => $e->getMessage()]);
|
|
}
|
|
exit;
|
|
?>
|