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(); ?>