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)}
+ {/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{