From 7349454d8fbe9f1cdf2f84389854c168e9f4a8d5 Mon Sep 17 00:00:00 2001 From: fede Date: Fri, 10 Jan 2025 19:43:40 -0300 Subject: [PATCH] un corte que hago a las 19hs --- .../NotificacionDtoBuilder.cs | 0 Aspnet/Controllers/ContratoController.cs | 72 ++++++++++++++++++ .../Componentes/ModalCheckYContrato.svelte | 74 +++++++++++++++---- Front/src/paginas/Notificaciones.svelte | 69 +++++++++-------- Modelo/RepositorioContratos.cs | 21 ++++++ 5 files changed, 190 insertions(+), 46 deletions(-) rename Aspnet/Builder/{ => DtoBuilder}/NotificacionDtoBuilder.cs (100%) diff --git a/Aspnet/Builder/NotificacionDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/NotificacionDtoBuilder.cs similarity index 100% rename from Aspnet/Builder/NotificacionDtoBuilder.cs rename to Aspnet/Builder/DtoBuilder/NotificacionDtoBuilder.cs diff --git a/Aspnet/Controllers/ContratoController.cs b/Aspnet/Controllers/ContratoController.cs index 9d0adec..78c4a42 100644 --- a/Aspnet/Controllers/ContratoController.cs +++ b/Aspnet/Controllers/ContratoController.cs @@ -4,6 +4,7 @@ using Entidades.Dto; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Modelo; +using ZstdSharp.Unsafe; namespace AlquilaFacil.Controllers; [ApiController] @@ -141,7 +142,76 @@ public class ContratoController: ControllerBase { if (pro == null) return BadRequest(new {message = "No Existe Usuario con ese email"}); if (pro.Token != Auth) return BadRequest(new {message = "El token de auth no corresponde al token el usuario propietario"}); + Propiedade? prop = RepositorioPropiedades.Singleton.ObtenerPropiedadPorId(dto.idpropiedad); + if (prop == null) return BadRequest(new {message = "No existe la propiedad por esa id"}); + if (prop.Dnipropietario != pro.Dni) return BadRequest(new {message = "Este propietario no es el dueƱo de la propiedad"}); + + var inq = RepositorioInquilinos.Singleton.ObtenerInquilinoPorEmail(dto.EmailInquilino); + if (inq == null) return BadRequest(new {message = "No hay un inquilino por ese email"}); + var ret = RepositorioContratos.Singleton.CancelarPrecontrato(dto.EmailInquilino, dto.idpropiedad); + if (ret) { + prop.Idestado = 1; + ret = RepositorioPropiedades.Singleton.PatchPropiedad(prop); + if (ret){ + RepositorioNotificaciones.Singleton.MarcarComoLeido(pro.Dni, dto.fecha); + var noti = new NotificacioneBuilder() + .SetAccion("ContratoCancelado") + .SetIdpropiedad(dto.idpropiedad) + .SetDniremitente(pro.Dni) + .SetDnicliente(inq.Dni) + .SetMensaje($"Se cancelo el intento de alquilar la propiedad: {dto.idpropiedad}") + .SetIdpropiedad(dto.idpropiedad) + .SetLeido(false) + .Build(); + ret = RepositorioNotificaciones.Singleton.AltaNotificacion(noti); + if (ret){ + return Ok(new {message = "Se cancelo el precontrato"}); + }else{ + return Ok(new {message = "Se cancelo el precontrato, pero no se pudo notificar al inquilino"}); + } + }else{ + return BadRequest(new {message = "No se pudo setear la propiedad como Disponible en busqueda"}); + } + }else{ + return BadRequest(new {message = "Se fallo al intentar cancelar el precontrato"}); + } + } + + [HttpGet("api/contratos/precontrato/listaGarantes")] + public IActionResult ObtenerListaGarantes([FromHeader(Name = "Auth")]string Auth, long idcontrato = 0, [FromQuery] string EmailPropietario = "" ) { + if (String.IsNullOrWhiteSpace(Auth)) return BadRequest(""); + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false) return Unauthorized(); + + if (idcontrato == 0 || EmailPropietario == "") return BadRequest(new { message = "Estan mal cargados los datos"}); + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return BadRequest(new {message = "No hay un propietario por ese token"}); + if (cli.Email != EmailPropietario) return BadRequest(new {message = "El Email del usuario no coinside con el del token"}); + + Contrato? contr = RepositorioContratos.Singleton.ObtenerPreContratoPorId(idcontrato); + if (contr == null) return BadRequest(new {message = "No hay un precontrato por esa id"}); + + return Ok(contr.Idgarantes); + } + + [HttpPost("api/contratos/subirContrato")] + public IActionResult subirContrato([FromHeader(Name = "Auth")]string Auth, [FromForm] IFormFile contrato) { + if (String.IsNullOrWhiteSpace(Auth)) return BadRequest(""); + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false) return Unauthorized(); + + return Ok(); + + } + + [HttpPost("api/contratos/aceptarContrato")] + public IActionResult AceptarContrato([FromHeader(Name = "Auth")]string Auth){ + if (String.IsNullOrWhiteSpace(Auth)) return BadRequest(""); + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino"); + if (validacion1 == false) return Unauthorized(); + + return Ok(); } private string ValidarCancelarDto(CancelarPrecontratoDto dto) { @@ -152,7 +222,9 @@ public class ContratoController: ControllerBase { if (dto.EmailPropietario =="") ret += "No puede tener un EmailPropietario Vacio\n"; if (dto.idpropiedad <= 0 ) ret += "No puede tener id propiedad igual o menor a 0\n"; if (dto.fecha == DateTime.MinValue) ret += "Falta fecha\n"; + return ret; } + private string ValidarDtoGarante(GaranteDto g) { string ret = ""; if (g == null) return "dto nulo"; diff --git a/Front/src/Componentes/ModalCheckYContrato.svelte b/Front/src/Componentes/ModalCheckYContrato.svelte index f91ca8c..ec761c9 100644 --- a/Front/src/Componentes/ModalCheckYContrato.svelte +++ b/Front/src/Componentes/ModalCheckYContrato.svelte @@ -1,21 +1,63 @@ + diff --git a/Front/src/paginas/Notificaciones.svelte b/Front/src/paginas/Notificaciones.svelte index 2375fed..dfee3a9 100644 --- a/Front/src/paginas/Notificaciones.svelte +++ b/Front/src/paginas/Notificaciones.svelte @@ -10,17 +10,21 @@ import ModalPrecontrato from "../Componentes/ModalPrecontrato.svelte"; import { get } from "svelte/store"; import ModalAddGarantes from "../Componentes/ModalAddGarantes.svelte"; + import { Accordion } from "@sveltestrap/sveltestrap"; + import ModalCheckYContrato from "../Componentes/ModalCheckYContrato.svelte"; const token = sessionStorage.getItem("token"); let mensajes: MensajeDto[] = $state([]); let showspinner:boolean =$state(false); let mostrarleidos: boolean = $state(false); let modaldata:string =$state(""); - let Selmens: MensajeDto = $state({accion: "",receptor:"", fecha: Date.UTC, mensaje:"", propiedad:0, remitente:""}); + let Selmens: MensajeDto = $state({accion:""}); let show:boolean = $state(false); let setCantGarantes = $state(0); + let garantes:GaranteDto[] = $state([]); + onMount(async () => { SinLeer(); }) @@ -72,8 +76,6 @@ } } - - async function marcarleido( fecha: Date, email: string, men:MensajeDto ) { show = true; @@ -104,7 +106,7 @@ } } - function abrirModal(mensaje: MensajeDto) { + function abrirModal(mensaje: MensajeDto) { if (mensaje.accion === "Nuevo Alquiler") { Selmens = { ...mensaje }; return; @@ -115,6 +117,12 @@ setCantGarantes = Number(Selmens.mensaje.split(" ").reverse()[1]); return; } + + if (mensaje.accion === "Check y Contrato"){ + Selmens = {...mensaje}; + let idcontrato = Number(Selmens.mensaje.split(" ").reverse()[0]); + return; + } } async function handleEnviarmensaje2(data: {opcionVenta:boolean, cantGarantes:number, mesesHastaAumento:number}) { @@ -197,6 +205,14 @@ } } + function handleCancelPrecontrato(): void { + + } + + async function handleEnviarmensaje4() { + + } + @@ -205,20 +221,14 @@ !!(modaldata = "")} /> {/if} - {#if Selmens.accion == "Nuevo Alquiler" } (Selmens.accion = "")} onSubmit={handleEnviarmensaje2} /> {:else if Selmens.accion == "Carge Garantes"} (Selmens.accion = "")} onSubmit={handleEnviarmensaje3}/> +{:else if Selmens.accion == "Check y Contrato"} + (Selmens.accion = "")} onConfirm={handleEnviarmensaje4}/> {/if} +

@@ -271,24 +281,23 @@ {#if mostrarleidos == false} -
- - - - -
+ - {/if} + {:else if men.accion == "ContratoCancelado"} + + + + {/if} {/each} {/if} diff --git a/Modelo/RepositorioContratos.cs b/Modelo/RepositorioContratos.cs index a0dd438..aa64a32 100644 --- a/Modelo/RepositorioContratos.cs +++ b/Modelo/RepositorioContratos.cs @@ -72,4 +72,25 @@ public class RepositorioContratos: RepositorioBase { return contr; } + + public bool CancelarPrecontrato(string emailInquilino, int idpropiedad) { + var con = Context; + Contrato? contr = con.Contratos.Include(x=>x.DniinquilinoNavigation) + .FirstOrDefault(x=>x.Idpropiedad == idpropiedad && + x.DniinquilinoNavigation.Email == emailInquilino && + x.Habilitado == 0 && + x.Cancelado == 0); + + if (contr == null) return false; + contr.Cancelado = 1; + return Guardar(con); + } + + public Contrato? ObtenerPreContratoPorId(long idcontrato) { + var con = Context; + Contrato? contr = con.Contratos.Include(x=>x.Idgarantes).Where(x=>x.Cancelado == 0 && x.Habilitado == 0) + .FirstOrDefault(x=>x.Id == idcontrato); + if (contr == null) return null; + return contr; + } }