beginTransaction(); // 1. Verificar y actualizar stock en stock_sedes $stmt = $pdo->prepare("SELECT * FROM stock_sedes WHERE product_id = :product_id AND sede_id = :sede_id"); $stmt->execute(['product_id' => $product_id, 'sede_id' => $sede_id]); $existing_stock = $stmt->fetch(); if ($existing_stock) { $new_quantity = $existing_stock['quantity'] - $quantity; if ($new_quantity < 0) { $error = "No hay suficiente stock para registrar la salida."; $pdo->rollBack(); } else { $update_stmt = $pdo->prepare("UPDATE stock_sedes SET quantity = :quantity WHERE id = :id"); $update_stmt->execute(['quantity' => $new_quantity, 'id' => $existing_stock['id']]); // 2. Insertar en el historial de movimientos $history_stmt = $pdo->prepare( "INSERT INTO stock_movements (product_id, sede_id, quantity, type, movement_date) VALUES (:product_id, :sede_id, :quantity, 'salida', :movement_date)" ); $history_stmt->execute([ 'product_id' => $product_id, 'sede_id' => $sede_id, 'quantity' => $quantity, 'movement_date' => $movement_date ]); $pdo->commit(); $message = "¡Inventario actualizado y movimiento registrado correctamente!"; } } else { $error = "No hay stock registrado para este producto en la sede seleccionada."; $pdo->rollBack(); } } catch (PDOException $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } $error = "Error al actualizar el inventario: " . $e->getMessage(); } } else { $error = "Por favor, complete todos los campos del formulario, incluyendo la fecha."; } } // Obtener productos y sedes para los dropdowns $products = []; $sedes = []; try { $pdo = db(); $products_stmt = $pdo->query("SELECT id, nombre FROM products ORDER BY nombre ASC"); $products = $products_stmt->fetchAll(PDO::FETCH_ASSOC); $sedes_stmt = $pdo->query("SELECT id, nombre FROM sedes ORDER BY nombre ASC"); $sedes = $sedes_stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $error = "Error al cargar datos: " . $e->getMessage(); } ?>