diff --git a/Aspnet/Controllers/AdminController.cs b/Aspnet/Controllers/AdminController.cs index 409aaae..50e76be 100644 --- a/Aspnet/Controllers/AdminController.cs +++ b/Aspnet/Controllers/AdminController.cs @@ -38,12 +38,15 @@ public class AdminController: ControllerBase var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); if (validacion1 == false) return Unauthorized(); + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return BadRequest(new { message = "No hay un cliente por ese token"}); + if (data.email == "" || data.grupo == "") return BadRequest(new { message = "Faltan datos en la request" }); var ret = RepositorioUsuarios.Singleton.CheckGrupo(data.email, data.grupo); if (ret) return BadRequest(new { message = $"El usuario ya pertenece al grupo {data.grupo}"}); - var ret2 = RepositorioUsuarios.Singleton.AñadirClienteAGrupo(data.email, data.grupo); + var ret2 = RepositorioUsuarios.Singleton.AñadirClienteAGrupo(data.email, data.grupo, cli.Dni); return ret2 ? Ok(new {message = "Se Añadio al Grupo"}): BadRequest(new { message = "Fallo al añadirse al Grupo" }); } @@ -54,6 +57,10 @@ public class AdminController: ControllerBase var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); if (validacion1 == false) return Unauthorized(); + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return BadRequest(new { message = "No hay un cliente por ese token"}); + + if (data.email == "" || data.grupo == "") return BadRequest(new { message = "Faltan datos en la request" }); //una ward para que no me bloquee a mi mismo de tener acceso a admin @@ -74,7 +81,7 @@ public class AdminController: ControllerBase if ( ret5 == null || ret5.Where(x=>x.Habilitado == 0).Count() > 0) return BadRequest(new { message = "Aun tenes alquileres pendientes o fallo al intentar obtener la lista de alquileres, no se puede dar de baja"}); } - var ret2 = RepositorioUsuarios.Singleton.EliminarClienteAGrupo(data.email, data.grupo); + var ret2 = RepositorioUsuarios.Singleton.EliminarClienteAGrupo(data.email, data.grupo, cli.Dni); return ret2 ? Ok(new {message = $"Se elimino del Grupo: {data.grupo}"}): BadRequest(new { message = "Fallo al añadirse al Grupo" }); } diff --git a/Aspnet/Controllers/LogsController.cs b/Aspnet/Controllers/LogsController.cs index fa3544c..c232bd1 100644 --- a/Aspnet/Controllers/LogsController.cs +++ b/Aspnet/Controllers/LogsController.cs @@ -8,7 +8,7 @@ namespace AlquilaFacil.Controllers; public class LogsController: ControllerBase { [HttpGet("/api/Logs")] - public IActionResult ObtenerLogs([FromHeader(Name = "Auth")] string Auth, long pag=1) { + public IActionResult ObtenerLogs([FromHeader(Name = "Auth")] string Auth, int pag=1) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Informes"); if (validacion1 == false) return Unauthorized(); @@ -49,4 +49,14 @@ public class LogsController: ControllerBase { } return Ok(ll); } + + [HttpGet("/api/Logs/cantPag")] + public IActionResult cantidadPaginas([FromHeader(Name = "Auth")] string Auth){ + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Informes"); + if (validacion1 == false) return Unauthorized(); + + int c = RepositorioLogs.Singleton.ObtenerCantidadPaginas(); + return Ok(c); + } } \ No newline at end of file diff --git a/Aspnet/Controllers/VentaController.cs b/Aspnet/Controllers/VentaController.cs index b9cb319..ce2e1f7 100644 --- a/Aspnet/Controllers/VentaController.cs +++ b/Aspnet/Controllers/VentaController.cs @@ -44,7 +44,7 @@ public class VentaController:ControllerBase { } [HttpPost("/api/ventas/subirReciboPago")] - public async Task SubirRecibo([FromHeader(Name="Auth")]string Auth, [FromForm]IFormFile file, long idventa ) { + public async Task SubirRecibo([FromHeader(Name="Auth")]string Auth, IFormFile file, long idventa ) { if (String.IsNullOrWhiteSpace(Auth)) return Unauthorized(); var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); if (validacion1 == false){ diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs index e860832..8ab6073 100644 --- a/Entidades/Alquilafacilcontext.cs +++ b/Entidades/Alquilafacilcontext.cs @@ -447,10 +447,15 @@ public partial class AlquilaFacilContext : DbContext modelBuilder.Entity(entity => { - entity.HasKey(e => new { e.Fecha, e.Dniusuario, e.NombreTabla, e.Columna }).HasName("PRIMARY"); + entity.HasKey(e => new { e.Id, e.Fecha, e.Dniusuario, e.NombreTabla, e.Columna }).HasName("PRIMARY"); entity.ToTable("LogDetalle"); + entity.HasIndex(e => new { e.Fecha, e.Dniusuario }, "LogDetalle_ibfk_1"); + + entity.Property(e => e.Id) + .HasColumnType("int(11)") + .HasColumnName("id"); entity.Property(e => e.Fecha) .HasColumnType("datetime") .HasColumnName("fecha"); diff --git a/Entidades/Logdetalle.cs b/Entidades/Logdetalle.cs index 4a9485c..db3946f 100644 --- a/Entidades/Logdetalle.cs +++ b/Entidades/Logdetalle.cs @@ -17,5 +17,7 @@ public partial class LogDetalle public string? ValorNuevo { get; set; } + public int Id { get; set; } + public virtual Log Log { get; set; } = null!; } diff --git a/Front/src/App.svelte b/Front/src/App.svelte index d5c2f3f..430f80e 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -24,6 +24,7 @@ import Informes from "./paginas/Informes.svelte"; import CompraYVentas from "./paginas/CompraYVenta.svelte"; import Ventas from "./paginas/Ventas.svelte"; + import VerLogs from "./paginas/VerLogs.svelte"; @@ -72,6 +73,11 @@ + + + + + diff --git a/Front/src/Componentes/ModalLogs.svelte b/Front/src/Componentes/ModalLogs.svelte new file mode 100644 index 0000000..28638a3 --- /dev/null +++ b/Front/src/Componentes/ModalLogs.svelte @@ -0,0 +1,63 @@ + + + \ No newline at end of file diff --git a/Front/src/Componentes/PaginacionStepper.svelte b/Front/src/Componentes/PaginacionStepper.svelte index 839947e..b57f0f8 100644 --- a/Front/src/Componentes/PaginacionStepper.svelte +++ b/Front/src/Componentes/PaginacionStepper.svelte @@ -1,6 +1,5 @@ diff --git a/Front/src/paginas/VerLogs.svelte b/Front/src/paginas/VerLogs.svelte new file mode 100644 index 0000000..8b29a8c --- /dev/null +++ b/Front/src/paginas/VerLogs.svelte @@ -0,0 +1,109 @@ + + + + +{#if modaldata} + !!(modaldata = "")}/> +{/if} + +{#if showmodal} + !!(showmodal=!showmodal)} log={ll}/> +{/if} + +
+ + + + + + + + + + + + {#each Logs as l} + + + + + + + {/each} + +
FechaId UsuarioAccion
{l.fecha}{l.dniusuario}{l.accion} + +
+ +
\ No newline at end of file diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index a23eeec..175ed29 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -164,4 +164,19 @@ export type VentasDto = { nombreComprador:string, idComprador:number, estado:string, +} + +export type LogDto = { + fecha:Date, + dniusuario:number, + accion:string +} + +export type LogDetalleDto = { + fecha:Date, + dniusuario:number, + nombreTabla:string, + columna:string, + valorAnterior:string, + valorNuevo:string } \ No newline at end of file diff --git a/Modelo/Facade/AuditoriaFacade.cs b/Modelo/Facade/AuditoriaFacade.cs index d455c70..949f7e9 100644 --- a/Modelo/Facade/AuditoriaFacade.cs +++ b/Modelo/Facade/AuditoriaFacade.cs @@ -44,14 +44,21 @@ public class AuditoriaFacade { 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 - }); + if (!_context.LogDetalles.Any(ld => + ld.Fecha == fechaActual && + ld.Dniusuario == dniUsuario && + ld.NombreTabla == nombreTabla && + ld.Columna == propiedad.Name)) + { + logDetalles.Add(new LogDetalle { + Fecha = fechaActual, + Dniusuario = dniUsuario, + NombreTabla = nombreTabla, + Columna = propiedad.Name, + ValorAnterior = valorAnterior, + ValorNuevo = valorNuevo + }); + } } } break; @@ -61,14 +68,21 @@ public class AuditoriaFacade { 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 - }); + if (!_context.LogDetalles.Any(ld => + ld.Fecha == fechaActual && + ld.Dniusuario == dniUsuario && + ld.NombreTabla == nombreTabla && + ld.Columna == propiedad.Name)) + { + logDetalles.Add(new LogDetalle { + Fecha = fechaActual, + Dniusuario = dniUsuario, + NombreTabla = nombreTabla, + Columna = propiedad.Name, + ValorAnterior = null, + ValorNuevo = valorNuevo + }); + } } break; @@ -77,14 +91,21 @@ public class AuditoriaFacade { 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 - }); + if (!_context.LogDetalles.Any(ld => + ld.Fecha == fechaActual && + ld.Dniusuario == dniUsuario && + ld.NombreTabla == nombreTabla && + ld.Columna == propiedad.Name)) + { + logDetalles.Add(new LogDetalle { + Fecha = fechaActual, + Dniusuario = dniUsuario, + NombreTabla = nombreTabla, + Columna = propiedad.Name, + ValorAnterior = valorAnterior, + ValorNuevo = null + }); + } } break; diff --git a/Modelo/Facade/PersistenciaLog.cs b/Modelo/Facade/PersistenciaLog.cs index 7b51b5d..90342a7 100644 --- a/Modelo/Facade/PersistenciaLog.cs +++ b/Modelo/Facade/PersistenciaLog.cs @@ -4,8 +4,13 @@ public class PersistenciaLog { private AlquilaFacilContext _context {get{return new AlquilaFacilContext();}} public void GuardarLog(Log log, IEnumerable detalles) { var con = _context; + int j = 1; + foreach (var i in log.LogDetalles) { + i.Id = j; + j++; + } con.Logs.Add(log); - con.LogDetalles.AddRange(detalles); + //con.LogDetalles.AddRange(detalles); con.SaveChanges(); } } diff --git a/Modelo/RepositorioLogs.cs b/Modelo/RepositorioLogs.cs index 18f2d8f..b558a56 100644 --- a/Modelo/RepositorioLogs.cs +++ b/Modelo/RepositorioLogs.cs @@ -4,11 +4,21 @@ using Microsoft.EntityFrameworkCore; namespace Modelo; public class RepositorioLogs: RepositorioBase { - public ICollection ObtenerDetallesLogs(DateTime fecha, long idusuario) { + public int ObtenerCantidadPaginas() { + var con = Context; + float a = con.Logs.Count()/10f; + int b = (int)a; + if (b != a){ + b++; + } + return b; + } + + public IOrderedEnumerable ObtenerDetallesLogs(DateTime fecha, long idusuario) { var con = Context; var d = con.Logs.Include(x=>x.LogDetalles) .FirstOrDefault(x => x.Fecha == fecha && x.Dniusuario == idusuario); - return d.LogDetalles; + return d.LogDetalles.OrderBy(x=>x.Id); } public IQueryable? ObtenerLogsPaginado(int pag) { diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index 2b2684f..fae8e0d 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -129,7 +129,7 @@ public class RepositorioUsuarios: RepositorioBase { return list; } - public bool AñadirClienteAGrupo(string email, string grupo) { + public bool AñadirClienteAGrupo(string email, string grupo, long dni) { var con = Context; var cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email); @@ -140,11 +140,11 @@ public class RepositorioUsuarios: RepositorioBase { } cli.Idgrupos.Add(gru); - GenerarLog(con, cli.Dni, $"Añadir grupo: {gru.Nombre}"); + GenerarLog(con, dni, $"Añadir grupo: {gru.Nombre}"); return Guardar(con); } - public bool EliminarClienteAGrupo(string email, string grupo) { + public bool EliminarClienteAGrupo(string email, string grupo, long dniresponsable) { var con = Context; var cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email); @@ -154,7 +154,7 @@ public class RepositorioUsuarios: RepositorioBase { return false; } cli.Idgrupos.Remove(gru); - GenerarLog(con, cli.Dni, $"Eliminar de grupo: {gru.Nombre}"); + GenerarLog(con, dniresponsable, $"Eliminar de grupo: {gru.Nombre}"); return Guardar(con); }