From 08b57689ef68fa369fe469faa76ce06933a0936e Mon Sep 17 00:00:00 2001
From: "bruno.martinez" <zs22016061@estudiantes.uv.mx>
Date: Wed, 12 Mar 2025 03:29:37 +0000
Subject: [PATCH] archivos php

---
 Interfaz/consultar_asientos.php            | 14 +-----
 Interfaz/vender_asientos.php               | 44 ++++++++++-------
 Interfaz/verificar_e_insertar_asientos.php | 55 ++++++++++++++++++++++
 3 files changed, 84 insertions(+), 29 deletions(-)
 create mode 100644 Interfaz/verificar_e_insertar_asientos.php

diff --git a/Interfaz/consultar_asientos.php b/Interfaz/consultar_asientos.php
index 0736c17..bc4309e 100644
--- a/Interfaz/consultar_asientos.php
+++ b/Interfaz/consultar_asientos.php
@@ -1,8 +1,6 @@
 <?php
-// Incluir el archivo de conexión
 require 'conexionbd.php';
 
-// Obtener el artista y el día desde la solicitud (GET o POST)
 $artista = $_GET['artista'] ?? '';
 $dia = $_GET['dia'] ?? '';
 
@@ -11,20 +9,12 @@ if (empty($artista) || empty($dia)) {
 }
 
 try {
-    // Consultar los asientos para el artista y día especificados
-    $stmt = $conn->prepare("SELECT asiento, estado FROM asientos WHERE artista = :artista AND dia = :dia");
+    $stmt = $conn->prepare("SELECT id, asiento, estado, precio FROM asientos WHERE artista = :artista AND dia = :dia");
     $stmt->execute([':artista' => $artista, ':dia' => $dia]);
     $asientos = $stmt->fetchAll(PDO::FETCH_ASSOC);
 
-    // Mensaje de depuración
-    error_log("Consulta realizada: Artista = $artista, Día = $dia");
-
-    // Devolver los asientos en formato JSON
-    header('Content-Type: application/json');
     echo json_encode(['success' => true, 'asientos' => $asientos]);
 } catch (PDOException $e) {
-    // Mensaje de error
-    error_log("Error al consultar los asientos: " . $e->getMessage());
-    die(json_encode(['error' => 'Error al consultar los asientos.']));
+    die(json_encode(['error' => 'Error al consultar los asientos: ' . $e->getMessage()]));
 }
 ?>
\ No newline at end of file
diff --git a/Interfaz/vender_asientos.php b/Interfaz/vender_asientos.php
index a9b0dc0..9999a54 100644
--- a/Interfaz/vender_asientos.php
+++ b/Interfaz/vender_asientos.php
@@ -1,37 +1,47 @@
 <?php
-// Incluir el archivo de conexión a la base de datos
 require 'conexionbd.php';
 
-// Obtener los datos de la solicitud (en formato JSON)
 $data = json_decode(file_get_contents('php://input'), true);
-
-// Extraer los datos recibidos
 $artista = $data['artista'] ?? '';
 $dia = $data['dia'] ?? '';
 $asientos = $data['asientos'] ?? [];
 
-// Validar que los datos estén completos
 if (empty($artista) || empty($dia) || empty($asientos)) {
     die(json_encode(['error' => 'Faltan parámetros (artista, dia, asientos).']));
 }
 
 try {
-    // Preparar la consulta para actualizar el estado de los asientos
-    $stmt = $conn->prepare("UPDATE asientos SET estado = 'vendido' WHERE artista = :artista AND dia = :dia AND asiento = :asiento");
+    // Iniciar una transacción
+    $conn->beginTransaction();
+
+    // Registrar la venta y actualizar el estado del asiento
+    $stmtVenta = $conn->prepare("INSERT INTO ventas (asiento_id, precio) VALUES (:asiento_id, :precio)");
+    $stmtAsiento = $conn->prepare("UPDATE asientos SET estado = 'vendido' WHERE id = :id");
 
-    // Actualizar cada asiento en la lista
     foreach ($asientos as $asiento) {
-        $stmt->execute([
-            ':artista' => $artista,
-            ':dia' => $dia,
-            ':asiento' => $asiento
-        ]);
+        // Obtener el ID y precio del asiento
+        $stmt = $conn->prepare("SELECT id, precio FROM asientos WHERE artista = :artista AND dia = :dia AND asiento = :asiento");
+        $stmt->execute([':artista' => $artista, ':dia' => $dia, ':asiento' => $asiento]);
+        $asientoData = $stmt->fetch(PDO::FETCH_ASSOC);
+
+        if ($asientoData) {
+            // Registrar la venta
+            $stmtVenta->execute([
+                ':asiento_id' => $asientoData['id'],
+                ':precio' => $asientoData['precio']
+            ]);
+
+            // Marcar el asiento como vendido
+            $stmtAsiento->execute([':id' => $asientoData['id']]);
+        }
     }
 
-    // Devolver una respuesta de éxito
-    echo json_encode(['success' => true, 'message' => 'Asientos vendidos actualizados correctamente.']);
+    // Confirmar la transacción
+    $conn->commit();
+    echo json_encode(['success' => true, 'message' => 'Venta registrada correctamente.']);
 } catch (PDOException $e) {
-    // Devolver un mensaje de error en caso de fallo
-    die(json_encode(['error' => 'Error al actualizar los asientos: ' . $e->getMessage()]));
+    // Revertir la transacción en caso de error
+    $conn->rollBack();
+    die(json_encode(['error' => 'Error al registrar la venta: ' . $e->getMessage()]));
 }
 ?>
\ No newline at end of file
diff --git a/Interfaz/verificar_e_insertar_asientos.php b/Interfaz/verificar_e_insertar_asientos.php
new file mode 100644
index 0000000..4dde4cd
--- /dev/null
+++ b/Interfaz/verificar_e_insertar_asientos.php
@@ -0,0 +1,55 @@
+<?php
+require 'conexionbd.php';
+
+$data = json_decode(file_get_contents('php://input'), true);
+$artista = $data['artista'] ?? '';
+$dias = $data['dias'] ?? [];
+$filas = $data['filas'] ?? 0;
+$columnas = $data['columnas'] ?? 0;
+
+if (empty($artista) || empty($dias) || $filas <= 0 || $columnas <= 0) {
+    die(json_encode(['error' => 'Faltan parámetros (artista, dias, filas, columnas).']));
+}
+
+try {
+    // Verificar si ya existen asientos para el artista y los días especificados
+    $stmt = $conn->prepare("SELECT COUNT(*) AS total FROM asientos WHERE artista = :artista AND dia IN (" . implode(',', $dias) . ")");
+    $stmt->execute([':artista' => $artista]);
+    $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
+
+    if ($resultado['total'] > 0) {
+        echo json_encode(['message' => 'Los asientos ya existen en la base de datos.']);
+        exit;
+    }
+
+    // Insertar los asientos para cada día
+    $stmt = $conn->prepare("INSERT INTO asientos (artista, dia, asiento, estado, precio) VALUES (:artista, :dia, :asiento, 'disponible', :precio)");
+
+    foreach ($dias as $dia) {
+        for ($i = 1; $i <= $filas; $i++) {
+            for ($j = 0; $j < $columnas; $j++) {
+                $asiento = $i . chr(65 + $j); // Ej: 1A, 1B, ..., 10L
+                $precio = obtenerPrecio($i); // Función para calcular el precio según la fila
+                $stmt->execute([
+                    ':artista' => $artista,
+                    ':dia' => $dia,
+                    ':asiento' => $asiento,
+                    ':precio' => $precio
+                ]);
+            }
+        }
+    }
+
+    echo json_encode(['message' => 'Asientos insertados correctamente.']);
+} catch (PDOException $e) {
+    die(json_encode(['error' => 'Error al insertar los asientos: ' . $e->getMessage()]));
+}
+
+// Función para calcular el precio según la fila
+function obtenerPrecio($fila) {
+    if ($fila >= 1 && $fila <= 3) return 4500;
+    if ($fila >= 4 && $fila <= 7) return 2600;
+    if ($fila >= 8 && $fila <= 10) return 1300;
+    return 0;
+}
+?>
\ No newline at end of file