feat: implementado todo lo de auditoria tocaria testearlo nomás
This commit is contained in:
98
Modelo/Facade/AuditoriaFacade.cs
Normal file
98
Modelo/Facade/AuditoriaFacade.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
using Entidades;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Modelo.Facade;
|
||||
public class AuditoriaFacade {
|
||||
private readonly AlquilaFacilContext _context;
|
||||
private readonly FiltroCambios _filtradoDeCambios=new();
|
||||
private readonly ValidadorDeCambios _validadorDeCambios=new();
|
||||
private readonly PersistenciaLog _persistenciaDeLog=new();
|
||||
|
||||
public AuditoriaFacade(AlquilaFacilContext context) {
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public void GenerarLog(long dniUsuario, string v) {
|
||||
var cambios = _filtradoDeCambios.FiltrarCambios(_context.ChangeTracker.Entries());
|
||||
|
||||
var fechaActual = DateTime.Now;
|
||||
|
||||
var log = new Log{
|
||||
Fecha = fechaActual,
|
||||
Dniusuario = dniUsuario,
|
||||
Accion = v
|
||||
};
|
||||
|
||||
log.LogDetalles = ProcesarCambios(cambios, fechaActual, dniUsuario);
|
||||
|
||||
_persistenciaDeLog.GuardarLog(log, log.LogDetalles);
|
||||
}
|
||||
|
||||
private List<LogDetalle> ProcesarCambios(IEnumerable<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry> cambios,
|
||||
DateTime fechaActual, long dniUsuario) {
|
||||
|
||||
var logDetalles = new List<LogDetalle>();
|
||||
foreach (var cambio in cambios) {
|
||||
var nombreTabla = cambio.Entity.GetType().Name;
|
||||
Console.WriteLine($"Entidad: {cambio.Entity.GetType().Name}, Estado: {cambio.State}");
|
||||
|
||||
switch (cambio.State) {
|
||||
case EntityState.Modified:
|
||||
foreach (var propiedad in cambio.OriginalValues.Properties) {
|
||||
if (propiedad.Name == "Token") break;
|
||||
var valorAnterior = cambio.OriginalValues[propiedad]?.ToString();
|
||||
var valorNuevo = cambio.CurrentValues[propiedad]?.ToString();
|
||||
|
||||
if (_validadorDeCambios.ValidarCambio(valorAnterior??"", valorNuevo??"")) {
|
||||
logDetalles.Add(new LogDetalle {
|
||||
Fecha = fechaActual,
|
||||
Dniusuario = dniUsuario,
|
||||
NombreTabla = nombreTabla,
|
||||
Columna = propiedad.Name,
|
||||
ValorAnterior = valorAnterior,
|
||||
ValorNuevo = valorNuevo
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case EntityState.Added:
|
||||
foreach (var propiedad in cambio.CurrentValues.Properties) {
|
||||
if (propiedad.Name == "Token") break;
|
||||
var valorNuevo = cambio.CurrentValues[propiedad]?.ToString();
|
||||
|
||||
logDetalles.Add(new LogDetalle {
|
||||
Fecha = fechaActual,
|
||||
Dniusuario = dniUsuario,
|
||||
NombreTabla = nombreTabla,
|
||||
Columna = propiedad.Name,
|
||||
ValorAnterior = null,
|
||||
ValorNuevo = valorNuevo
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
case EntityState.Deleted:
|
||||
foreach (var propiedad in cambio.OriginalValues.Properties) {
|
||||
if (propiedad.Name == "Token") break;
|
||||
var valorAnterior = cambio.OriginalValues[propiedad]?.ToString();
|
||||
|
||||
logDetalles.Add(new LogDetalle {
|
||||
Fecha = fechaActual,
|
||||
Dniusuario = dniUsuario,
|
||||
NombreTabla = nombreTabla,
|
||||
Columna = propiedad.Name,
|
||||
ValorAnterior = valorAnterior,
|
||||
ValorNuevo = null
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
Console.WriteLine($"Estado no manejado: {cambio.State}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return logDetalles;
|
||||
}
|
||||
}
|
||||
6
Modelo/Facade/FiltroCambios.cs
Normal file
6
Modelo/Facade/FiltroCambios.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace Modelo.Facade;
|
||||
public class FiltroCambios {
|
||||
public IEnumerable<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry> FiltrarCambios(IEnumerable<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry> cambios) {
|
||||
return cambios.Where(c => c.Entity.GetType().Name != "EntidadExcluida");
|
||||
}
|
||||
}
|
||||
11
Modelo/Facade/PersistenciaLog.cs
Normal file
11
Modelo/Facade/PersistenciaLog.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using Entidades;
|
||||
namespace Modelo.Facade;
|
||||
public class PersistenciaLog {
|
||||
private AlquilaFacilContext _context {get{return new AlquilaFacilContext();}}
|
||||
public void GuardarLog(Log log, IEnumerable<LogDetalle> detalles) {
|
||||
var con = _context;
|
||||
con.Logs.Add(log);
|
||||
con.LogDetalles.AddRange(detalles);
|
||||
con.SaveChanges();
|
||||
}
|
||||
}
|
||||
6
Modelo/Facade/ValidadorCambios.cs
Normal file
6
Modelo/Facade/ValidadorCambios.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace Modelo.Facade;
|
||||
public class ValidadorDeCambios {
|
||||
public bool ValidarCambio(string valorAnterior, string valorNuevo) {
|
||||
return !string.IsNullOrEmpty(valorNuevo) && valorAnterior != valorNuevo;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
using Entidades;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Modelo.Facade;
|
||||
|
||||
namespace Modelo;
|
||||
|
||||
@@ -9,6 +11,12 @@ public abstract class RepositorioBase<S>
|
||||
private static readonly S instance = new();
|
||||
public static S Singleton { get { return instance; }}
|
||||
|
||||
public void GenerarLog(AlquilaFacilContext context, long dni, string accion) {
|
||||
var Auditoria = new AuditoriaFacade(context);
|
||||
|
||||
Auditoria.GenerarLog(dni, accion??"");
|
||||
return;
|
||||
}
|
||||
public bool Guardar(AlquilaFacilContext context) {
|
||||
bool ret = false;
|
||||
try
|
||||
|
||||
@@ -27,7 +27,7 @@ public class RepositorioCanons: RepositorioBase<RepositorioCanons> {
|
||||
return cc;
|
||||
}
|
||||
|
||||
public bool SetRecibo(Canon c, Recibo re) {
|
||||
public bool SetRecibo(Canon c, Recibo re, long dni) {
|
||||
var con = Context;
|
||||
var cc = con.Canons
|
||||
.Include(x=>x.Idcontratos)
|
||||
@@ -51,10 +51,12 @@ public class RepositorioCanons: RepositorioBase<RepositorioCanons> {
|
||||
ccc.IdpropiedadNavigation.Idestado = 3;
|
||||
}
|
||||
|
||||
GenerarLog(con, dni, $"Set Recibo");
|
||||
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public bool CrearCanons(decimal aumento, long idcontrato) {
|
||||
public bool CrearCanons(decimal aumento, long idcontrato, long dni) {
|
||||
var con = Context;
|
||||
|
||||
aumento/=100;
|
||||
@@ -86,6 +88,8 @@ public class RepositorioCanons: RepositorioBase<RepositorioCanons> {
|
||||
con.Canons.Add(c);
|
||||
cont.Idcanons.Add(c);
|
||||
}
|
||||
GenerarLog(con, dni, $"Crear Canones");
|
||||
|
||||
return Guardar(con);
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
}
|
||||
}
|
||||
|
||||
public bool CargaPrecontrato( Contrato? c = null, Notificacione? n = null) {
|
||||
public bool CargaPrecontrato(long dni, Contrato? c = null, Notificacione? n = null) {
|
||||
if (c == null || c.Habilitado == 1) return false;
|
||||
if (n == null) return false;
|
||||
var con = Context;
|
||||
@@ -29,10 +29,10 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
|
||||
con.Contratos.Add(c);
|
||||
con.Notificaciones.Add(n);
|
||||
|
||||
GenerarLog(con, dni, $"CargaPrecontrato");
|
||||
return Guardar(con);
|
||||
}
|
||||
public bool CargaGarantes(List<Garante> gar, string emailInquilino, int idpropiedad) {
|
||||
public bool CargaGarantes(List<Garante> gar, string emailInquilino, int idpropiedad, long dni) {
|
||||
var con = Context;
|
||||
Contrato? contr = con.Contratos.Include(x=>x.DniinquilinoNavigation).Include(x=>x.Idgarantes)
|
||||
.FirstOrDefault(x=>x.Idpropiedad == idpropiedad &&
|
||||
@@ -48,7 +48,7 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
con.Garantes.Add(i);
|
||||
contr.Idgarantes.Add(i);
|
||||
}
|
||||
|
||||
GenerarLog(con, dni, $"Alta Garantes");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
|
||||
}
|
||||
|
||||
public bool CancelarPrecontrato(string emailInquilino, int idpropiedad) {
|
||||
public bool CancelarPrecontrato(string emailInquilino, int idpropiedad, long dni) {
|
||||
var con = Context;
|
||||
Contrato? contr = con.Contratos.Include(x=>x.DniinquilinoNavigation)
|
||||
.FirstOrDefault(x=>x.Idpropiedad == idpropiedad &&
|
||||
@@ -86,6 +86,7 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
if (contr == null || contr.IdpropiedadNavigation == null) return false;
|
||||
contr.Cancelado = 1;
|
||||
contr.IdpropiedadNavigation.Idestado = 1;
|
||||
GenerarLog(con, dni, $"Cancelar Precontrato");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -101,16 +102,17 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
return contr;
|
||||
}
|
||||
|
||||
public bool AddUrl(long id, string nuevoNombreArchivo) {
|
||||
public bool AddUrl(long id, string nuevoNombreArchivo, long dni) {
|
||||
var con = Context;
|
||||
Contrato? contrato = con.Contratos
|
||||
.FirstOrDefault(x=>x.Id == id);
|
||||
if (contrato == null) return false;
|
||||
contrato.UrlContrato = nuevoNombreArchivo;
|
||||
GenerarLog(con, dni, $"Añadido contrato");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public bool AceptarContrato(long idcontrato) {
|
||||
public bool AceptarContrato(long idcontrato, long dni) {
|
||||
var con = Context;
|
||||
Contrato? cont = con.Contratos
|
||||
.Include(x=>x.Idcanons)
|
||||
@@ -151,15 +153,18 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
cont.Idcanons.Add(can);
|
||||
}
|
||||
}
|
||||
GenerarLog(con, dni, $"Aceptado contrato");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public bool CancelarPrecontrato(long idcontrato) {
|
||||
public bool CancelarPrecontrato(long idcontrato, long dni) {
|
||||
var con = Context;
|
||||
Contrato? cont = con.Contratos.Include(x=>x.IdpropiedadNavigation).FirstOrDefault(x=>x.Id ==idcontrato && x.Habilitado ==0);
|
||||
if (cont == null|| cont.IdpropiedadNavigation==null) return false;
|
||||
cont.Cancelado = 1;
|
||||
cont.IdpropiedadNavigation.Idestado = 1;
|
||||
GenerarLog(con, dni, $"Cancelar Precontrato");
|
||||
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -214,7 +219,7 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public bool CargaPrecontratoOpcionVenta(Contrato c, Notificacione n, Venta v) {
|
||||
public bool CargaPrecontratoOpcionVenta(Contrato c, Notificacione n, Venta v, long dni) {
|
||||
if (c == null || c.Habilitado == 1) return false;
|
||||
if (n == null) return false;
|
||||
var con = Context;
|
||||
@@ -233,6 +238,7 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||
con.Ventas.Add(v);
|
||||
con.Contratos.Add(c);
|
||||
con.Notificaciones.Add(n);
|
||||
GenerarLog(con, dni, $"Carga Precontrato con opcion venta");
|
||||
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -4,18 +4,20 @@ using Microsoft.EntityFrameworkCore;
|
||||
namespace Modelo;
|
||||
|
||||
public class RepositorioDefectos: RepositorioBase<RepositorioDefectos> {
|
||||
public bool AltaDefecto(Defecto defecto){
|
||||
public bool AltaDefecto(Defecto defecto, long dni){
|
||||
var con = Context;
|
||||
defecto.Id = con.Defectos.Any()? con.Defectos.Count()+1 : 1;
|
||||
con.Defectos.Add(defecto);
|
||||
GenerarLog(con, dni, $"Alta Defecto: {defecto.Id}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public bool MarcarPago(long iddefecto){
|
||||
public bool MarcarPago(long iddefecto, long dni){
|
||||
var con = Context;
|
||||
var d = con.Defectos.FirstOrDefault(x=>x.Id == iddefecto);
|
||||
if (d == null)return false;
|
||||
d.Idestado = 2;
|
||||
GenerarLog(con, dni, $"Marcado Pago Defecto: {iddefecto}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,19 +4,6 @@ using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Modelo;
|
||||
public class RepositorioGrupos: RepositorioBase<RepositorioGrupos> {
|
||||
public bool CrearGrupo(string descripcion)
|
||||
{
|
||||
var con = Context;
|
||||
|
||||
int mx = con.Grupos.Max(grupo => grupo.Id);
|
||||
Grupo gru = new Grupo{
|
||||
Id = mx+1,
|
||||
Nombre = descripcion,
|
||||
};
|
||||
con.Grupos.Add(gru);
|
||||
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public IQueryable<Permiso> ListarPermisosDeGrupo(string grupo) {
|
||||
var con = Context;
|
||||
|
||||
@@ -49,18 +49,4 @@ public class RepositorioPermisos: RepositorioBase<RepositorioPermisos> {
|
||||
|
||||
return tienePermiso;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
public bool CrearPermiso(string descripcion) {
|
||||
var con = Context;
|
||||
int mx = con.Permisos.Max(x => x.Id);
|
||||
|
||||
Permiso per = new Permiso{
|
||||
Id = mx+1,
|
||||
Descripcion = descripcion
|
||||
};
|
||||
con.Permisos.Add(per);
|
||||
return Guardar(con);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -70,7 +70,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
||||
return (int)filasInsertadasParam.Value == 1? true: false;
|
||||
}
|
||||
|
||||
public bool PatchPropiedad(Propiedade prop) {
|
||||
public bool PatchPropiedad(Propiedade prop, long dni) {
|
||||
var con = Context;
|
||||
Propiedade? propi = con.Propiedades.Include(x=>x.IdServicios).FirstOrDefault(x=>x.Id == prop.Id);
|
||||
|
||||
@@ -90,7 +90,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
||||
if (servi == null) return false;
|
||||
propi.IdServicios.Add(servi);
|
||||
}
|
||||
|
||||
GenerarLog(con, dni, $"Se modificó: {prop.Id}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -156,23 +156,23 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
||||
}else{
|
||||
prop.Idestado = 1;
|
||||
}
|
||||
|
||||
GenerarLog(con, cli.Dni, $"Baja propiedad: {prop.Id}");
|
||||
return Guardar(con);
|
||||
|
||||
}
|
||||
|
||||
public bool BajaPropiedad(int id) {
|
||||
public bool BajaPropiedad(int id, long dni) {
|
||||
var con = Context;
|
||||
Propiedade? prop = con.Propiedades.FirstOrDefault(x=>x.Id == id);
|
||||
|
||||
if (prop == null||prop.Dnipropietario == 0) return false;
|
||||
|
||||
prop.Idestado = prop.Idestado == 3 ? 1 : 3;
|
||||
|
||||
GenerarLog(con, dni, $"Baja propiedad: {prop.Id}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public bool BajaServiciosAPropiedad(int idprop, List<int> idserv) {
|
||||
public bool BajaServiciosAPropiedad(int idprop, List<int> idserv, long dni) {
|
||||
var con = Context;
|
||||
Propiedade? prop = con.Propiedades.Include(x=>x.IdServicios).FirstOrDefault(x => x.Id == idprop);
|
||||
if (prop == null) return false;
|
||||
@@ -186,7 +186,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
||||
prop.IdServicios.Remove(servicio);
|
||||
}
|
||||
}
|
||||
|
||||
GenerarLog(con, dni, $"Baja servicios a propiedad: {prop.Id}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
|
||||
if (cli.Dni == 0) return false;
|
||||
|
||||
cli.Idgrupos.Add(grupo);
|
||||
GenerarLog(con, cli.Dni, $"Alta Inquilino: {cli.Dni}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -52,6 +53,7 @@ public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
|
||||
if (cli.Dni == 0) return false;
|
||||
|
||||
cli.Idgrupos.Add(grupo);
|
||||
GenerarLog(con, cli.Dni, $"Alta Propietario: {cli.Dni}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -67,7 +69,8 @@ public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
|
||||
|
||||
|
||||
public bool CheckUsuario(LoginDto logindto) {
|
||||
|
||||
if (logindto.Contraseña ==null)return false;
|
||||
|
||||
string Contraseña = HacerHash(logindto.Contraseña);
|
||||
|
||||
Cliente? usu = Context.Clientes.FirstOrDefault(a => a.Email == logindto.Email);
|
||||
@@ -137,6 +140,7 @@ public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
|
||||
}
|
||||
|
||||
cli.Idgrupos.Add(gru);
|
||||
GenerarLog(con, cli.Dni, $"Añadir grupo: {gru.Nombre}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -150,6 +154,7 @@ public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
|
||||
return false;
|
||||
}
|
||||
cli.Idgrupos.Remove(gru);
|
||||
GenerarLog(con, cli.Dni, $"Eliminar de grupo: {gru.Nombre}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
@@ -164,7 +169,7 @@ public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
|
||||
} else {
|
||||
cli.Habilitado = 0;
|
||||
}
|
||||
|
||||
GenerarLog(con, cli.Dni, $"Baja cliente id: {cli.Dni}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public class RepositorioVentas: RepositorioBase<RepositorioVentas> {
|
||||
return venta;
|
||||
}
|
||||
|
||||
public bool PatchVenta(Venta venta) {
|
||||
public bool PatchVenta(Venta venta, long dni) {
|
||||
var con = Context;
|
||||
var a = con.Ventas.FirstOrDefault(x=>x.Id == venta.Id);
|
||||
|
||||
@@ -60,15 +60,16 @@ public class RepositorioVentas: RepositorioBase<RepositorioVentas> {
|
||||
a.Idpropiedad = venta.Idpropiedad;
|
||||
a.Fechainicio = venta.Fechainicio;
|
||||
a.Idestado=2;
|
||||
|
||||
GenerarLog(con, dni, $"Se Ejercio la opcion de venta para la propiedad: {venta.Idpropiedad}");
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public bool SetUrlRecibo(long id, string nuevoNombreArchivo) {
|
||||
public bool SetUrlRecibo(long id, string nuevoNombreArchivo, long dni) {
|
||||
var con = Context;
|
||||
var venta = con.Ventas.FirstOrDefault(x=>x.Id == id);
|
||||
if (venta==null) return false;
|
||||
venta.UrlRecibo = nuevoNombreArchivo;
|
||||
GenerarLog(con, dni, $"Se seteo el recibo con nombre: {nuevoNombreArchivo}");
|
||||
return Guardar(con);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user