dmolinari 268c1c2bf9 Mejoras integrales en UI, lógica de negocio y auditoría
Este commit introduce una serie de mejoras significativas en toda la aplicación, abordando la experiencia de usuario, la consistencia de los datos, la robustez del backend y la implementación de un historial de cambios completo.

 **Funcionalidades y Mejoras (Features & Enhancements)**

*   **Historial de Auditoría Completo:**
    *   Se implementa el registro en el historial para todas las acciones CRUD manuales: creación de equipos, adición y eliminación de discos, RAM y usuarios.
    *   Los cambios de campos simples (IP, Hostname, etc.) ahora también se registran detalladamente.

*   **Consistencia de Datos Mejorada:**
    *   **RAM:** La selección de RAM en el modal de "Añadir RAM" y la vista de "Administración" ahora agrupan los módulos por especificaciones (Fabricante, Tamaño, Velocidad), eliminando las entradas duplicadas causadas por diferentes `part_number`.
    *   **Arquitectura:** El campo de edición para la arquitectura del equipo se ha cambiado de un input de texto a un selector con las opciones fijas "32 bits" y "64 bits".

*   **Experiencia de Usuario (UX) Optimizada:**
    *   El botón de "Wake On Lan" (WOL) ahora se deshabilita visualmente si el equipo no tiene una dirección MAC registrada.
    *   Se corrige el apilamiento de modales: los sub-modales (Añadir Disco/RAM/Usuario) ahora siempre aparecen por encima del modal principal de detalles y bloquean su cierre.
    *   El historial de cambios se actualiza en tiempo real en la interfaz después de añadir o eliminar un componente, sin necesidad de cerrar y reabrir el modal.

🐛 **Correcciones (Bug Fixes)**

*   **Actualización de Estado en Vivo:** Al añadir/eliminar un módulo de RAM, los campos "RAM Instalada" y "Última Actualización" ahora se recalculan en el backend y se actualizan instantáneamente en el frontend.
*   **Historial de Sectores Legible:** Se corrige el registro del historial para que al cambiar un sector se guarde el *nombre* del sector (ej. "Técnica") en lugar de su ID numérico.
*   **Formulario de Edición:** El dropdown de "Sector" en el modo de edición ahora preselecciona correctamente el sector asignado actualmente al equipo.
*   **Error Crítico al Añadir RAM:** Se soluciona un error del servidor (`Sequence contains more than one element`) que ocurría al añadir manualmente un tipo de RAM que ya existía con múltiples `part_number`. Se reemplazó `QuerySingleOrDefaultAsync` por `QueryFirstOrDefaultAsync` para mayor robustez.
*   **Eliminación Segura:** Se impide la eliminación de un sector si este tiene equipos asignados, protegiendo la integridad de los datos.

♻️ **Refactorización (Refactoring)**

*   **Servicio de API Centralizado:** Toda la lógica de llamadas `fetch` del frontend ha sido extraída de los componentes y centralizada en un único servicio (`apiService.ts`), mejorando drásticamente la mantenibilidad y organización del código.
*   **Optimización de Renders:** Se ha optimizado el rendimiento de los modales mediante el uso del hook `useCallback` para memorizar funciones que se pasan como props.
*   **Nulabilidad en C#:** Se han resuelto múltiples advertencias de compilación (`CS8620`) en el backend al especificar explícitamente los tipos de referencia anulables (`string?`), mejorando la seguridad de tipos del código.
2025-10-08 13:27:44 -03:00
2025-10-07 15:30:25 -03:00
2025-10-07 15:36:36 -03:00
2025-10-07 14:51:18 -03:00

Inventario IT 🖥️

Inventario IT es un sistema de gestión de inventario de hardware diseñado para ser poblado tanto por scripts automáticos como por gestión manual. Permite tener un registro centralizado y detallado de todos los equipos informáticos de una organización, sus componentes y su historial de cambios.

El sistema se compone de un backend RESTful API desarrollado en ASP.NET Core y un frontend interactivo de tipo SPA (Single Page Application) construido con React, TypeScript y Vite.


🚀 Funcionalidades Principales

El sistema está diseñado en torno a la gestión y visualización de activos de TI, con un fuerte énfasis en la calidad y consistencia de los datos.

📋 Módulo de Equipos

  • Vista Principal Centralizada: Una tabla paginada, con capacidad de búsqueda y filtrado por sector, que muestra todos los equipos del inventario.
  • Detalle Completo del Equipo: Al hacer clic en un equipo, se abre una vista detallada con toda su información:
    • Datos Principales: Hostname, IP, MAC, CPU, Motherboard, RAM instalada, OS, etc.
    • Componentes Asociados: Lista detallada de discos, módulos de RAM y usuarios asociados.
    • Estado en Tiempo Real: Indicador visual que muestra si el equipo está En línea o Sin conexión mediante un ping.
    • Historial de Cambios: Un registro cronológico de todas las modificaciones realizadas en el equipo.
  • Acciones Remotas:
    • Wake On Lan (WOL): 🚀 Botón para enviar un "Magic Packet" a través de un servidor SSH y encender un equipo de forma remota.

✍️ Gestión Manual vs. Automática

  • Origen de Datos: El sistema diferencia entre datos generados por scripts automáticos (⚙️ Automático) y los introducidos manualmente (⌨️ Manual).
  • Protección de Datos: Las entradas automáticas están protegidas contra modificaciones o eliminaciones desde la UI, asegurando la integridad de los datos recopilados en campo.
  • CRUD Completo para Entradas Manuales:
    • Creación de nuevos equipos con sus propiedades básicas.
    • Edición de los campos principales de un equipo manual.
    • Asociación manual de componentes (Discos, RAM, Usuarios).
    • Eliminación segura de equipos y componentes de origen manual.

🗂️ Módulo de Administración

  • Gestión de Sectores: Un CRUD completo para crear, editar y eliminar los sectores o departamentos de la organización.
  • Limpieza de Datos Maestros: Una potente herramienta para asegurar la consistencia de los datos.
    • Visualización de Valores Únicos: Permite ver todos los valores distintos existentes para un tipo de componente (ej: Microsoft Windows 10 Pro, w10, Windows 10) y cuántos equipos usan cada uno.
    • Unificación de Valores: ✏️ Permite reemplazar todas las instancias de un valor incorrecto (ej: w10) por uno correcto (ej: Microsoft Windows 10 Pro) en toda la base de datos con un solo clic.
    • Eliminación de Registros Maestros: 🗑️ Permite eliminar componentes maestros (ej: un módulo de RAM) que ya no están en uso por ningún equipo.

🎨 UI/UX

  • Interfaz Moderna y Responsiva: Construida con Vite, React y TypeScript para una experiencia rápida y fluida.
  • Notificaciones en Tiempo Real: El sistema utiliza react-hot-toast para dar feedback instantáneo sobre el estado de las operaciones (Cargando, Éxito, Error).
  • Consistencia de Datos Mejorada: Uso de campos de autocompletado que sugieren valores existentes para campos como CPU, OS y Motherboard, reduciendo errores humanos.
  • Validación de Entradas: Validación de formato en tiempo real para campos críticos como la MAC Address, con auto-formateo para ayudar al usuario.

🛠️ Stack Tecnológico

Backend (backend/)

  • Framework: ASP.NET Core 9
  • Lenguaje: C#
  • Acceso a Datos: Dapper (Micro ORM)
  • Base de Datos: Microsoft SQL Server
  • Comandos Remotos: Renci.SshNet para ejecución de comandos SSH (Wake On Lan)

Frontend (frontend/)

  • Framework/Librería: React 19
  • Lenguaje: TypeScript
  • Gestión de Tabla: TanStack Table v8
  • Notificaciones: React Hot Toast
  • Tooltips: React Tooltip
  • Build Tool: Vite

🚀 Puesta en Marcha (Getting Started)

Siga estos pasos para configurar y ejecutar el proyecto en un entorno de desarrollo local.

Prerrequisitos

  • .NET SDK 9.0 o superior.
  • Node.js v20.x o superior (con npm).
  • Microsoft SQL Server (2019 o superior) y SQL Server Management Studio (SSMS).
  • Un editor de código como Visual Studio Code.

1. Clonar el Repositorio

git clone <URL_DEL_REPOSITORIO_GITEA>
cd nombre-del-repositorio

2. Configuración de la Base de Datos

  1. Abra SSMS y conecte a su instancia de SQL Server.
  2. Cree una nueva base de datos llamada InventarioDB.
  3. Ejecute el script dboInventarioDB.txt (ubicado en la raíz del proyecto o en la carpeta backend/) sobre la base de datos recién creada. Esto creará todas las tablas, relaciones y claves necesarias.

3. Configuración del Backend

  1. Navegue al directorio del backend: cd backend.

  2. Abra el archivo appsettings.json.

  3. Modifique la ConnectionString para que apunte a su instancia de SQL Server, asegurándose de que el usuario (User Id y Password) tenga permisos sobre la base de datos InventarioDB.

    "ConnectionStrings": {
      "DefaultConnection": "Server=NOMBRE_SU_SERVIDOR;Database=InventarioDB;User Id=su_usuario_sql;Password=su_contraseña;TrustServerCertificate=True"
    }
    
  4. En el mismo archivo, configure las credenciales del servidor SSH que se usará para la función Wake On Lan en la sección SshSettings.

    "SshSettings": {
      "Host": "",
      "Port": ,
      "User": "",
      "Password": ""
    }
    
  5. Instale las dependencias y ejecute el backend:

    dotnet restore
    dotnet run
    

    La API estará disponible en http://localhost:5198 y la UI de Swagger en la misma URL.

4. Configuración del Frontend

  1. En una nueva terminal, navegue al directorio del frontend: cd frontend.
  2. Instale las dependencias:
    npm install
    
  3. El frontend ya está configurado para apuntar a la URL del backend (http://localhost:5198) en el archivo SimpleTable.tsx. Si ha cambiado el puerto del backend, deberá actualizar esta constante BASE_URL.
  4. Ejecute el frontend en modo de desarrollo:
    npm run dev
    
    La aplicación web estará disponible en http://localhost:5173 (o el puerto que indique Vite).

Description
No description provided
Readme 686 KiB
Languages
TypeScript 47.1%
C# 34.1%
CSS 7.8%
PowerShell 5.2%
TSQL 5%
Other 0.8%