34786-vm/eliminar_producto.php
2025-12-12 16:33:10 +00:00

62 lines
2.2 KiB
PHP

<?php
session_start();
if (!isset($_SESSION["user_id"])) {
header("Location: auth/login.php");
exit();
}
require_once 'db/config.php';
$product_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($product_id > 0) {
$pdo = db();
try {
// 1. Verificar si hay movimientos asociados
$sql_check = "SELECT COUNT(*) FROM movimientos WHERE producto_id = ?";
$stmt_check = $pdo->prepare($sql_check);
$stmt_check->execute([$product_id]);
$movement_count = $stmt_check->fetchColumn();
if ($movement_count > 0) {
// Si hay movimientos, no permitir eliminar y mostrar un error amigable
$_SESSION['error_message'] = "No se puede eliminar: este producto ya tiene un historial de entradas y salidas.";
} else {
// Si no hay movimientos, proceder con la eliminación
$pdo->beginTransaction();
// Primero, eliminar el stock asociado (si existe)
$sql_stock = "DELETE FROM stock_por_ciudad WHERE producto_id = ?";
$stmt_stock = $pdo->prepare($sql_stock);
$stmt_stock->execute([$product_id]);
// Luego, eliminar el producto
$sql_product = "DELETE FROM productos WHERE id = ?";
$stmt_product = $pdo->prepare($sql_product);
$stmt_product->execute([$product_id]);
if ($stmt_product->rowCount() > 0) {
$pdo->commit();
$_SESSION['success_message'] = "Producto eliminado correctamente.";
} else {
$pdo->rollBack();
$_SESSION['error_message'] = "El producto no pudo ser encontrado o ya fue eliminado.";
}
}
} catch (PDOException $e) {
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
// Ocultamos el mensaje técnico y mostramos uno más amigable
$_SESSION['error_message'] = "Ocurrió un error al intentar eliminar el producto. Por favor, inténtalo de nuevo.";
// Opcional: podrías loggear el error real para depuración
// error_log("Error al eliminar producto: " . $e->getMessage());
}
} else {
$_SESSION['error_message'] = "ID de producto no válido.";
}
header("Location: productos.php");
exit();
?>