TicketCompany/controladores/procesar-compra.php

106 lines
3.6 KiB
PHP

<?php
header("Content-Type: application/json");
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once "conexion-bd.php";
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(["mensaje" => "Método no permitido."]);
exit();
}
$evento_id = intval($_POST['evento_id']);
$asientos = json_decode($_POST['asientos'], true);
$cantidad = intval($_POST['cantidad']);
if (empty($asientos)) {
echo json_encode(["mensaje" => "Debes seleccionar al menos un asiento."]);
exit();
}
$sql_evento = "SELECT c.precio, c.lugar_id, l.capacidad
FROM conciertos c
JOIN lugares l ON c.lugar_id = l.id
WHERE c.id = ?";
$stmt_evento = $conn->prepare($sql_evento);
$stmt_evento->bind_param("i", $evento_id);
$stmt_evento->execute();
$result_evento = $stmt_evento->get_result();
$evento = $result_evento->fetch_assoc();
if (!$evento) {
echo json_encode(["mensaje" => "Error: No se encontró el evento."]);
exit();
}
$precio_unitario = $evento['precio'];
$lugar_id = $evento['lugar_id'];
$capacidad = $evento['capacidad'];
if (count($asientos) > $capacidad) {
echo json_encode(["mensaje" => "Error: Estás intentando comprar más boletos de los permitidos."]);
exit();
}
$total = count($asientos) * $precio_unitario;
// 🔹 Insertar la compra en la tabla `ventas`
$sql = "INSERT INTO ventas (evento_id, cantidad, total) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("iid", $evento_id, $cantidad, $total);
if ($stmt->execute()) {
$id_compra = $conn->insert_id;
// 🔹 Actualizar el estado de los asientos y obtener su ID
$sql_asiento_update = "UPDATE asientos SET estado = 'vendido' WHERE numero_asiento = ? AND lugar_id = ?";
$stmt_asiento_update = $conn->prepare($sql_asiento_update);
$sql_obtener_asiento_id = "SELECT id FROM asientos WHERE numero_asiento = ? AND lugar_id = ?";
$stmt_asiento_id = $conn->prepare($sql_obtener_asiento_id);
// 🔹 Insertar registro en ventas_asientos con precio real
$sql_ventas_asientos = "INSERT INTO ventas_asientos (venta_id, asiento_id, precio) VALUES (?, ?, ?)";
$stmt_ventas_asientos = $conn->prepare($sql_ventas_asientos);
foreach ($asientos as $asiento) {
$asientoSeleccionado = trim($asiento);
// Actualizar estado del asiento
$stmt_asiento_update->bind_param("si", $asientoSeleccionado, $lugar_id);
if (!$stmt_asiento_update->execute()) {
echo json_encode(["mensaje" => "Error actualizando asiento: " . $stmt_asiento_update->error]);
exit();
}
// Obtener ID del asiento
$stmt_asiento_id->bind_param("si", $asientoSeleccionado, $lugar_id);
$stmt_asiento_id->execute();
$result_asiento = $stmt_asiento_id->get_result();
$asiento_data = $result_asiento->fetch_assoc();
if (!$asiento_data) {
echo json_encode(["mensaje" => "Error: asiento no encontrado."]);
exit();
}
$asiento_id = $asiento_data['id'];
// Insertar en ventas_asientos con precio real del evento
$stmt_ventas_asientos->bind_param("iid", $id_compra, $asiento_id, $precio_unitario);
if (!$stmt_ventas_asientos->execute()) {
echo json_encode(["mensaje" => "Error al insertar venta_asiento: " . $stmt_ventas_asientos->error]);
exit();
}
}
echo json_encode(["mensaje" => "Compra realizada exitosamente.", "id_compra" => $id_compra]);
} else {
echo json_encode(["mensaje" => "Error al procesar la compra: " . $conn->error]);
}
$stmt->close();
$conn->close();
?>