feat: Implementación módulos Empresas, Plantas, Tipos y Estados Bobina
Backend API: - Implementado CRUD completo para Empresas (DE001-DE004): - EmpresaRepository, EmpresaService, EmpresasController. - Lógica de creación/eliminación de saldos iniciales en EmpresaService. - Transacciones y registro en tablas _H. - Verificación de permisos específicos. - Implementado CRUD completo para Plantas de Impresión (IP001-IP004): - PlantaRepository, PlantaService, PlantasController. - Transacciones y registro en tablas _H. - Verificación de permisos. - Implementado CRUD completo para Tipos de Bobina (IB006-IB009): - TipoBobinaRepository, TipoBobinaService, TiposBobinaController. - Transacciones y registro en tablas _H. - Verificación de permisos. - Implementado CRUD completo para Estados de Bobina (IB010-IB013): - EstadoBobinaRepository, EstadoBobinaService, EstadosBobinaController. - Transacciones y registro en tablas _H. - Verificación de permisos. Frontend React: - Módulo Empresas: - empresaService.ts para interactuar con la API. - EmpresaFormModal.tsx para crear/editar empresas. - GestionarEmpresasPage.tsx con tabla, filtro, paginación y menú de acciones. - Integración con el hook usePermissions para control de acceso. - Módulo Plantas de Impresión: - plantaService.ts. - PlantaFormModal.tsx. - GestionarPlantasPage.tsx con tabla, filtro, paginación y acciones. - Integración con usePermissions. - Módulo Tipos de Bobina: - tipoBobinaService.ts. - TipoBobinaFormModal.tsx. - GestionarTiposBobinaPage.tsx con tabla, filtro, paginación y acciones. - Integración con usePermissions. - Módulo Estados de Bobina: - estadoBobinaService.ts. - EstadoBobinaFormModal.tsx. - GestionarEstadosBobinaPage.tsx con tabla, filtro, paginación y acciones. - Integración con usePermissions. - Navegación: - Añadidas sub-pestañas y rutas para los nuevos módulos dentro de "Distribución" (Empresas) e "Impresión" (Plantas, Tipos Bobina, Estados Bobina). - Creado ImpresionIndexPage.tsx para la navegación interna del módulo de Impresión. Correcciones: - Corregido el uso de CommitAsync/RollbackAsync a Commit/Rollback síncronos en PlantaService.cs debido a que IDbTransaction no los soporta asíncronamente.
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
namespace GestionIntegral.Api.Models.Distribucion
|
||||
{
|
||||
public class Empresa
|
||||
{
|
||||
public int IdEmpresa { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Detalle { get; set; }
|
||||
}
|
||||
}
|
||||
10
Backend/GestionIntegral.Api/Models/Distribucion/Zona.cs
Normal file
10
Backend/GestionIntegral.Api/Models/Distribucion/Zona.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace GestionIntegral.Api.Models.Distribucion
|
||||
{
|
||||
public class Zona
|
||||
{
|
||||
public int IdZona { get; set; } // Coincide con PK de dist_dtZonas
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Descripcion { get; set; }
|
||||
public bool Estado { get; set; } // Para el soft delete
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace GestionIntegral.Api.Models.Distribucion
|
||||
{
|
||||
public class ZonaHistorico
|
||||
{
|
||||
public int IdZona { get; set; } // NO es IDENTITY
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Descripcion { get; set; }
|
||||
public bool Estado { get; set; } // Importante para registrar el estado al momento del cambio
|
||||
public int IdUsuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
namespace GestionIntegral.Api.Dtos.Empresas
|
||||
{
|
||||
public class CreateEmpresaDto
|
||||
{
|
||||
[Required(ErrorMessage = "El nombre de la empresa es obligatorio.")]
|
||||
[StringLength(100)]
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
[StringLength(250)]
|
||||
public string? Detalle { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace GestionIntegral.Api.Dtos.Empresas
|
||||
{
|
||||
public class EmpresaDto
|
||||
{
|
||||
public int IdEmpresa { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Detalle { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
namespace GestionIntegral.Api.Dtos.Empresas
|
||||
{
|
||||
public class UpdateEmpresaDto
|
||||
{
|
||||
[Required(ErrorMessage = "El nombre de la empresa es obligatorio.")]
|
||||
[StringLength(100)]
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
[StringLength(250)]
|
||||
public string? Detalle { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class CreateEstadoBobinaDto
|
||||
{
|
||||
[Required(ErrorMessage = "La denominación del estado de bobina es obligatoria.")]
|
||||
[StringLength(50, ErrorMessage = "La denominación no puede exceder los 50 caracteres.")]
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
|
||||
[StringLength(150, ErrorMessage = "La observación no puede exceder los 150 caracteres.")]
|
||||
public string? Obs { get; set; } // Observación es opcional
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class CreatePlantaDto
|
||||
{
|
||||
[Required(ErrorMessage = "El nombre de la planta es obligatorio.")]
|
||||
[StringLength(50, ErrorMessage = "El nombre no puede exceder los 50 caracteres.")]
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
|
||||
[Required(ErrorMessage = "El detalle de la planta es obligatorio.")] // Basado en que la tabla no permite NULL
|
||||
[StringLength(200, ErrorMessage = "El detalle no puede exceder los 200 caracteres.")]
|
||||
public string Detalle { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class CreateTipoBobinaDto
|
||||
{
|
||||
[Required(ErrorMessage = "La denominación del tipo de bobina es obligatoria.")]
|
||||
[StringLength(150, ErrorMessage = "La denominación no puede exceder los 150 caracteres.")]
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class EstadoBobinaDto
|
||||
{
|
||||
public int IdEstadoBobina { get; set; }
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
public string? Obs { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class PlantaDto
|
||||
{
|
||||
public int IdPlanta { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string Detalle { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class TipoBobinaDto
|
||||
{
|
||||
public int IdTipoBobina { get; set; }
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class UpdateEstadoBobinaDto
|
||||
{
|
||||
[Required(ErrorMessage = "La denominación del estado de bobina es obligatoria.")]
|
||||
[StringLength(50, ErrorMessage = "La denominación no puede exceder los 50 caracteres.")]
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
|
||||
[StringLength(150, ErrorMessage = "La observación no puede exceder los 150 caracteres.")]
|
||||
public string? Obs { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class UpdatePlantaDto
|
||||
{
|
||||
[Required(ErrorMessage = "El nombre de la planta es obligatorio.")]
|
||||
[StringLength(50, ErrorMessage = "El nombre no puede exceder los 50 caracteres.")]
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
|
||||
[Required(ErrorMessage = "El detalle de la planta es obligatorio.")]
|
||||
[StringLength(200, ErrorMessage = "El detalle no puede exceder los 200 caracteres.")]
|
||||
public string Detalle { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Impresion
|
||||
{
|
||||
public class UpdateTipoBobinaDto
|
||||
{
|
||||
// El ID se pasa por la ruta, no en el body para PUT
|
||||
[Required(ErrorMessage = "La denominación del tipo de bobina es obligatoria.")]
|
||||
[StringLength(150, ErrorMessage = "La denominación no puede exceder los 150 caracteres.")]
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Zonas
|
||||
{
|
||||
public class CreateZonaDto
|
||||
{
|
||||
[Required(ErrorMessage = "El nombre de la zona es obligatorio.")]
|
||||
[StringLength(50, ErrorMessage = "El nombre no puede exceder los 50 caracteres.")]
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
|
||||
[StringLength(150, ErrorMessage = "La descripción no puede exceder los 150 caracteres.")]
|
||||
public string? Descripcion { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Zonas
|
||||
{
|
||||
public class UpdateZonaDto
|
||||
{
|
||||
[Required(ErrorMessage = "El nombre de la zona es obligatorio.")]
|
||||
[StringLength(50, ErrorMessage = "El nombre no puede exceder los 50 caracteres.")]
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
|
||||
[StringLength(150, ErrorMessage = "La descripción no puede exceder los 150 caracteres.")]
|
||||
public string? Descripcion { get; set; }
|
||||
// No incluimos Estado aquí, ya que el borrado lógico es una operación separada (DELETE)
|
||||
}
|
||||
}
|
||||
10
Backend/GestionIntegral.Api/Models/Dtos/Zonas/ZonaDto.cs
Normal file
10
Backend/GestionIntegral.Api/Models/Dtos/Zonas/ZonaDto.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace GestionIntegral.Api.Dtos.Zonas
|
||||
{
|
||||
public class ZonaDto
|
||||
{
|
||||
public int IdZona { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Descripcion { get; set; }
|
||||
// No incluimos 'Estado' porque generalmente solo mostraremos las activas
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace GestionIntegral.Api.Models.Empresas
|
||||
{
|
||||
public class EmpresaHistorico
|
||||
{
|
||||
public int IdEmpresa { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Detalle { get; set; }
|
||||
public int IdUsuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
14
Backend/GestionIntegral.Api/Models/Impresion/EstadoBobina.cs
Normal file
14
Backend/GestionIntegral.Api/Models/Impresion/EstadoBobina.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace GestionIntegral.Api.Models.Impresion
|
||||
{
|
||||
public class EstadoBobina
|
||||
{
|
||||
// Columna: Id_EstadoBobina (PK, Identity)
|
||||
public int IdEstadoBobina { get; set; }
|
||||
|
||||
// Columna: Denominacion (varchar(50), NOT NULL)
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
|
||||
// Columna: Obs (varchar(150), NULL)
|
||||
public string? Obs { get; set; } // Permite nulos
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
namespace GestionIntegral.Api.Models.Impresion
|
||||
{
|
||||
public class EstadoBobinaHistorico
|
||||
{
|
||||
// Columna: Id_EstadoBobina (int, FK)
|
||||
public int IdEstadoBobina { get; set; }
|
||||
|
||||
// Columna: Denominacion (varchar(50), NOT NULL)
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
|
||||
// Columna: Obs (varchar(150), NULL)
|
||||
public string? Obs { get; set; }
|
||||
|
||||
// Columnas de Auditoría
|
||||
public int IdUsuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty; // "Insertada", "Modificada", "Eliminada"
|
||||
}
|
||||
}
|
||||
9
Backend/GestionIntegral.Api/Models/Impresion/Planta.cs
Normal file
9
Backend/GestionIntegral.Api/Models/Impresion/Planta.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace GestionIntegral.Api.Models.Impresion
|
||||
{
|
||||
public class Planta
|
||||
{
|
||||
public int IdPlanta { get; set; } // Coincide con PK de bob_dtPlantas
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string Detalle { get; set; } = string.Empty; // Asumiendo que no es null en BD según script
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace GestionIntegral.Api.Models.Impresion
|
||||
{
|
||||
public class PlantaHistorico
|
||||
{
|
||||
public int IdPlanta { get; set; } // FK a bob_dtPlantas
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string Detalle { get; set; } = string.Empty;
|
||||
public int IdUsuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty; // "Insertada", "Modificada", "Eliminada"
|
||||
}
|
||||
}
|
||||
11
Backend/GestionIntegral.Api/Models/Impresion/TipoBobina.cs
Normal file
11
Backend/GestionIntegral.Api/Models/Impresion/TipoBobina.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace GestionIntegral.Api.Models.Impresion
|
||||
{
|
||||
public class TipoBobina
|
||||
{
|
||||
// Columna: Id_TipoBobina (PK, Identity)
|
||||
public int IdTipoBobina { get; set; }
|
||||
|
||||
// Columna: Denominacion (varchar(150), NOT NULL)
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
namespace GestionIntegral.Api.Models.Impresion
|
||||
{
|
||||
public class TipoBobinaHistorico
|
||||
{
|
||||
// Columna: Id_TipoBobina (int, FK)
|
||||
public int IdTipoBobina { get; set; }
|
||||
|
||||
// Columna: Denominacion (varchar(150), NOT NULL)
|
||||
public string Denominacion { get; set; } = string.Empty;
|
||||
|
||||
// Columnas de Auditoría
|
||||
public int IdUsuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty; // "Insertada", "Modificada", "Eliminada"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user