From 6d04fdb48a78890afff72f9bde2a78abdf5f190f Mon Sep 17 00:00:00 2001 From: fede Date: Mon, 20 Jan 2025 21:35:13 -0300 Subject: [PATCH] creo que estoy con esto --- .editorconfig | 4 + .../Controllers/NotificacionesController.cs | 26 ++++++ Entidades/Dto/AvisoInquilinoDto.cs | 5 ++ .../src/Componentes/ModalNotificacion.svelte | 56 +++++++++++++ Front/src/paginas/ContratosPropietario.svelte | 81 +++++++++++++++---- Front/src/paginas/Notificaciones.svelte | 12 ++- Modelo/RepositorioCanons.cs | 5 +- 7 files changed, 168 insertions(+), 21 deletions(-) create mode 100644 .editorconfig create mode 100644 Entidades/Dto/AvisoInquilinoDto.cs create mode 100644 Front/src/Componentes/ModalNotificacion.svelte diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4361744 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# CS8602: Dereference of a possibly null reference. +dotnet_diagnostic.CS8602.severity = suggestion diff --git a/Aspnet/Controllers/NotificacionesController.cs b/Aspnet/Controllers/NotificacionesController.cs index a7a6a99..3fadadd 100644 --- a/Aspnet/Controllers/NotificacionesController.cs +++ b/Aspnet/Controllers/NotificacionesController.cs @@ -95,4 +95,30 @@ public class NotificacionesController: ControllerBase { return ret? Ok(new {message = "Se envio la notificacion"}):BadRequest(new {message = "Fallo al intentar guardar la notificacion"}); } + + [HttpPost("api/notificarInquilino")] + public IActionResult NotificarInq([FromHeader(Name ="Auth")]string Auth, [FromBody] AvisoInquilinoDto data) { + if (String.IsNullOrWhiteSpace(Auth)) return Unauthorized(); + var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); + if (validacion1 == false)return Unauthorized(); + + if (data.Mensaje == "") return BadRequest(new {message = "El campo Mensaje esta vacio"}); + if (data.Idpropiedad <= 0) return BadRequest(new {message = "La id de propiedad no puede ser 0 o menor"}); + + Contrato? cont = RepositorioContratos.Singleton.ObtenerContratoPorId(data.Idpropiedad); + if (cont == null || cont.DniinquilinoNavigation == null || cont.DnipropietarioNavigation == null || cont.IdpropiedadNavigation == null) return BadRequest(new { message = "no hay un contrato por esa id"}); + + var n = new NotificacioneBuilder() + .SetAccion("Notificacion Inquilino") + .SetMensaje(data.Mensaje) + .SetLeido(false) + .SetDnicliente(cont.DniinquilinoNavigation.Dni) + .SetDniremitente(cont.DnipropietarioNavigation.Dni) + .SetIdpropiedad(cont.IdpropiedadNavigation.Id) + .SetFecha(DateTime.Now) + .Build(); + var ret = RepositorioNotificaciones.Singleton.AltaNotificacion(n); + return ret? + Ok(new { message = "se envio el aviso" }):BadRequest(new { message = "Fallo al intentar enviar el aviso" }); + } } \ No newline at end of file diff --git a/Entidades/Dto/AvisoInquilinoDto.cs b/Entidades/Dto/AvisoInquilinoDto.cs new file mode 100644 index 0000000..eb5b886 --- /dev/null +++ b/Entidades/Dto/AvisoInquilinoDto.cs @@ -0,0 +1,5 @@ +namespace Entidades.Dto; +public class AvisoInquilinoDto { + public string Mensaje { get; set; } =""; + public long Idpropiedad { get; set; } +} \ No newline at end of file diff --git a/Front/src/Componentes/ModalNotificacion.svelte b/Front/src/Componentes/ModalNotificacion.svelte new file mode 100644 index 0000000..3c1ca23 --- /dev/null +++ b/Front/src/Componentes/ModalNotificacion.svelte @@ -0,0 +1,56 @@ + + + + diff --git a/Front/src/paginas/ContratosPropietario.svelte b/Front/src/paginas/ContratosPropietario.svelte index 55af2a2..851993b 100644 --- a/Front/src/paginas/ContratosPropietario.svelte +++ b/Front/src/paginas/ContratosPropietario.svelte @@ -6,6 +6,7 @@ import type { CanonDto, ContratoDto, ContratoPropiedadDto, GaranteDto2 } from "../types"; import ModalConfirm from "../Componentes/ModalConfirm.svelte"; import ModalPedirDoc from "../Componentes/ModalPedirDoc.svelte"; + import ModalNotificacion from "../Componentes/ModalNotificacion.svelte"; let token:string = sessionStorage.getItem("token")||""; @@ -13,6 +14,9 @@ let interes:number = $state(0); let selMod:any =$state(); let showmodal:boolean = $state(false); + let shownotif:boolean = $state(false); + + let max:number=$state(0); let canons:CanonDto[] = $state([]); let garantes: GaranteDto2[] = $state([]); @@ -33,10 +37,11 @@ let modaldata:string = $state(""); let contratoid:string = $state(""); - - onMount(()=>{ + + onMount(async ()=>{ getparams(); - obtenerDatosACargar(); + await obtenerDatosACargar(); + max = canons.at(-1).mesNum||0; }); async function obtenerDatosACargar() { @@ -78,12 +83,14 @@ contratoid = par.get("id")||""; } - async function submitnuevosCanones() { + async function submitnuevosCanones(e: Event) { + e.preventDefault(); try { const ret = await fetch($urlG+"/api/contratos/crearcanons",{ method: "POST", headers: { "Auth" : String(token), + "Content-Type": "application/json", }, body: JSON.stringify({idcontrato: contratoid, aumento: interes}) }); @@ -169,7 +176,7 @@ } } - function generarTiket(mod) { + function generarTiket(mod:any) { selMod = mod; showmodal =true; } @@ -198,6 +205,34 @@ modaldata = "Fallo al intentar hacer la request"; } } + + async function EscribirNotificacion(message:string) { + if (message =="") { + modaldata = "no se puede enviar un mensaje vacio"; + return; + } + try { + const r = await fetch($urlG+"/api/notificarInquilino", { + method: "POST", + headers: { + "Auth": String(token), + "Content-Type": "application/json", + }, + body: JSON.stringify({ + mensaje: message, + idpropiedad: prop.id + }) + }); + let data = await r.json(); + modaldata = data.message; + } catch { + modaldata ="No se pudo enviar el mensaje"; + } + } + + function abrirModalNotif() { + shownotif = true; + } @@ -210,6 +245,10 @@ showmodal=false} onSubmit={pedirdocumento} /> {/if} +{#if shownotif} + shownotif = false} onConfirm={EscribirNotificacion}/> +{/if} +
@@ -224,9 +263,14 @@

Letra: {prop.letra}

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

Estado: {prop.estado}

- +
+ + +
{/each} + {#if max < prop.mesesDuracion} + {$inspect(max)}
Definir el interés para los siguientes Canones @@ -335,25 +381,26 @@
%

+ {/if}
diff --git a/Front/src/paginas/Notificaciones.svelte b/Front/src/paginas/Notificaciones.svelte index 0cbe4b4..73ed655 100644 --- a/Front/src/paginas/Notificaciones.svelte +++ b/Front/src/paginas/Notificaciones.svelte @@ -130,6 +130,11 @@ Selmens = {...mensaje}; return; } + + if (mensaje.accion === "Notificacion Inquilino") { + Selmens = {...mensaje}; + return; + } } async function obtenerListaGarantes(idcontrato: number) { @@ -422,6 +427,8 @@ (Selmens.accion = "")} onConfirm={handleEnviarmensaje4}/> {:else if Selmens.accion == "Aceptar Contrato"} (Selmens.accion = "")} onConfirm={handleAceptarContrato} onCancel={handlerechazarcontrato} getContrato={ObtenerContrato} men={Selmens}/> +{:else if Selmens.accion == "Notificacion Inquilino"} + !!(Selmens.accion = "") }/> {/if}
@@ -483,9 +490,10 @@ {/if} {#if (men.accion === "ContratoCancelado" || men.accion === "Rechazo Contrato" || - men.accion === "Aceptado Contrato") && mostrarleidos == false} + men.accion === "Aceptado Contrato" || men.accion === "Notificacion Inquilino" + ) && mostrarleidos == false} diff --git a/Modelo/RepositorioCanons.cs b/Modelo/RepositorioCanons.cs index 0a1699c..8e2cdc8 100644 --- a/Modelo/RepositorioCanons.cs +++ b/Modelo/RepositorioCanons.cs @@ -40,9 +40,10 @@ public class RepositorioCanons: RepositorioBase { return Guardar(con); } - public bool CrearCanons(decimal aumento, long idcontrato) { //WIP + public bool CrearCanons(decimal aumento, long idcontrato) { var con = Context; + aumento/=100; aumento+=1; var cont = con.Contratos.Include(x=>x.Idcanons).FirstOrDefault(x=>x.Id == idcontrato); @@ -52,7 +53,7 @@ public class RepositorioCanons: RepositorioBase { Canon? d = cont.Idcanons.OrderByDescending(x=>x.Fecha).FirstOrDefault(); if (d == null) return false; - + if (exist == cont.MesesDurationContrato) return false; if (exist+cont.MesesHastaAumento >= cont.MesesDurationContrato){ exist = cont.MesesDurationContrato-exist; } else{