81 lines
2.9 KiB
PHP
81 lines
2.9 KiB
PHP
<?php
|
|
date_default_timezone_set('America/Lima');
|
|
require_once 'db/config.php';
|
|
|
|
// Asegurarse de que el usuario esté logueado
|
|
if (!isset($_SESSION['user_id'])) {
|
|
$_SESSION['error'] = "Debe iniciar sesión para realizar esta acción.";
|
|
header("Location: auth/login.php");
|
|
exit();
|
|
}
|
|
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
$producto_id = $_POST['producto_id'];
|
|
$ciudad_id = $_POST['ciudad_id'];
|
|
$cantidad = $_POST['cantidad'];
|
|
$observacion = $_POST['descripcion']; // El campo del formulario se llama 'descripcion'
|
|
$usuario_id = $_SESSION['user_id'];
|
|
$fecha = $_POST['fecha'];
|
|
|
|
if (empty($producto_id) || empty($ciudad_id) || empty($cantidad) || $cantidad <= 0) {
|
|
$_SESSION['error'] = "Por favor, complete todos los campos obligatorios.";
|
|
header("Location: registrar_salida.php");
|
|
exit();
|
|
}
|
|
|
|
$pdo = db();
|
|
|
|
try {
|
|
$pdo->beginTransaction();
|
|
|
|
// 1. Verificar stock actual
|
|
$stmt = $pdo->prepare("SELECT stock_actual FROM stock_por_ciudad WHERE producto_id = :producto_id AND ciudad_id = :ciudad_id FOR UPDATE");
|
|
$stmt->execute(['producto_id' => $producto_id, 'ciudad_id' => $ciudad_id]);
|
|
$stock_disponible = $stmt->fetchColumn();
|
|
|
|
if ($stock_disponible === false || $stock_disponible < $cantidad) {
|
|
$_SESSION['error'] = "No hay stock suficiente para realizar esta operación. Stock actual: " . ($stock_disponible ?: 0);
|
|
header("Location: registrar_salida.php");
|
|
$pdo->rollBack();
|
|
exit();
|
|
}
|
|
|
|
// 2. Actualizar el stock en la ciudad
|
|
$stmt = $pdo->prepare("UPDATE stock_por_ciudad SET stock_actual = stock_actual - :cantidad WHERE producto_id = :producto_id AND ciudad_id = :ciudad_id");
|
|
$stmt->execute([
|
|
'cantidad' => $cantidad,
|
|
'producto_id' => $producto_id,
|
|
'ciudad_id' => $ciudad_id
|
|
]);
|
|
|
|
// 3. Registrar el movimiento de salida
|
|
$stmt = $pdo->prepare(
|
|
"INSERT INTO movimientos (tipo, producto_id, ciudad_origen_id, cantidad, usuario_id, observacion, fecha, fecha_registro)
|
|
VALUES ('Salida', :producto_id, :ciudad_origen_id, :cantidad, :usuario_id, :observacion, :fecha, NOW())"
|
|
);
|
|
$stmt->execute([
|
|
'producto_id' => $producto_id,
|
|
'ciudad_origen_id' => $ciudad_id,
|
|
'cantidad' => $cantidad,
|
|
'usuario_id' => $usuario_id,
|
|
'observacion' => $observacion,
|
|
'fecha' => $fecha
|
|
]);
|
|
|
|
$pdo->commit();
|
|
|
|
$_SESSION['success'] = "Salida de producto registrada correctamente.";
|
|
header("Location: productos.php");
|
|
exit();
|
|
|
|
} catch (Exception $e) {
|
|
$pdo->rollBack();
|
|
$_SESSION['error'] = "Error al registrar la salida: " . $e->getMessage();
|
|
header("Location: registrar_salida.php");
|
|
exit();
|
|
}
|
|
} else {
|
|
header("Location: registrar_salida.php");
|
|
exit();
|
|
}
|
|
?>
|