From 2b757e527fd74ae723542fca562a13bd7e4dbfc6 Mon Sep 17 00:00:00 2001 From: fede Date: Fri, 17 Jan 2025 00:25:37 -0300 Subject: [PATCH] lo que hice hoy --- Aspnet/Builder/DtoBuilder/CanonDtoBuilder.cs | 35 +++ .../DtoBuilder/ContratoPropiedadDtoBuilder.cs | 75 ++++++ Aspnet/Controllers/ContratoController.cs | 102 +++++++ Entidades/Dto/CanonDto.cs | 10 + Entidades/Dto/ContratoPropiedadDto.cs | 8 + Entidades/Dto/PrecontratoDto.cs | 2 +- Front/src/paginas/ContratosPropietario.svelte | 253 ++++++++++++------ .../paginas/ControlAlquileresInquilino.svelte | 2 +- .../ControlAlquileresPropietario.svelte | 2 +- Front/src/types.d.ts | 33 +++ Modelo/RepositorioCanons.cs | 14 + Modelo/RepositorioContratos.cs | 4 + 12 files changed, 452 insertions(+), 88 deletions(-) create mode 100644 Aspnet/Builder/DtoBuilder/CanonDtoBuilder.cs create mode 100644 Aspnet/Builder/DtoBuilder/ContratoPropiedadDtoBuilder.cs create mode 100644 Entidades/Dto/CanonDto.cs create mode 100644 Entidades/Dto/ContratoPropiedadDto.cs create mode 100644 Modelo/RepositorioCanons.cs diff --git a/Aspnet/Builder/DtoBuilder/CanonDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/CanonDtoBuilder.cs new file mode 100644 index 0000000..1c0538a --- /dev/null +++ b/Aspnet/Builder/DtoBuilder/CanonDtoBuilder.cs @@ -0,0 +1,35 @@ +using Entidades.Dto; + +namespace AlquilaFacil.Builder; + +public class CanonDtoBuilder : Builder{ + public CanonDtoBuilder SetId(long id) { + data.Id = id; + return this; + } + + public CanonDtoBuilder SetMesNum(int mesNum) { + data.MesNum = mesNum; + return this; + } + + public CanonDtoBuilder SetMes(DateTime d){ + data.Mes = d; + return this; + } + + public CanonDtoBuilder SetMonto(Decimal monto) { + data.Monto = monto; + return this; + } + + public CanonDtoBuilder SetDivisa(string divisa) { + data.Divisa = divisa; + return this; + } + + public CanonDtoBuilder SetPago(bool p) { + data.Pago = p; + return this; + } +} \ No newline at end of file diff --git a/Aspnet/Builder/DtoBuilder/ContratoPropiedadDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/ContratoPropiedadDtoBuilder.cs new file mode 100644 index 0000000..e05d666 --- /dev/null +++ b/Aspnet/Builder/DtoBuilder/ContratoPropiedadDtoBuilder.cs @@ -0,0 +1,75 @@ +using Entidades.Dto; + +namespace AlquilaFacil.Builder; +public class ContratoPropiedadDtoBuilder : Builder{ + public ContratoPropiedadDtoBuilder SetId(long id ){ + data.id = id; + return this; + } + + public ContratoPropiedadDtoBuilder SetUbicacion(string ub){ + data.Ubicacion = ub; + return this; + } + + public ContratoPropiedadDtoBuilder SetTipo(string tipo){ + data.TipoPropiedad = tipo; + return this; + } + + public ContratoPropiedadDtoBuilder SetFechaInicio(DateTime fec) { + data.Fechainicio = fec; + return this; + } + + public ContratoPropiedadDtoBuilder SetInquilino(string inquilino){ + data.Inquilino = inquilino; + return this; + } + + public ContratoPropiedadDtoBuilder SetPropietario(string propietario){ + data.Propietario = propietario; + return this; + } + + public ContratoPropiedadDtoBuilder SetEstado(ulong habilitado, ulong cancelado) { + bool Habilitado = habilitado == 0?false:true; + bool Cancelado = cancelado == 0?false:true; + + if (Habilitado == true && Cancelado == false){ + data.Estado = "Alquiler Iniciado"; + } else if (Cancelado == true && Habilitado == true) { + data.Estado = "Nunca Empezo Esta Cancelado"; + } + + if (Habilitado == false && Cancelado ==false){ + data.Estado = "Esta en Proceso"; + } + return this; + } + + public ContratoPropiedadDtoBuilder SetHabitaciones(int habitaciones){ + data.Habitaciones = habitaciones; + return this; + } + + public ContratoPropiedadDtoBuilder SetPiso(int piso){ + data.Piso = piso; + return this; + } + + public ContratoPropiedadDtoBuilder SetLetra(string letra){ + data.Letra = letra; + return this; + } + + public ContratoPropiedadDtoBuilder SetMesesAumento(int mesesAumento){ + data.MesesAumento = mesesAumento; + return this; + } + + public ContratoPropiedadDtoBuilder SetMesesDuracion(int mesesDurationContrato) { + data.MesesDuracion = mesesDurationContrato; + return this; + } +} diff --git a/Aspnet/Controllers/ContratoController.cs b/Aspnet/Controllers/ContratoController.cs index 9bb7f32..bc42c4b 100644 --- a/Aspnet/Controllers/ContratoController.cs +++ b/Aspnet/Controllers/ContratoController.cs @@ -16,6 +16,42 @@ namespace AlquilaFacil.Controllers; [ApiController] public class ContratoController: ControllerBase { + [HttpGet("api/contratos/canon")] + public ActionResult getCanons([FromHeader(Name="Auth")]string Auth, int id = 0) { + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false){ + validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino"); + if (validacion1 == false) { + return Unauthorized(); + } + } + + var list = RepositorioCanons.Singleton.ObtenerCanonsPorContrato(id); + if (list == null) return BadRequest(new { message = "No hay contrato por esa id"}); + + var cont = RepositorioContratos.Singleton.ObtenerContratoPorId(id); + if (cont == null) return BadRequest(new { message = ""}); + string divisa =""; + if (cont.Iddivisa == 0) divisa = "AR$"; else if (cont.Iddivisa == 1) divisa = "US$"; + + List d = new(); + + foreach (var i in list) { + var c = new CanonDtoBuilder() + .SetId(i.Id) + .SetPago(i.Idrecibo==null?false:true) + .SetDivisa(divisa==""?"Ugh esta mal cargado la divisa en el contrato":divisa) + .SetMes(i.Fecha) + .SetMesNum(int.Parse((i.Fecha.Month - cont.Fechainicio.Month).ToString()) + 1) + .SetMonto(i.Monto) + .Build(); + d.Add(c); + } + + return Ok(d); + } + [HttpGet("api/contratos/propietario")] public IActionResult ObtenerContratosPorPropietario([FromHeader(Name="Auth")]string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); @@ -46,6 +82,39 @@ public class ContratoController: ControllerBase { return Ok(dtos); } + [HttpGet("api/contrato/propietario")] + public IActionResult ObtenerContratoPorPropietarioPorId([FromHeader(Name="Auth")]string Auth, int id=0) { + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false) return Unauthorized(); + + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli==null) return Unauthorized(); + + if (id <= 0) return BadRequest(new { message = "No hay propiedades con id igual o menor a 0"}); + var i = RepositorioContratos.Singleton.ObtenerContratoPorId(id); + if (i == null || i.DniinquilinoNavigation == null || + i.IdpropiedadNavigation == null || i.DnipropietarioNavigation == null)return BadRequest(new { message = "Fallo la query"}); + if (cli.Dni != i.Dnipropietario) return BadRequest(new { message = "No sos el propietario"}); + + var cont = new ContratoPropiedadDtoBuilder() + .SetInquilino($"{i.DniinquilinoNavigation.Nombre} {i.DniinquilinoNavigation.Apellido}") + .SetUbicacion(i.IdpropiedadNavigation.Ubicacion) + .SetId(i.Id) + .SetPropietario($"{i.DnipropietarioNavigation.Nombre} {i.DnipropietarioNavigation.Apellido}") + .SetTipo(i.IdpropiedadNavigation.IdtipropiedadNavigation.Descripcion) + .SetFechaInicio(i.Fechainicio) + .SetEstado(i.Habilitado, i.Cancelado) + .SetHabitaciones(i.IdpropiedadNavigation.Canthabitaciones) + .SetPiso(i.IdpropiedadNavigation.Piso??0) + .SetLetra(i.IdpropiedadNavigation.Letra??"") + .SetMesesAumento(i.MesesHastaAumento) + .SetMesesDuracion(i.MesesDurationContrato) + .Build(); + + return Ok(cont); + } + [HttpGet("api/contratos/inquilino")] public IActionResult ObtenerContratosPorInquilino([FromHeader(Name="Auth")]string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); @@ -75,6 +144,39 @@ public class ContratoController: ControllerBase { } return Ok(dtos); } + + [HttpGet("api/contrato/inquilino")] + public IActionResult ObtenerContratoPorInquilinoPorId([FromHeader(Name="Auth")]string Auth, int id=0) { + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino"); + if (validacion1 == false) return Unauthorized(); + + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli==null) return Unauthorized(); + + if (id <= 0) return BadRequest(new { message = "No hay propiedades con id igual o menor a 0"}); + var i = RepositorioContratos.Singleton.ObtenerContratoPorId(id); + if (i == null || i.DniinquilinoNavigation == null || + i.IdpropiedadNavigation == null || i.DnipropietarioNavigation == null)return BadRequest(new { message = "Fallo la query"}); + if (cli.Dni != i.Dniinquilino) return BadRequest(new { message = "No sos el inquilino"}); + + var cont = new ContratoPropiedadDtoBuilder() + .SetInquilino($"{i.DniinquilinoNavigation.Nombre} {i.DniinquilinoNavigation.Apellido}") + .SetUbicacion(i.IdpropiedadNavigation.Ubicacion) + .SetId(i.Id) + .SetPropietario($"{i.DnipropietarioNavigation.Nombre} {i.DnipropietarioNavigation.Apellido}") + .SetTipo(i.IdpropiedadNavigation.IdtipropiedadNavigation.Descripcion) + .SetFechaInicio(i.Fechainicio) + .SetEstado(i.Habilitado, i.Cancelado) + .SetHabitaciones(i.IdpropiedadNavigation.Canthabitaciones) + .SetPiso(i.IdpropiedadNavigation.Piso??0) + .SetLetra(i.IdpropiedadNavigation.Letra??"") + .SetMesesAumento(i.MesesHastaAumento) + .SetMesesDuracion(i.MesesDurationContrato) + .Build(); + + return Ok(cont); + } [HttpPost("api/contratos/precontrato")] public IActionResult IniciarPrecontrato([FromHeader(Name = "Auth")]string Auth, [FromBody] PrecontratoDto dto) { diff --git a/Entidades/Dto/CanonDto.cs b/Entidades/Dto/CanonDto.cs new file mode 100644 index 0000000..21f7f59 --- /dev/null +++ b/Entidades/Dto/CanonDto.cs @@ -0,0 +1,10 @@ +namespace Entidades.Dto; +public class CanonDto{ + public long Id { get; set;} + public int MesNum { get; set;} + public DateTime Mes { get; set;} + public Decimal Monto { get; set;} + public string Divisa { get; set;} = ""; + public bool Pago { get; set;} + +} \ No newline at end of file diff --git a/Entidades/Dto/ContratoPropiedadDto.cs b/Entidades/Dto/ContratoPropiedadDto.cs new file mode 100644 index 0000000..e19e368 --- /dev/null +++ b/Entidades/Dto/ContratoPropiedadDto.cs @@ -0,0 +1,8 @@ +namespace Entidades.Dto; +public class ContratoPropiedadDto : ContratoDto { + public int Habitaciones { get; set; } + public int Piso { get; set;} + public string Letra { get; set; } = ""; + public int MesesAumento { get; set; } + public int MesesDuracion { get; set; } +} \ No newline at end of file diff --git a/Entidades/Dto/PrecontratoDto.cs b/Entidades/Dto/PrecontratoDto.cs index f08f6b2..650e075 100644 --- a/Entidades/Dto/PrecontratoDto.cs +++ b/Entidades/Dto/PrecontratoDto.cs @@ -6,6 +6,6 @@ public class PrecontratoDto { public int CantidadGarantes { get; set; } public int MesesHastaAumento { get; set; } public bool TieneOpcionVenta { get; set; } - public string fechaprimernotificacion { get; set; } + public string fechaprimernotificacion { get; set; } = ""; public int MesesDuracionContrato { get; set; } } \ No newline at end of file diff --git a/Front/src/paginas/ContratosPropietario.svelte b/Front/src/paginas/ContratosPropietario.svelte index 8072a10..e0ef15f 100644 --- a/Front/src/paginas/ContratosPropietario.svelte +++ b/Front/src/paginas/ContratosPropietario.svelte @@ -3,14 +3,30 @@ import NavBarAutocompletable from "../Componentes/NavBarAutocompletable.svelte"; import ModalEstatico from "../Componentes/ModalEstatico.svelte"; import {urlG} from "../stores/urlStore"; - import type { GaranteDto } from "../types"; + import type { CanonDto, ContratoDto, ContratoPropiedadDto, GaranteDto2 } from "../types"; let token:string = sessionStorage.getItem("token")||""; - let canons = $state([]); - let garantes: GaranteDto[] = $state([]); - let prop = $state(); + let interes:number = $state(0); + + let canons:CanonDto[] = $state([]); + let garantes: GaranteDto2[] = $state([]); + let prop:ContratoPropiedadDto = $state({ + estado:"", + fechainicio:"", + id:0, + inquilino:"", + propietario:"", + tipoPropiedad:"", + ubicacion:"", + habitaciones:0, + piso:0, + letra:"", + mesesAumento:0, + mesesDuracion:0, + }); + let modaldata:string = $state(""); let contratoid:string = $state(""); @@ -21,7 +37,7 @@ async function obtenerDatosACargar() { try { - const respPropiedad = fetch($urlG+"", { + const respPropiedad = fetch($urlG+"/api/contrato/propietario?id="+contratoid, { method: "GET", headers: { "Auth": String(token), @@ -33,7 +49,7 @@ "Auth": String(token), } }); - const respCanons = fetch($urlG+"", { + const respCanons = fetch($urlG+"/api/contratos/canon?id="+contratoid, { method: "GET", headers: { "Auth": String(token), @@ -44,9 +60,11 @@ const datosPropiedad = await p.json(); const datosGarantes = await g.json(); const datosCanons = await c.json(); - + prop = datosPropiedad; + garantes = datosGarantes; + canons = datosCanons; } catch { - + modaldata = "Fallo hacer las request"; } } @@ -55,6 +73,11 @@ const par = new URLSearchParams(qs); contratoid = par.get("id")||""; } + + + function submitnuevosCanones() { + + } @@ -62,98 +85,158 @@ {#if modaldata} !!(modaldata = "")}/> {/if} - -
-
-
-
-
Propiedad
-
-

Tipo: ---

-

Ubicación: ---

-

Propietario: ---

-

Habitaciones: ---

-

Piso: ---

-

Letra: ---

-

Estado: ---

-

Fecha Inicio: ---

-
-
+
+ +
+
+
Propiedad
+
+

Tipo: {prop.tipoPropiedad}

+

Ubicación: {prop.ubicacion}

+

Propietario: {prop.propietario}

+

Inquilino: {prop.inquilino}

+

Habitaciones: {prop.habitaciones}

+

Piso: {prop.piso}

+

Letra: {prop.letra}

+

Fecha Inicio: {String(prop.fechainicio).split("T")[0]}

+

Estado: {prop.estado}

+ +
+
- -
-
-
-

- -

-
+
+ +
+
+

+ +

+
+
+ + + + + + + + + + + + + {#each garantes as g} + + + + + + + + + {/each} + +
DniNombreApellidoDomicilioDom. LaboralCelular
{g.dni}{g.nombre}{g.apellido}{g.domicilio}{g.domiciliolaboral}{g.celular}
+
+
+
+
+

+ +

+
+
+
+ {#each canons as canon} +
+
+
+ {canon.mesNum}/{prop.mesesDuracion} +
+
+

Mes: {String(canon.mes).split("T")[0]}

+

Monto: {canon.monto}

+

Divisa: {canon.divisa}

+

Pago: {canon.pago ? "Sí" : "No"}

+
+ +
+
+ {/each}
+
+ Definir el interés para los siguientes Canones +
-

[Información sobre garantes]

+
+
+ + % +
+
+ +
- -
-

- -

-
-
-
-
-
- {#each canons as canon} -
-
-

Mes: {canon.mes}

-

Monto: {canon.monto}

-

Divisa: {canon.divisa}

-

Pago: {canon.pago ? "Sí" : "No"}

-
-
- {/each} -
-
-
-
-
-
+ + + +
- diff --git a/Front/src/paginas/ControlAlquileresInquilino.svelte b/Front/src/paginas/ControlAlquileresInquilino.svelte index 2de1a2f..f6b6fe3 100644 --- a/Front/src/paginas/ControlAlquileresInquilino.svelte +++ b/Front/src/paginas/ControlAlquileresInquilino.svelte @@ -69,7 +69,7 @@

Fecha de inicio: {new Date(alquiler.fechainicio).toLocaleDateString()}
Inquilino: {alquiler.inquilino}
- Propietario: alquiler.propietario
+ Propietario: {alquiler.propietario}
Id Propiedad: {alquiler.id}

diff --git a/Front/src/paginas/ControlAlquileresPropietario.svelte b/Front/src/paginas/ControlAlquileresPropietario.svelte index da5927b..61bb251 100644 --- a/Front/src/paginas/ControlAlquileresPropietario.svelte +++ b/Front/src/paginas/ControlAlquileresPropietario.svelte @@ -69,7 +69,7 @@

Fecha de inicio: {new Date(alquiler.fechainicio).toLocaleDateString()}
Inquilino: {alquiler.inquilino}
- Propietario: alquiler.propietario
+ Propietario: {alquiler.propietario}
Id Propiedad: {alquiler.id}

diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index 6a03d5d..726983f 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -76,6 +76,15 @@ export type GaranteDto = { Celular: string; Domiciliolaboral: string; }; +//inedito +export type GaranteDto2 = { + dni: number; + nombre: string; + apellido: string; + domicilio: string; + celular: string; + domiciliolaboral: string; +}; export type ContratoDto ={ id: number, @@ -85,4 +94,28 @@ export type ContratoDto ={ inquilino:string, propietario:string, estado:string, +} + +export type CanonDto = { + id:number, + mesNum:number, + mes:Date, + monto:number, + divisa:string, + pago:boolean +} + +export type ContratoPropiedadDto ={ + id: number, + ubicacion:string, + tipoPropiedad:string, + fechainicio:string, + inquilino:string, + propietario:string, + estado:string, + habitaciones:number, + piso:number, + letra:string, + mesesAumento:number, + mesesDuracion:number } \ No newline at end of file diff --git a/Modelo/RepositorioCanons.cs b/Modelo/RepositorioCanons.cs new file mode 100644 index 0000000..e4083f5 --- /dev/null +++ b/Modelo/RepositorioCanons.cs @@ -0,0 +1,14 @@ +using Entidades; +using Microsoft.EntityFrameworkCore; + +namespace Modelo; + +public class RepositorioCanons: RepositorioBase { + public ICollection? ObtenerCanonsPorContrato(int id) { + var con = Context; + var l = con.Contratos.Include(x=>x.Idcanons).FirstOrDefault(x => x.Id == id); + if (l == null) return null; + return l.Idcanons; + } + +} \ No newline at end of file diff --git a/Modelo/RepositorioContratos.cs b/Modelo/RepositorioContratos.cs index b84a54e..e06f355 100644 --- a/Modelo/RepositorioContratos.cs +++ b/Modelo/RepositorioContratos.cs @@ -189,6 +189,10 @@ public class RepositorioContratos: RepositorioBase { var con = Context; var l = con.Contratos .Include(x=>x.Idgarantes) + .Include(x=>x.DniinquilinoNavigation) + .Include(x=>x.DnipropietarioNavigation) + .Include(x=>x.IdpropiedadNavigation) + .ThenInclude(x=>x.IdtipropiedadNavigation) .FirstOrDefault(x=>x.Id == idcontrato); return l; }