dmolinari 28c1b88a92
All checks were successful
Optimized Build and Deploy / remote-build-and-deploy (push) Successful in 12m54s
Feat: Implementar modificación de Tiradas y mejorar UX/UI
**Backend:**
- Se ha añadido el endpoint `PUT /api/tiradas` para manejar la modificación de una Tirada, identificada por su clave única (fecha, idPublicacion, idPlanta).
- Se implementó un mecanismo de actualización granular para las secciones de la tirada (`bob_RegPublicaciones`), reemplazando la estrategia anterior de "eliminar todo y recrear".
  - La nueva lógica reconcilia el estado entrante con el de la base de datos, realizando operaciones individuales de `INSERT`, `UPDATE` y `DELETE` para cada sección.
  - Esto mejora significativamente el rendimiento y proporciona un historial de auditoría mucho más preciso.
- Se añadieron los DTOs `UpdateTiradaRequestDto` y `UpdateDetalleSeccionTiradaDto` para soportar el nuevo payload de modificación.
- Se expandieron los repositorios `IRegPublicacionSeccionRepository` y `IPubliSeccionRepository` con métodos para operaciones granulares (`UpdateAsync`, `DeleteByIdAsync`, `GetByIdsAndPublicacionAsync`).

**Frontend:**
- El componente `TiradaFormModal` ha sido refactorizado para funcionar tanto en modo "Crear" como en modo "Editar", recibiendo una prop `tiradaToEdit`.
- Se implementó una lógica de carga asíncrona robusta que obtiene los datos completos de una tirada antes de abrir el modal en modo edición.

**Mejoras de UI/UX:**
- Se ha rediseñado el layout de la lista de tiradas en `GestionarTiradasPage`:
  - Los botones de acción (Editar, Borrar) y los datos clave (chips de ejemplares y páginas) ahora se encuentran en una cabecera estática.
  - Estos elementos permanecen fijos en la parte superior y no se desplazan al expandir el acordeón, mejorando la consistencia visual.
- Se ha mejorado la tabla de secciones dentro del `TiradaFormModal`:
  - El botón "+ AGREGAR SECCIÓN" ahora está fijo en la parte inferior de la tabla, permaneciendo siempre visible incluso cuando la lista de secciones tiene scroll.
  - Al agregar una nueva sección, la lista se desplaza automáticamente hacia abajo para mostrar la nueva fila.
2025-07-23 14:05:58 -03:00
2025-06-13 13:48:31 -03:00
2025-07-22 12:55:22 +00:00

Gestion Integral Web

Gestion Integral Web es un sistema de gestión empresarial, diseñado para administrar las operaciones de una empresa de medios de comunicación. Este proyecto representa la migración y modernización de un sistema de escritorio heredado, desarrollado originalmente en VB.NET, a una arquitectura web moderna y robusta.

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 y TypeScript.


Módulos y Funcionalidades Principales

El sistema está organizado en varios módulos clave para cubrir todas las áreas operativas:

🚚 Distribución

  • Gestión de Canillitas y Accionistas: ABM completo, manejo de legajos, zonas, paradas, y estado de baja.
  • Gestión de Distribuidores: ABM de distribuidores, asignación de zonas y datos de contacto.
  • Gestión de Publicaciones: Administración de diarios y revistas, incluyendo:
    • Precios: Definición de precios por día de la semana con historial de vigencia.
    • Recargos: Configuración de recargos por zona geográfica.
    • Porcentajes de Pago: Asignación de porcentajes de pago diferenciados para distribuidores y canillitas/accionistas.
    • Secciones: Administración de las secciones que componen cada publicación (Ej: Deportes, Espectáculos).
  • Movimientos Diarios:
    • Registro de entradas (devoluciones) y salidas (entregas) para distribuidores y canillitas.
    • Carga masiva de movimientos para canillitas.
    • Control de Devoluciones y gestión de sobrantes y ejemplares sin cargo.
    • Gestión de salidas a "Otros Destinos" (ej: canje, protocolo).
  • Liquidaciones: Proceso para marcar movimientos como liquidados y calcular montos a rendir.

🖨️ Impresión

  • Gestión de Stock de Bobinas:
    • Ingreso de bobinas con remito, peso, tipo y planta.
    • Trazabilidad completa del estado de cada bobina (Disponible, En Uso, Dañada).
    • Asignación de bobinas consumidas a una publicación y sección específica.
  • Registro de Tiradas:
    • Definición de tiradas diarias por publicación y planta.
    • Detalle de secciones y cantidad de páginas por cada tirada.
  • Administración de Datos Maestros: ABM de Plantas de Impresión, Tipos de Bobina y Estados de Bobina.

💰 Contabilidad

  • Cuentas Corrientes: Seguimiento de saldos para distribuidores por empresa.
  • Gestión de Pagos: Registro de pagos recibidos y realizados a distribuidores, con múltiples tipos de pago.
  • Notas de Crédito y Débito: Emisión de notas para ajustar las cuentas corrientes de distribuidores y canillitas.
  • Administración de Tipos de Pago.

📻 Radios

  • Gestión de Fonoteca: ABM de canciones, intérpretes, autores, y ritmos.
  • Generador de Listas de Reproducción: Herramienta para generar planillas de programación musical en formato Excel (XLSX) y ZIP para su presentación a entidades como AADI y SADAIC.

📊 Reportes

  • Módulo de Reportes PDF y Excel: Generación de una amplia gama de reportes operativos y de gestión.
    • Impresión: Existencia de Papel, Movimiento de Bobinas, Consumo por Sección/Publicación, Comparativa Mensual de Consumo.
    • Distribución: Listados de Distribución (General y Canillitas), Control de Devoluciones, Comprobantes de Liquidación.
    • Contabilidad: Balances de Cuentas Corrientes de Distribuidores.
    • Ventas: Reportes de Venta Mensual para Secretaría.

👤 Usuarios y Seguridad

  • Gestión de Usuarios: ABM de usuarios del sistema.
  • Control de Acceso Basado en Roles (RBAC):
    • Perfiles: Creación de roles de usuario (ej: Administrador, Operador de Distribución).
    • Permisos: Definición granular de permisos para cada acción del sistema (Ver, Crear, Modificar, Eliminar).
    • Asignación flexible de permisos a perfiles.
  • Autenticación Segura: Mediante JSON Web Tokens (JWT).
  • Auditoría: Todas las modificaciones a los datos maestros y transacciones importantes se registran en tablas de historial (_H).

🛠️ Stack Tecnológico

Backend (GestionIntegral.Api)

  • Framework: ASP.NET Core 9
  • Lenguaje: C# 12
  • Acceso a Datos: Dapper (Micro ORM)
  • Base de Datos: Microsoft SQL Server
  • Autenticación: JWT Bearer Tokens
  • Reportes PDF: Microsoft.ReportingServices.ReportViewerControl.WebForms (a través de wrappers para .NET Core)
  • Exportación Excel: NPOI

Frontend

  • Framework: React 18
  • Lenguaje: TypeScript
  • UI Kit: Material-UI (MUI) v5 & MUI X (para DataGrid)
  • Enrutamiento: React Router v6
  • Llamadas API: Axios
  • Gestión de Estado: React Context API (useAuth)
  • 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 v18.x o superior (con npm o yarn).
  • Microsoft SQL Server (2019 o superior) y SQL Server Management Studio (SSMS).
  • Un editor de código como Visual Studio Code o Visual Studio 2022.

1. Clonar el Repositorio

git clone <URL_DEL_REPOSITORIO_GITEA>
cd GestionIntegralWeb

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 SistemaGestion.
  3. Restaure la base de datos a partir del archivo .bak proporcionado por el equipo. (Si no lo tiene, solicítelo).
  4. Ejecute los scripts de Stored Procedures y actualizaciones de esquema que se encuentran en el archivo dbSP.sql sobre la base de datos restaurada.

3. Configuración del Backend

  1. Navegue al directorio del backend: cd Backend/GestionIntegral.Api.

  2. Cree un archivo appsettings.Development.json en este directorio si no existe.

  3. Copie y pegue la siguiente estructura y rellene los valores correctos:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "ConnectionStrings": {
        "DefaultConnection": "Data Source=NOMBRE_SU_SERVIDOR;Initial Catalog=SistemaGestion;Integrated Security=False;User ID=su_usuario_sql;Password=su_contraseña;Encrypt=True;TrustServerCertificate=True"
      },
      "Jwt": {
        "Key": "UNA_CLAVE_SECRETA_MUY_LARGA_Y_SEGURA_AQUI_DE_AL_MENOS_32_CARACTERES",
        "Issuer": "http://localhost:5183", // La URL donde corre su backend
        "Audience": "http://localhost:5173", // La URL donde corre su frontend
        "DurationInHours": 8
      }
    }
    
  4. Instale las dependencias y ejecute el backend:

    dotnet restore
    dotnet run
    

    La API estará disponible en la URL especificada (ej. http://localhost:5183).

4. Configuración del Frontend

  1. Navegue al directorio del frontend: cd Frontend (desde la raíz del proyecto).
  2. Cree un archivo .env en este directorio.
  3. Añada la siguiente variable de entorno apuntando a la URL de su backend:
    VITE_API_BASE_URL=http://localhost:5183
    
  4. Instale las dependencias y ejecute el frontend:
    npm install
    npm run dev
    
    La aplicación web estará disponible en http://localhost:5173 (o el puerto que indique Vite).

📂 Estructura del Proyecto

Backend (Backend/GestionIntegral.Api/)

/Controllers/    # Controladores de la API, organizados por módulo
/Data/
  /Repositories/ # Lógica de acceso a datos con Dapper para cada entidad
  DbConnectionFactory.cs # Clase para crear conexiones a la BD
/Dtos/           # Data Transfer Objects, para comunicación entre capas y con el frontend
/Models/         # Clases que representan las tablas de la base de datos
/Services/       # Lógica de negocio, validaciones y orquestación
/Program.cs      # Configuración de servicios, DI, autenticación y middleware

Frontend (Frontend/)

/src/
  /components/   # Componentes reutilizables (botones, modales, etc.)
  /contexts/     # React Contexts (ej: AuthContext)
  /hooks/        # Hooks personalizados
  /layouts/      # Estructuras de página principales (ej: MainLayout con sidebar y navbar)
  /models/       # Interfaces y tipos de TypeScript para DTOs y modelos del frontend
  /pages/        # Componentes de página principales, organizados por módulo
  /routes/       # Configuración de enrutamiento con React Router
  /services/     # Lógica para realizar llamadas a la API con Axios
  /App.tsx       # Componente raíz de la aplicación
  /main.tsx      # Punto de entrada de la aplicación React
Description
Solución enfocada en el control y gestión de la distribución, impresion, cuentas de distribuidores, etc. de las ediciones impresas de las publicaciones.
Readme 3.2 MiB
Languages
C# 55.9%
TypeScript 43.7%
Python 0.3%