diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs index 8b3ed9b..d346b59 100644 --- a/Aspnet/Controllers/PropiedadesController.cs +++ b/Aspnet/Controllers/PropiedadesController.cs @@ -25,6 +25,39 @@ public class PropiedadesController: ControllerBase { return Ok(ret); } + [HttpGet("/api/propiedades/Venta")] + public IActionResult ObtenerPropiedadesParaVenta([FromHeader(Name = "Auth")] string Auth, int pag = 0) { + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false) { + return Unauthorized(); + } + + if (pag<=0) return BadRequest(new { message = "no existe una pagina 0"}); + + pag-=1; + + var props = RepositorioPropiedades.Singleton.ObtenerPropiedadesEnVenta(pag); + if (props == null) return BadRequest(new { message = "no tengo claro que fallo creo que no existen propiedades en venta"}); + + List l = new(); + + foreach (var i in props) { + var p = new PropiedadesVentaDto{ + Id = i.Id, + Ubicacion = i.Ubicacion, + Canthabitaciones = i.Canthabitaciones, + Divisa = i.IddivisaNavigation.Signo, + Letra = i.Letra??"", + Monto = i.Monto, + Piso = i.Piso??0, + Servicios =string.Join(", ", i.IdServicios.Select(s => s.Descripcion)), + Tipo = i.IdtipropiedadNavigation.Descripcion, + }; + l.Add(p); + } + return Ok(l); + } + [HttpGet("api/propiedad")] public IActionResult ObtenerPropiedadPorId(int Id, [FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); diff --git a/Aspnet/Controllers/VentaController.cs b/Aspnet/Controllers/VentaController.cs index ce2e1f7..8740e53 100644 --- a/Aspnet/Controllers/VentaController.cs +++ b/Aspnet/Controllers/VentaController.cs @@ -14,6 +14,69 @@ namespace AlquilaFacil.Controllers; [ApiController] public class VentaController:ControllerBase { + [HttpGet("/api/propiedad/EstaALaVenta")] + public IActionResult EstaALaVenta([FromHeader(Name="Auth")]string Auth, int idprop=0) { + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false) { + return Unauthorized(); + } + if (idprop<=0) return BadRequest(new { message = "No hay propiedades con id 0 o menor"}); + + Propiedade? prop = RepositorioPropiedades.Singleton.ObtenerPropiedadPorId(idprop); + if (prop == null) return BadRequest(new { message = "No hay propiedades por ese id"}); + return Ok(new { EstaAVenta = prop.Idestado ==4?true:false}); + } + + [HttpPut("/api/propiedad/setPropiedadAVenta")] + public IActionResult setPropiedadAVenta([FromHeader(Name="Auth")]string Auth, SetVentaDto dto) { + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false) { + return Unauthorized(); + } + + if (dto.iddivisa != 0 && dto.iddivisa!=1) return BadRequest(new { message = "no hay una divisa por esa id"}); + if (dto.idpropiedad<=0) return BadRequest(new { message = "No hay propiedades con id 0 o menor"}); + if (dto.monto<1) return BadRequest(new { message = "No se pueden hacer ventas por montos menores a 1"}); + + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return Unauthorized(); + + Propiedade? prop = RepositorioPropiedades.Singleton.ObtenerPropiedadPorId(dto.idpropiedad); + if (prop == null) return BadRequest(new { message = "No hay propiedades por ese id"}); + + if (cli.Dni != prop.Dnipropietario) return Unauthorized(); + + var ret = RepositorioVentas.Singleton.SetVenta(prop.Id, dto.monto, dto.iddivisa, cli.Dni); + return ret? + Ok(new { message = "Se puso la propiedad de venta"}) : BadRequest(new { message = "No se pudo poner a la Venta"}); + } + + [HttpPut("/api/propiedad/unsetPropiedadAVenta")] + public IActionResult unsetPropiedadAVenta([FromHeader(Name="Auth")]string Auth, SetVentaDto dto) { + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false) { + return Unauthorized(); + } + + if (dto.iddivisa != 0 && dto.iddivisa!=1) return BadRequest(new { message = "no hay una divisa por esa id"}); + if (dto.idpropiedad<=0) return BadRequest(new { message = "No hay propiedades con id 0 o menor"}); + if (dto.monto<1) return BadRequest(new { message = "No se pueden hacer ventas por montos menores a 1"}); + + + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return Unauthorized(); + + Propiedade? prop = RepositorioPropiedades.Singleton.ObtenerPropiedadPorId(dto.idpropiedad); + if (prop == null) return BadRequest(new { message = "No hay propiedades por ese id"}); + + if (cli.Dni != prop.Dnipropietario) return Unauthorized(); + + bool ret = RepositorioVentas.Singleton.UnSetVenta(prop.Id, dto.monto, dto.iddivisa, cli.Dni); + + return ret? + Ok(new { message = "Se Bajo la propiedad de venta"}) : BadRequest(new { message = "No se pudo Bajar de venta"}); + } + [HttpPost("/api/ventas/ejercerOpcionVenta")] public IActionResult EjercerOpcionVenta([FromHeader(Name="Auth")]string Auth, [FromQuery]long idcontrato=0) { var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino"); diff --git a/Entidades/Dto/PropiedadesVentaDto.cs b/Entidades/Dto/PropiedadesVentaDto.cs new file mode 100644 index 0000000..84cfc2b --- /dev/null +++ b/Entidades/Dto/PropiedadesVentaDto.cs @@ -0,0 +1,12 @@ +namespace Entidades.Dto; +public class PropiedadesVentaDto { + public int Id { get; set; } + public string Ubicacion { get; set; } = ""; + public int Canthabitaciones { get; set; } + public int Piso { get; set; } + public string Letra { get; set; } = ""; + public string Tipo { get; set; } = ""; + public string? Servicios {get;set;} = ""; + public decimal Monto { get; set; } + public string Divisa { get; set; }=""; +} \ No newline at end of file diff --git a/Entidades/Dto/SetVentaDto.cs b/Entidades/Dto/SetVentaDto.cs new file mode 100644 index 0000000..7debd54 --- /dev/null +++ b/Entidades/Dto/SetVentaDto.cs @@ -0,0 +1,6 @@ +namespace Entidades.Dto; +public class SetVentaDto { + public int idpropiedad {get; set;} + public decimal monto {get; set;} + public int iddivisa {get; set;} +} \ No newline at end of file diff --git a/Front/src/App.svelte b/Front/src/App.svelte index 31600b2..ccb6c09 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -27,6 +27,7 @@ import VerLogs from "./paginas/VerLogs.svelte"; import ControlPagos from "./paginas/ControlPagos.svelte"; import ContratoAdmin from "./paginas/ContratoAdmin.svelte"; + import BuscarVentas from "./paginas/BuscarVentas.svelte"; @@ -115,6 +116,10 @@ + + + + @@ -149,7 +154,7 @@ - + diff --git a/Front/src/Componentes/ModalPublicarPropiedadParaVenta.svelte b/Front/src/Componentes/ModalPublicarPropiedadParaVenta.svelte new file mode 100644 index 0000000..64a749b --- /dev/null +++ b/Front/src/Componentes/ModalPublicarPropiedadParaVenta.svelte @@ -0,0 +1,44 @@ + + + diff --git a/Front/src/Componentes/RowPropiedad.svelte b/Front/src/Componentes/RowPropiedad.svelte index d94093d..0897188 100644 --- a/Front/src/Componentes/RowPropiedad.svelte +++ b/Front/src/Componentes/RowPropiedad.svelte @@ -6,12 +6,14 @@ let { id, ubicacion, tipo, letra, piso,canthabitaciones, servicios, btnbaja = "Baja", monto, iddivisa = 0 } = $props(); import { urlG } from "../stores/urlStore"; + import ModalPublicarPropiedadParaVenta from "./ModalPublicarPropiedadParaVenta.svelte"; let modal: boolean = $state(false); let modalpayload: string = $state(""); let modificar: boolean = $state(false); - + let showPublicarVenta: boolean = $state(false); + function setmod(){ modificar = !modificar; } @@ -35,6 +37,13 @@ console.error(e); } } + + function setventa() { + showPublicarVenta = true; + } + async function sendMod() { + + } @@ -53,9 +62,10 @@ {/if} {monto} - - - + + + + {#if modal} @@ -68,3 +78,7 @@ {/if} + +{#if showPublicarVenta} + !!(showPublicarVenta = false)} onConfirm={sendMod}/> +{/if} \ No newline at end of file diff --git a/Front/src/paginas/BuscarVentas.svelte b/Front/src/paginas/BuscarVentas.svelte new file mode 100644 index 0000000..14cb3b0 --- /dev/null +++ b/Front/src/paginas/BuscarVentas.svelte @@ -0,0 +1,14 @@ + + + + +
+ + +
\ No newline at end of file diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index 89acc40..844d360 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -187,4 +187,10 @@ export type UpdateCliente = { apellido:string, domicilio:string, celular:string, +} + +export type setVenta = { + idpropiedad:number, + monto:number, + iddivisa:number, } \ No newline at end of file diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs index 3439afe..f0afd83 100644 --- a/Modelo/RepositorioPropiedades.cs +++ b/Modelo/RepositorioPropiedades.cs @@ -611,4 +611,13 @@ public class RepositorioPropiedades: RepositorioBase { return (int)Math.Ceiling((double)totalRegistros / registrosPorPagina); } + + public IQueryable? ObtenerPropiedadesEnVenta(int pag){ + var con = Context; + + var props = con.Propiedades.Include(x=>x.IdServicios).Include(x=>x.IddivisaNavigation) + .Include(c=>c.IdtipropiedadNavigation) + .Where(x=>x.Idestado ==4).Skip(pag*10).Take(10); + return props; + } } \ No newline at end of file diff --git a/Modelo/RepositorioVentas.cs b/Modelo/RepositorioVentas.cs index 647cce6..cc203fb 100644 --- a/Modelo/RepositorioVentas.cs +++ b/Modelo/RepositorioVentas.cs @@ -72,4 +72,33 @@ public class RepositorioVentas: RepositorioBase { GenerarLog(con, dni, $"Se seteo el recibo con nombre: {nuevoNombreArchivo}"); return Guardar(con); } + + public bool SetVenta(int idpropiedad, decimal monto, int iddivisa, long dni) { + var con = Context; + Propiedade? cont = con.Propiedades.Include(x=>x.Contratos).FirstOrDefault(x=>x.Id == idpropiedad); + if (cont==null) return false; + if (cont.Idestado == 2 || cont.Idestado == 4) return false; + if (cont.Contratos.Any(x=>x.Habilitado == 1 && x.Cancelado == 0)) return false; + + cont.Monto = monto; + cont.Iddivisa = iddivisa; + cont.Idestado = 4; + GenerarLog(con, dni, "Se puso la propiedad de venta"); + return Guardar(con); + } + + public bool UnSetVenta(int id, decimal monto, int iddivisa, long dni) { + var con = Context; + Propiedade? cont = con.Propiedades.Include(x=>x.Venta).Include(x=>x.Contratos).FirstOrDefault(x=>x.Id == id); + if (cont==null) return false; + if (cont.Idestado != 4) return false; + if (cont.Contratos.Any(x=>x.Habilitado == 1 && x.Cancelado == 0)) return false; + if (cont.Venta.Any(x=>x.Idestado != 3)) return false; + + cont.Monto = monto; + cont.Iddivisa = iddivisa; + cont.Idestado = 4; + GenerarLog(con, dni, "Se Bajo la propiedad de venta"); + return Guardar(con); + } } \ No newline at end of file