From a6b4e8394d3071e64dfa688ff3f5a8f64efdad6d Mon Sep 17 00:00:00 2001 From: fede Date: Wed, 15 Jan 2025 00:34:43 -0300 Subject: [PATCH] avansando --- .../Builder/DtoBuilder/ContratoDtoBuilder.cs | 50 ++++++++++ Aspnet/Controllers/ContratoController.cs | 61 +++++++++++- Entidades/Dto/ContratoDto.cs | 11 +++ Front/src/App.svelte | 17 ++++ Front/src/paginas/ContratoInquilino.svelte | 7 ++ Front/src/paginas/ContratosPropietario.svelte | 0 .../paginas/ControlAlquileresInquilino.svelte | 65 +++++++++++-- .../ControlAlquileresPropietario.svelte | 92 +++++++++++++++++++ Front/src/types.d.ts | 10 ++ Modelo/RepositorioContratos.cs | 24 +++++ 10 files changed, 324 insertions(+), 13 deletions(-) create mode 100644 Aspnet/Builder/DtoBuilder/ContratoDtoBuilder.cs create mode 100644 Entidades/Dto/ContratoDto.cs create mode 100644 Front/src/paginas/ContratoInquilino.svelte create mode 100644 Front/src/paginas/ContratosPropietario.svelte create mode 100644 Front/src/paginas/ControlAlquileresPropietario.svelte diff --git a/Aspnet/Builder/DtoBuilder/ContratoDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/ContratoDtoBuilder.cs new file mode 100644 index 0000000..038449b --- /dev/null +++ b/Aspnet/Builder/DtoBuilder/ContratoDtoBuilder.cs @@ -0,0 +1,50 @@ +using Entidades.Dto; + +namespace AlquilaFacil.Builder; +public class ContratoDtoBuilder: Builder { + public ContratoDtoBuilder SetId(long id ){ + data.id = id; + return this; + } + + public ContratoDtoBuilder SetUbicacion(string ub){ + data.Ubicacion = ub; + return this; + } + + public ContratoDtoBuilder SetTipo(string tipo){ + data.TipoPropiedad = tipo; + return this; + } + + public ContratoDtoBuilder SetFechaInicio(DateTime fec) { + data.Fechainicio = fec; + return this; + } + + public ContratoDtoBuilder SetInquilino(string inquilino){ + data.Inquilino = inquilino; + return this; + } + + public ContratoDtoBuilder SetPropietario(string propietario){ + data.Propietario = propietario; + return this; + } + + public ContratoDtoBuilder 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; + } +} \ No newline at end of file diff --git a/Aspnet/Controllers/ContratoController.cs b/Aspnet/Controllers/ContratoController.cs index 7b21e4c..5b64ed4 100644 --- a/Aspnet/Controllers/ContratoController.cs +++ b/Aspnet/Controllers/ContratoController.cs @@ -16,11 +16,66 @@ namespace AlquilaFacil.Controllers; [ApiController] public class ContratoController: ControllerBase { - [HttpGet("api/contratos")] //WIP - public IActionResult ObtenerContratosPorUsuario([FromHeader(Name="Auth")]string Auth) { - return Ok(); + [HttpGet("api/contratos/propietario")] + public IActionResult ObtenerContratosPorPropietario([FromHeader(Name="Auth")]string Auth) { + 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(); + + var list = RepositorioContratos.Singleton.ObtenerContratosDePropietario(cli.Dni); + + List dtos = new(); + foreach (var i in list) { + if (i.DniinquilinoNavigation == null || i.IdpropiedadNavigation == null + || i.DnipropietarioNavigation == null) continue; + + var cont = new ContratoDtoBuilder() + .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) + .Build(); + dtos.Add(cont); + } + return Ok(dtos); } + [HttpGet("api/contratos/inquilino")] + public IActionResult ObtenerContratosPorInquilino([FromHeader(Name="Auth")]string Auth) { + 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(); + + var list = RepositorioContratos.Singleton.ObtenerContratosDeInquilino(cli.Dni); + + List dtos = new(); + foreach (var i in list) { + if (i.DniinquilinoNavigation == null || i.IdpropiedadNavigation == null + || i.DnipropietarioNavigation == null) continue; + + var cont = new ContratoDtoBuilder() + .SetInquilino($"{i.DniinquilinoNavigation.Nombre} {i.DniinquilinoNavigation.Apellido}") + .SetUbicacion(i.IdpropiedadNavigation.Ubicacion) + .SetPropietario($"{i.DnipropietarioNavigation.Nombre} {i.DnipropietarioNavigation.Apellido}") + .SetId(i.Id) + .SetTipo(i.IdpropiedadNavigation.IdtipropiedadNavigation.Descripcion) + .SetFechaInicio(i.Fechainicio) + .SetEstado(i.Habilitado, i.Cancelado) + .Build(); + dtos.Add(cont); + } + return Ok(dtos); + } + [HttpPost("api/contratos/precontrato")] public IActionResult IniciarPrecontrato([FromHeader(Name = "Auth")]string Auth, [FromBody] PrecontratoDto dto) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); diff --git a/Entidades/Dto/ContratoDto.cs b/Entidades/Dto/ContratoDto.cs new file mode 100644 index 0000000..5cd9cac --- /dev/null +++ b/Entidades/Dto/ContratoDto.cs @@ -0,0 +1,11 @@ +namespace Entidades.Dto; +public class ContratoDto { + public long id { get; set; } + public string Ubicacion { get; set; }=""; + public string TipoPropiedad { get; set; }=""; + public DateTime Fechainicio { get; set; } + public string Inquilino { get; set; }=""; + public string Propietario { 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 749f697..2129670 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -18,6 +18,9 @@ import AdminPropiedades from "./paginas/AdminPropiedades.svelte"; import Notificaciones from "./paginas/Notificaciones.svelte"; import ControlAlquileresInquilino from "./paginas/ControlAlquileresInquilino.svelte"; + import ControlAlquileresPropietario from "./paginas/ControlAlquileresPropietario.svelte"; + import ContratosPropietario from "./paginas/ContratosPropietario.svelte"; + import ContratoInquilino from "./paginas/ContratoInquilino.svelte"; @@ -80,6 +83,11 @@ + + + + + @@ -100,6 +108,15 @@ + + + + + + + + + diff --git a/Front/src/paginas/ContratoInquilino.svelte b/Front/src/paginas/ContratoInquilino.svelte new file mode 100644 index 0000000..e260581 --- /dev/null +++ b/Front/src/paginas/ContratoInquilino.svelte @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/Front/src/paginas/ContratosPropietario.svelte b/Front/src/paginas/ContratosPropietario.svelte new file mode 100644 index 0000000..e69de29 diff --git a/Front/src/paginas/ControlAlquileresInquilino.svelte b/Front/src/paginas/ControlAlquileresInquilino.svelte index e933168..4bfeed2 100644 --- a/Front/src/paginas/ControlAlquileresInquilino.svelte +++ b/Front/src/paginas/ControlAlquileresInquilino.svelte @@ -3,21 +3,46 @@ import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte"; import NavBarAutocompletable from "../Componentes/NavBarAutocompletable.svelte"; import ModalEstatico from "../Componentes/ModalEstatico.svelte"; + import {urlG} from "../stores/urlStore"; + import type { ContratoDto } from "../types"; + import BotonVolverArriba from "../Componentes/BotonVolverArriba.svelte"; + import { fade } from "svelte/transition"; + import { navigate } from "svelte-routing"; - let token: string = sessionStorage.getItem("token") || ""; + let token: string = sessionStorage.getItem("token")|| ""; - let alquileres = $state([]); + let alquileres: ContratoDto[] = $state([]); let modaldata:string = $state(""); + let showButton:boolean = $state(false); onMount(()=>{ - + recuperarContratos(); + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); }); + const handleScroll = () => { + showButton = window.scrollY > 100; + }; async function recuperarContratos() { try{ + const responce = await fetch($urlG+"/api/contratos/inquilino", { + method: "GET", + headers: { + "Auth": String(token), + }, + }); + if (responce.ok){ + let data = await responce.json(); + alquileres = data; + return; + } + + let data = await responce.json(); + modaldata = data.message; }catch{ - + modaldata = "fallo al intentar hacer la request"; } } @@ -33,15 +58,35 @@
- {#each alquileres as i} - -
-
+ {#each alquileres as alquiler} +
+
+
+
{alquiler.tipoPropiedad}
+
-

a

+
{alquiler.ubicacion}
+

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

+
+ +
+
+
{/each}
-
\ No newline at end of file +
+{#if showButton } +
+ +
+{/if} \ No newline at end of file diff --git a/Front/src/paginas/ControlAlquileresPropietario.svelte b/Front/src/paginas/ControlAlquileresPropietario.svelte new file mode 100644 index 0000000..6442536 --- /dev/null +++ b/Front/src/paginas/ControlAlquileresPropietario.svelte @@ -0,0 +1,92 @@ + + + + +{#if modaldata } + !!(modaldata="")}/> +{/if} + +
+ + +
+ {#each alquileres as alquiler} +
+
+
+
{alquiler.tipoPropiedad}
+
+
+
{alquiler.ubicacion}
+

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

+
+ +
+
+ +
+
+ {/each} +
+
+{#if showButton } +
+ +
+{/if} \ No newline at end of file diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index 6cffefd..6a03d5d 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -76,3 +76,13 @@ export type GaranteDto = { Celular: string; Domiciliolaboral: string; }; + +export type ContratoDto ={ + id: number, + ubicacion:string, + tipoPropiedad:string, + fechainicio:Date, + inquilino:string, + propietario:string, + estado:string, +} \ No newline at end of file diff --git a/Modelo/RepositorioContratos.cs b/Modelo/RepositorioContratos.cs index 2e27b41..a8392a3 100644 --- a/Modelo/RepositorioContratos.cs +++ b/Modelo/RepositorioContratos.cs @@ -1,4 +1,5 @@ using Entidades; +using Entidades.Dto; using Microsoft.EntityFrameworkCore; namespace Modelo; @@ -120,6 +121,7 @@ public class RepositorioContratos: RepositorioBase { if (cont == null || cont.IdpropiedadNavigation==null) return false; cont.Habilitado = 1; + cont.Fechainicio = DateTime.Now; var fecha = cont.Fechainicio; for (int i = 0; i < cont.MesesHastaAumento; i++) { @@ -145,4 +147,26 @@ public class RepositorioContratos: RepositorioBase { cont.IdpropiedadNavigation.Idestado = 1; return Guardar(con); } + + public IQueryable ObtenerContratosDePropietario(long dni) { + var con = Context; + var l = con.Contratos + .Include(x=>x.DniinquilinoNavigation) + .Include(x=>x.DnipropietarioNavigation) + .Include(x=>x.IdpropiedadNavigation) + .ThenInclude(x=>x.IdtipropiedadNavigation) + .Where(x=>x.Dnipropietario == dni); + return l; + } + + public IQueryable ObtenerContratosDeInquilino(long dni) { + var con = Context; + var l = con.Contratos + .Include(x=>x.DniinquilinoNavigation) + .Include(x=>x.DnipropietarioNavigation) + .Include(x=>x.IdpropiedadNavigation) + .ThenInclude(x=>x.IdtipropiedadNavigation) + .Where(x=>x.Dniinquilino == dni); + return l; + } }