From f750ecc77ec32a18a2f9697fa49ab8f6b3f638ac Mon Sep 17 00:00:00 2001 From: fede Date: Sat, 25 Jan 2025 00:20:47 -0300 Subject: [PATCH] =?UTF-8?q?una=20cosa=20m=C3=A1s=20hecha?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Aspnet/Builder/DtoBuilder/VentasDtoBuilder.cs | 41 ++++++++++ Aspnet/Controllers/VentaController.cs | 63 +++++++++++++++- Entidades/Dto/VentasDto.cs | 12 +++ Front/src/App.svelte | 14 +++- Front/src/paginas/CompraYVenta.svelte | 75 +++++++++++++++++++ Front/src/paginas/ContratoInquilino.svelte | 2 +- Front/src/paginas/ContratosPropietario.svelte | 2 +- Front/src/paginas/Ventas.svelte | 7 ++ Front/src/types.d.ts | 12 +++ Modelo/RepositorioVentas.cs | 27 +++++++ 10 files changed, 249 insertions(+), 6 deletions(-) create mode 100644 Aspnet/Builder/DtoBuilder/VentasDtoBuilder.cs create mode 100644 Entidades/Dto/VentasDto.cs create mode 100644 Front/src/paginas/CompraYVenta.svelte create mode 100644 Front/src/paginas/Ventas.svelte diff --git a/Aspnet/Builder/DtoBuilder/VentasDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/VentasDtoBuilder.cs new file mode 100644 index 0000000..5968bea --- /dev/null +++ b/Aspnet/Builder/DtoBuilder/VentasDtoBuilder.cs @@ -0,0 +1,41 @@ +using Entidades.Dto; + +namespace AlquilaFacil.Builder; +public class VentasDtoBuilder: Builder { + public VentasDtoBuilder SetId(long id) { + data.Id = id; + return this; + } + public VentasDtoBuilder SetMonto(decimal monto) { + data.Monto = monto; + return this; + } + public VentasDtoBuilder SetDivisa(string divisa) { + data.Divisa = divisa; + return this; + } + public VentasDtoBuilder SetUbicacion(string ubicacion) { + data.Ubicacion = ubicacion; + return this; + } + public VentasDtoBuilder SetNombreVendedor(string nombre) { + data.NombreVendedor = nombre; + return this; + } + public VentasDtoBuilder SetIdVendedor(long idVendedor) { + data.Id = idVendedor; + return this; + } + public VentasDtoBuilder SetNombreComprador(string nombre) { + data.NombreComprador = nombre; + return this; + } + public VentasDtoBuilder SetIdComprador(long Id) { + data.IdComprador = Id; + return this; + } + public VentasDtoBuilder SetEstado(string estado) { + data.Estado = estado; + return this; + } +} \ No newline at end of file diff --git a/Aspnet/Controllers/VentaController.cs b/Aspnet/Controllers/VentaController.cs index 2fa2822..9236327 100644 --- a/Aspnet/Controllers/VentaController.cs +++ b/Aspnet/Controllers/VentaController.cs @@ -47,17 +47,74 @@ public class VentaController:ControllerBase { } + */ [HttpGet("/api/venta")] - public IActionResult ObtenerVenta(long idventa) { + public IActionResult ObtenerVenta([FromHeader(Name="Auth")]string Auth, long idventa=0) { + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false){ + validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino"); + if (validacion1 == false) { + return Unauthorized(); + } + } + if (idventa <= 0) return BadRequest(new { message = "No existen ventas validas para la id 0"}); + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return Unauthorized(); + + var ventas = RepositorioVentas.Singleton.ObtenerVentaPorId(idventa); + if (ventas == null) return BadRequest(new { message ="No hay una venta con ese id"}); + if (ventas.IdVendedor !=cli.Dni && ventas.IdComprador != cli.Dni) return Unauthorized(); + + var v = new VentasDtoBuilder() + .SetId(ventas.Id) + .SetMonto(ventas.Monto) + .SetDivisa(ventas.IddivisaNavigation.Signo) + .SetUbicacion(ventas.IdpropiedadNavigation.Ubicacion) + .SetNombreVendedor($"{ventas.IdVendedorNavigation.Nombre} {ventas.IdVendedorNavigation.Apellido}") + .SetIdVendedor(ventas.IdVendedor??0) + .SetNombreComprador($"{ventas.IdCompradorNavigation.Nombre} {ventas.IdCompradorNavigation.Apellido}") + .SetIdComprador(ventas.IdComprador??0) + .SetEstado(ventas.IdestadoNavigation.Descripcion??"") + .Build(); + + return Ok(new { data = v, iscomprador = (ventas.IdComprador==cli.Dni)?true:false}); } [HttpGet("/api/ventas")] - public IActionResult ObtenerVenta(long idventa) { + public IActionResult ObtenerVenta([FromHeader(Name="Auth")]string Auth) { + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false){ + validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino"); + if (validacion1 == false) { + return Unauthorized(); + } + } + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return Unauthorized(); + + var ventas = RepositorioVentas.Singleton.ObtenerVentasPorDni(cli.Dni); + if (ventas == null) return BadRequest(new { message ="no estas involucrado en ninguna venta o compra"}); + + List lista = new(); + foreach (var i in ventas) { + var v = new VentasDtoBuilder() + .SetId(i.Id) + .SetMonto(i.Monto) + .SetDivisa(i.IddivisaNavigation.Signo) + .SetUbicacion(i.IdpropiedadNavigation.Ubicacion) + .SetNombreVendedor($"{i.IdVendedorNavigation.Nombre} {i.IdVendedorNavigation.Apellido}") + .SetIdVendedor(i.IdVendedor??0) + .SetNombreComprador($"{i.IdCompradorNavigation.Nombre} {i.IdCompradorNavigation.Apellido}") + .SetIdComprador(i.IdComprador??0) + .SetEstado(i.IdestadoNavigation.Descripcion??"") + .Build(); + lista.Add(v); + } + return Ok(lista); } - */ [HttpGet("/api/opcionventa")] public IActionResult ObtenerDto([FromHeader(Name="Auth")]string Auth, long idcontrato=0) { var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); diff --git a/Entidades/Dto/VentasDto.cs b/Entidades/Dto/VentasDto.cs new file mode 100644 index 0000000..5ee9937 --- /dev/null +++ b/Entidades/Dto/VentasDto.cs @@ -0,0 +1,12 @@ +namespace Entidades.Dto; +public class VentasDto { + public long Id { get; set; } + public decimal Monto { get; set; } + public string Divisa { get; set; }=""; + public string Ubicacion { get; set; }=""; + public string NombreVendedor { get; set; }=""; + public long IdVendedor { get; set; } + public string NombreComprador { get; set; }=""; + public long IdComprador { get; set; } + public string Estado { get; set; }=""; +} \ No newline at end of file diff --git a/Front/src/App.svelte b/Front/src/App.svelte index 8575022..d5c2f3f 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -21,7 +21,9 @@ import ControlAlquileresPropietario from "./paginas/ControlAlquileresPropietario.svelte"; import ContratosPropietario from "./paginas/ContratosPropietario.svelte"; import ContratoInquilino from "./paginas/ContratoInquilino.svelte"; - import Informes from "./paginas/Informes.svelte"; + import Informes from "./paginas/Informes.svelte"; + import CompraYVentas from "./paginas/CompraYVenta.svelte"; + import Ventas from "./paginas/Ventas.svelte"; @@ -95,6 +97,16 @@ + + + + + + + + + + diff --git a/Front/src/paginas/CompraYVenta.svelte b/Front/src/paginas/CompraYVenta.svelte new file mode 100644 index 0000000..17e9c26 --- /dev/null +++ b/Front/src/paginas/CompraYVenta.svelte @@ -0,0 +1,75 @@ + + + + +{#if modaldata} + !!(modaldata = "")} /> +{/if} + +
+
+ {#each ventas as venta (venta.id)} +
+
+
+
{venta.nombreVendedor} → {venta.nombreComprador}
+
+
+

+ Monto: {venta.monto} {venta.divisa}
+ Ubicación: {venta.ubicacion}
+ Estado: {venta.estado} +

+
+ +
+
+ {/each} +
+
+ + \ No newline at end of file diff --git a/Front/src/paginas/ContratoInquilino.svelte b/Front/src/paginas/ContratoInquilino.svelte index 8fedbec..372c24c 100644 --- a/Front/src/paginas/ContratoInquilino.svelte +++ b/Front/src/paginas/ContratoInquilino.svelte @@ -525,7 +525,7 @@ Ejercer {#if dtoVenta.fueEjercido} - {/if} diff --git a/Front/src/paginas/ContratosPropietario.svelte b/Front/src/paginas/ContratosPropietario.svelte index e833208..349e17a 100644 --- a/Front/src/paginas/ContratosPropietario.svelte +++ b/Front/src/paginas/ContratosPropietario.svelte @@ -591,7 +591,7 @@ Para que el inquilino pueda ejercer la opcion de venta necesitas estar en el mismo mes que el ultimo pago y haber pagado todos los canones

-
diff --git a/Front/src/paginas/Ventas.svelte b/Front/src/paginas/Ventas.svelte new file mode 100644 index 0000000..e260581 --- /dev/null +++ b/Front/src/paginas/Ventas.svelte @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index 0971a8c..a23eeec 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -152,4 +152,16 @@ export type OpcionVentaDto = { divisa:string, enOrden:boolean, fueEjercido:boolean +} + +export type VentasDto = { + id:number, + monto:numver, + divisa:string, + ubicacion:string, + nombreVendedor:string, + idVendedor:number, + nombreComprador:string, + idComprador:number, + estado:string, } \ No newline at end of file diff --git a/Modelo/RepositorioVentas.cs b/Modelo/RepositorioVentas.cs index 35d85f7..3ce7356 100644 --- a/Modelo/RepositorioVentas.cs +++ b/Modelo/RepositorioVentas.cs @@ -11,6 +11,33 @@ public class RepositorioVentas: RepositorioBase { return c; } + public Venta? ObtenerVentaPorId(long idventa) { + var con = Context; + var vent = con.Ventas + .Include(x=>x.IddivisaNavigation) + .Include(x=>x.IdestadoNavigation) + .Include(x=>x.IdVendedorNavigation) + .Include(x=>x.IdCompradorNavigation) + .Include(x=>x.IdpropiedadNavigation) + .Where(x=>x.Idestado != 1) + .FirstOrDefault(x=>x.Id == idventa); + if (vent == null) return null; + return vent; + } + + public IQueryable? ObtenerVentasPorDni(long dni) { + var con = Context; + var venta = con.Ventas + .Include(x=>x.IddivisaNavigation) + .Include(x=>x.IdestadoNavigation) + .Include(x=>x.IdVendedorNavigation) + .Include(x=>x.IdCompradorNavigation) + .Include(x=>x.IdpropiedadNavigation) + .Where(x=>(x.IdComprador == dni || x.IdVendedor == dni) && x.Idestado!=1 ) + .Distinct(); + return venta; + } + public bool PatchVenta(Venta venta) { var con = Context; var a = con.Ventas.FirstOrDefault(x=>x.Id == venta.Id);