Backend:
Diseño de un AuditoriaController con un patrón para añadir endpoints de historial para diferentes entidades. Implementación de la lógica de servicio y repositorio para obtener datos de las tablas _H para: Usuarios (gral_Usuarios_H) Pagos de Distribuidores (cue_PagosDistribuidor_H) Notas de Crédito/Débito (cue_CreditosDebitos_H) Entradas/Salidas de Distribuidores (dist_EntradasSalidas_H) Entradas/Salidas de Canillitas (dist_EntradasSalidasCanillas_H) Novedades de Canillitas (dist_dtNovedadesCanillas_H) Ajustes Manuales de Saldo (cue_SaldoAjustesHistorial) Tipos de Pago (cue_dtTipopago_H) Canillitas (Maestro) (dist_dtCanillas_H) Distribuidores (Maestro) (dist_dtDistribuidores_H) Empresas (Maestro) (dist_dtEmpresas_H) DTOs específicos para cada tipo de historial, incluyendo NombreUsuarioModifico. Frontend: Servicio auditoriaService.ts con métodos para llamar a cada endpoint de historial. Página AuditoriaGeneralPage.tsx con: Selector de "Tipo de Entidad a Auditar". Filtros comunes (Fechas, Usuario Modificador, Tipo de Modificación, ID Entidad). Un DataGrid que muestra las columnas dinámicamente según el tipo de entidad seleccionada. Lógica para cargar los datos correspondientes. DTOs de historial en TypeScript. Actualizaciones en AppRoutes.tsx y MainLayout.tsx para la nueva sección de Auditoría (restringida a SuperAdmin).
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Models.Contables
|
||||
{
|
||||
public class TipoPagoHistorico
|
||||
{
|
||||
public int IdTipoPago { get; set; } // Este NO es IDENTITY
|
||||
public int Id_TipoPago { get; set; } // ID del TipoPago original
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Detalle { get; set; }
|
||||
public int IdUsuario { get; set; }
|
||||
public int Id_Usuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty; // "Insertada", "Modificada", "Eliminada"
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Models.Distribucion
|
||||
{
|
||||
public class CambioParadaCanilla
|
||||
{
|
||||
public int IdRegistro { get; set; } // Id_Registro (PK, Identity)
|
||||
public int IdCanilla { get; set; } // Id_Canilla (FK)
|
||||
public string Parada { get; set; } = string.Empty; // Parada (nueva dirección)
|
||||
public DateTime VigenciaD { get; set; } // VigenciaD (fecha desde que aplica la nueva parada)
|
||||
public DateTime? VigenciaH { get; set; } // VigenciaH (fecha hasta que aplicó esta parada, NULL si es la actual)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Models.Distribucion
|
||||
{
|
||||
public class CambioParadaCanillaHistorial
|
||||
{
|
||||
public int Id_Registro { get; set; } // FK al registro original
|
||||
public int Id_Canilla { get; set; }
|
||||
public string Parada { get; set; } = string.Empty;
|
||||
public DateTime VigenciaD { get; set; }
|
||||
public DateTime? VigenciaH { get; set; } // Nullable
|
||||
public int Id_Usuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,19 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Models.Distribucion
|
||||
{
|
||||
public class CanillaHistorico
|
||||
public class CanillaHistorico // Corresponde a dist_dtCanillas_H
|
||||
{
|
||||
public int IdCanilla { get; set; }
|
||||
public int Id_Canilla { get; set; }
|
||||
public int? Legajo { get; set; }
|
||||
public string NomApe { get; set; } = string.Empty;
|
||||
public string? Parada { get; set; }
|
||||
public int IdZona { get; set; }
|
||||
public int Id_Zona { get; set; }
|
||||
public bool Accionista { get; set; }
|
||||
public string? Obs { get; set; }
|
||||
public int Empresa { get; set; }
|
||||
public bool Baja { get; set; }
|
||||
public DateTime? FechaBaja { get; set; }
|
||||
|
||||
// Campos de Auditoría
|
||||
public int Id_Usuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Models.Distribucion
|
||||
{
|
||||
public class DistribuidorHistorico
|
||||
public class DistribuidorHistorico // Corresponde a dist_dtDistribuidores_H
|
||||
{
|
||||
public int IdDistribuidor { get; set; } // FK
|
||||
public int Id_Distribuidor { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Contacto { get; set; }
|
||||
public string NroDoc { get; set; } = string.Empty;
|
||||
public int? IdZona { get; set; }
|
||||
public int? Id_Zona { get; set; }
|
||||
public string? Calle { get; set; }
|
||||
public string? Numero { get; set; }
|
||||
public string? Piso { get; set; }
|
||||
@@ -14,8 +16,6 @@ namespace GestionIntegral.Api.Models.Distribucion
|
||||
public string? Telefono { get; set; }
|
||||
public string? Email { get; set; }
|
||||
public string? Localidad { get; set; }
|
||||
|
||||
// Campos de Auditoría
|
||||
public int Id_Usuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
namespace GestionIntegral.Api.Models.Empresas
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Models.Distribucion
|
||||
{
|
||||
public class EmpresaHistorico
|
||||
public class EmpresaHistorico // Corresponde a dist_dtEmpresas_H
|
||||
{
|
||||
public int IdEmpresa { get; set; }
|
||||
public int Id_Empresa { get; set; } // ID de la Empresa original
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Detalle { get; set; }
|
||||
public int IdUsuario { get; set; }
|
||||
public int Id_Usuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Models.Distribucion // Asegúrate que este namespace sea el correcto
|
||||
{
|
||||
public class EntradaSalidaCanillaHistorico
|
||||
{
|
||||
public int Id_Parte { get; set; }
|
||||
public int Id_Publicacion { get; set; }
|
||||
public int Id_Canilla { get; set; }
|
||||
public DateTime Fecha { get; set; }
|
||||
public int CantSalida { get; set; }
|
||||
public int CantEntrada { get; set; }
|
||||
public int Id_Precio { get; set; }
|
||||
public int Id_Recargo { get; set; }
|
||||
public int Id_PorcMon { get; set; }
|
||||
public string? Observacion { get; set; }
|
||||
public int Id_Usuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
// El campo Liquidado, FechaLiquidado, UserLiq no están en dist_EntradasSalidasCanillas_H según tu script.
|
||||
// Si los necesitas auditar, deberías añadirlos a la tabla _H y al modelo.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Models.Distribucion // Asegúrate que el namespace sea el correcto
|
||||
{
|
||||
public class NovedadCanillaHistorico // Corresponde a la tabla dist_dtNovedadesCanillas_H
|
||||
{
|
||||
// Columnas de la tabla dist_dtNovedadesCanillas_H
|
||||
// No hay una PK propia en la tabla _H, se referencia por Id_Novedad de la tabla principal
|
||||
public int Id_Novedad { get; set; }
|
||||
public int Id_Canilla { get; set; }
|
||||
public DateTime Fecha { get; set; } // Fecha original de la novedad
|
||||
public string? Detalle { get; set; }
|
||||
|
||||
// Columnas de auditoría estándar
|
||||
public int Id_Usuario { get; set; }
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria // O Auditoria
|
||||
{
|
||||
public class CanillaHistorialDto
|
||||
{
|
||||
public int Id_Canilla { get; set; }
|
||||
public int? Legajo { get; set; }
|
||||
public string NomApe { get; set; } = string.Empty;
|
||||
public string? Parada { get; set; }
|
||||
public int Id_Zona { get; set; }
|
||||
// public string NombreZona { get; set; } // Opcional, si lo quieres traer con JOIN
|
||||
public bool Accionista { get; set; }
|
||||
public string? Obs { get; set; }
|
||||
public int Empresa { get; set; } // Id de la empresa
|
||||
// public string NombreEmpresa { get; set; } // Opcional
|
||||
public bool Baja { get; set; }
|
||||
public DateTime? FechaBaja { get; set; }
|
||||
|
||||
public int Id_Usuario { get; set; }
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria
|
||||
{
|
||||
public class DistribuidorHistorialDto
|
||||
{
|
||||
public int Id_Distribuidor { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Contacto { get; set; }
|
||||
public string NroDoc { get; set; } = string.Empty;
|
||||
public int? Id_Zona { get; set; }
|
||||
// public string NombreZona { get; set; } // Opcional
|
||||
public string? Calle { get; set; }
|
||||
public string? Numero { get; set; }
|
||||
public string? Piso { get; set; }
|
||||
public string? Depto { get; set; }
|
||||
public string? Telefono { get; set; }
|
||||
public string? Email { get; set; }
|
||||
public string? Localidad { get; set; }
|
||||
|
||||
public int Id_Usuario { get; set; }
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria // O Auditoria
|
||||
{
|
||||
public class EmpresaHistorialDto
|
||||
{
|
||||
public int Id_Empresa { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Detalle { get; set; }
|
||||
|
||||
public int Id_Usuario { get; set; }
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria
|
||||
{
|
||||
public class EntradaSalidaCanillaHistorialDto
|
||||
{
|
||||
// Campos de la tabla _H (dist_EntradasSalidasCanillas_H)
|
||||
public int Id_Parte { get; set; } // ID del movimiento original
|
||||
public int Id_Publicacion { get; set; }
|
||||
// public string NombrePublicacion { get; set; } // Opcional
|
||||
public int Id_Canilla { get; set; }
|
||||
// public string NombreCanilla { get; set; } // Opcional
|
||||
public DateTime Fecha { get; set; } // Fecha original del movimiento
|
||||
public int CantSalida { get; set; }
|
||||
public int CantEntrada { get; set; }
|
||||
public int Id_Precio { get; set; }
|
||||
public int Id_Recargo { get; set; }
|
||||
public int Id_PorcMon { get; set; } // ID de la config de Porcentaje/Monto
|
||||
public string? Observacion { get; set; }
|
||||
// Nota: Los campos Liquidado, FechaLiquidado, UserLiq del historial
|
||||
// podrían o no ser relevantes para mostrar en esta auditoría de *cambios de datos*.
|
||||
// Si un cambio fue "Liquidado = true", el TipoMod sería "Liquidada" o similar.
|
||||
// Podrías incluirlos si quieres ver el estado de liquidación en el momento del cambio.
|
||||
|
||||
// Campos de auditoría
|
||||
public int Id_Usuario { get; set; }
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria
|
||||
{
|
||||
public class EntradaSalidaDistHistorialDto
|
||||
{
|
||||
// Campos de la tabla _H (dist_EntradasSalidas_H)
|
||||
public int Id_Parte { get; set; } // ID del movimiento original
|
||||
public int Id_Publicacion { get; set; }
|
||||
// public string NombrePublicacion { get; set; } // Opcional
|
||||
public int Id_Distribuidor { get; set; }
|
||||
// public string NombreDistribuidor { get; set; } // Opcional
|
||||
public DateTime Fecha { get; set; } // Fecha original del movimiento
|
||||
public string TipoMovimiento { get; set; } = string.Empty;
|
||||
public int Cantidad { get; set; }
|
||||
public int Remito { get; set; }
|
||||
public string? Observacion { get; set; }
|
||||
public int Id_Precio { get; set; }
|
||||
public int Id_Recargo { get; set; }
|
||||
public int Id_Porcentaje { get; set; }
|
||||
|
||||
// Campos de auditoría
|
||||
public int Id_Usuario { get; set; }
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria
|
||||
{
|
||||
public class NotaCreditoDebitoHistorialDto
|
||||
{
|
||||
// Campos de la tabla _H (cue_CreditosDebitos_H)
|
||||
public int Id_Nota { get; set; } // ID de la nota original
|
||||
public string Destino { get; set; } = string.Empty;
|
||||
public int Id_Destino { get; set; }
|
||||
// public string NombreDestinatario { get; set; } // Opcional, si lo quieres traer con JOIN
|
||||
public string? Referencia { get; set; }
|
||||
public string Tipo { get; set; } = string.Empty; // "Debito" o "Credito"
|
||||
public DateTime Fecha { get; set; } // Fecha original de la nota
|
||||
public decimal Monto { get; set; }
|
||||
public string? Observaciones { get; set; }
|
||||
public int Id_Empresa { get; set; }
|
||||
// public string NombreEmpresa { get; set; } // Opcional
|
||||
|
||||
// Campos de auditoría
|
||||
public int Id_Usuario { get; set; }
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria
|
||||
{
|
||||
public class NovedadCanillaHistorialDto
|
||||
{
|
||||
public int Id_Novedad { get; set; } // ID de la novedad original
|
||||
public int Id_Canilla { get; set; }
|
||||
// public string NombreCanilla { get; set; } // Opcional, si quieres traerlo
|
||||
public DateTime Fecha { get; set; } // Fecha original de la novedad
|
||||
public string? Detalle { get; set; }
|
||||
|
||||
// Campos de auditoría
|
||||
public int Id_Usuario { get; set; }
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria
|
||||
{
|
||||
public class PagoDistribuidorHistorialDto
|
||||
{
|
||||
// Campos de la tabla _H
|
||||
public int Id_Pago { get; set; } // El ID del pago original que fue modificado/eliminado
|
||||
public int Id_Distribuidor { get; set; }
|
||||
public DateTime Fecha { get; set; }
|
||||
public string TipoMovimiento { get; set; } = string.Empty;
|
||||
public int Recibo { get; set; }
|
||||
public decimal Monto { get; set; }
|
||||
public int Id_TipoPago { get; set; }
|
||||
public string? Detalle { get; set; }
|
||||
public int Id_Empresa { get; set; }
|
||||
|
||||
// Campos de auditoría
|
||||
public int Id_Usuario { get; set; } // ID del usuario que hizo el cambio
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty; // Nombre del usuario
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty; // "Creado", "Actualizado", "Eliminado"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria
|
||||
{
|
||||
public class SaldoAjusteHistorialDto
|
||||
{
|
||||
public int IdSaldoAjusteHist { get; set; }
|
||||
public string Destino { get; set; } = string.Empty;
|
||||
public int Id_Destino { get; set; }
|
||||
// public string NombreDestinatario { get; set; } // Opcional
|
||||
public int Id_Empresa { get; set; }
|
||||
// public string NombreEmpresa { get; set; } // Opcional
|
||||
public decimal MontoAjuste { get; set; }
|
||||
public decimal SaldoAnterior { get; set; }
|
||||
public decimal SaldoNuevo { get; set; }
|
||||
public string Justificacion { get; set; } = string.Empty;
|
||||
public DateTime FechaAjuste { get; set; } // Es la FechaMod en este contexto
|
||||
|
||||
// Campos de auditoría
|
||||
public int Id_UsuarioAjuste { get; set; } // Corresponde a Id_Usuario en la tabla _H general
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
// TipoMod no está en cue_SaldoAjustesHistorial, se infiere que es "AjusteManual"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Auditoria
|
||||
{
|
||||
public class TipoPagoHistorialDto
|
||||
{
|
||||
public int Id_TipoPago { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty; // Nombre del TipoPago en ese momento del historial
|
||||
public string? Detalle { get; set; } // Detalle en ese momento del historial
|
||||
|
||||
public int Id_Usuario { get; set; }
|
||||
public string NombreUsuarioModifico { get; set; } = string.Empty;
|
||||
public DateTime FechaMod { get; set; }
|
||||
public string TipoMod { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Distribucion
|
||||
{
|
||||
public class CambioParadaDto
|
||||
{
|
||||
public int IdRegistro { get; set; }
|
||||
public int IdCanilla { get; set; }
|
||||
public string NombreCanilla { get; set; } = string.Empty; // Para UI
|
||||
public string Parada { get; set; } = string.Empty;
|
||||
public string VigenciaD { get; set; } = string.Empty; // yyyy-MM-dd
|
||||
public string? VigenciaH { get; set; } // yyyy-MM-dd o null
|
||||
public bool EsActual => VigenciaH == null; // Propiedad calculada
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Distribucion
|
||||
{
|
||||
public class CreateCambioParadaDto
|
||||
{
|
||||
// IdCanilla vendrá de la ruta
|
||||
[Required(ErrorMessage = "La nueva dirección de parada es obligatoria.")]
|
||||
[StringLength(150)]
|
||||
public string Parada { get; set; } = string.Empty;
|
||||
|
||||
[Required(ErrorMessage = "La fecha de Vigencia Desde es obligatoria.")]
|
||||
public DateTime VigenciaD { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Distribucion
|
||||
{
|
||||
public class UpdateCambioParadaDto // Para cerrar una parada
|
||||
{
|
||||
[Required(ErrorMessage = "La fecha de Vigencia Hasta es obligatoria para cerrar una parada.")]
|
||||
public DateTime VigenciaH { get; set; }
|
||||
// No se permite modificar Parada o VigenciaD de un registro existente.
|
||||
// Si se equivocó, se elimina y se crea uno nuevo, o se crea uno nuevo que cierre el anterior.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user