diff --git a/Aspnet/Builder/DtoBuilder/DefectoDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/DefectoDtoBuilder.cs index e480e2f..c8e415b 100644 --- a/Aspnet/Builder/DtoBuilder/DefectoDtoBuilder.cs +++ b/Aspnet/Builder/DtoBuilder/DefectoDtoBuilder.cs @@ -19,11 +19,12 @@ public class DefectoDtoBuilder: Builder { return this; } public DefectoDtoBuilder SetIdContrato(long id){ - data.IdContrato = id; - data.Id = id; + data.Idcontrato = id; + return this; + } public DefectoDtoBuilder SetPagaInquilino(ulong pag){ - data.Pagainquilino=pag==1?"Si":"no"; + data.Pagainquilino=pag==1?"Si":"No"; return this; } public DefectoDtoBuilder SetDivisa(string divisa){ diff --git a/Aspnet/Controllers/DefectoController.cs b/Aspnet/Controllers/DefectoController.cs index 79c5829..a7f9fef 100644 --- a/Aspnet/Controllers/DefectoController.cs +++ b/Aspnet/Controllers/DefectoController.cs @@ -47,16 +47,12 @@ public class DefectoController: ControllerBase { return Ok(ll); } - [HttpPost("api/defecto")] // WIP no se que permisos se necesitan + [HttpPost("api/defecto")] public IActionResult AltaDefecto([FromHeader(Name = "Auth")] string Auth, AltaDefectoDto data) { 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 validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino"); + if (validacion1 == false) return Unauthorized(); + string r = ValidarDto(data); if (r != "") return BadRequest(new { message = r }); @@ -65,7 +61,7 @@ public class DefectoController: ControllerBase { Descripcion = data.Descripcion, Idcontrato = data.Idcontrato, Iddivisa = data.Iddivisa, - Pagainquilino = data.Pagainquilino, + Pagainquilino = data.Pagainquilino==0?0Lu:1Lu, Idestado = 1, }; @@ -79,21 +75,17 @@ public class DefectoController: ControllerBase { if (d == null) return "Dto nulo"; if (d.Iddivisa <0 || d.Iddivisa>1) ret +="No son divisas validas\n"; if (d.Descripcion == "") ret+="La descripcion no puede estar vacia\n"; - if (d.Idcontrato<=0)ret += "No puede haber un id de contrato iguao o menor a 0\n"; + if (d.Idcontrato<=0)ret += "No puede haber un id de contrato igual o menor a 0\n"; return ret; } - [HttpPut("api/defecto/marcarpago")] //WIP no se que permisos se necesitan + [HttpPut("api/defecto/marcarpago")] public IActionResult MarcarPago([FromHeader(Name = "Auth")] string Auth, long iddefecto = 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(); - } - } + if (validacion1 == false) return Unauthorized(); + if (iddefecto<=0) return BadRequest(new { message = "No hay canones con id 0 o menor"}); bool ret = RepositorioDefectos.Singleton.MarcarPago(iddefecto); diff --git a/Front/src/Componentes/FormAltaDefecto.svelte b/Front/src/Componentes/FormAltaDefecto.svelte new file mode 100644 index 0000000..2cf9067 --- /dev/null +++ b/Front/src/Componentes/FormAltaDefecto.svelte @@ -0,0 +1,94 @@ + + +
+
+
+ + + + {n}/100 + +
+ + +
+ $ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ + +
+
diff --git a/Front/src/paginas/ContratoInquilino.svelte b/Front/src/paginas/ContratoInquilino.svelte index 7e70dfc..9c297c1 100644 --- a/Front/src/paginas/ContratoInquilino.svelte +++ b/Front/src/paginas/ContratoInquilino.svelte @@ -3,8 +3,9 @@ import { onMount } from "svelte"; import ModalEstatico from "../Componentes/ModalEstatico.svelte"; import {urlG} from "../stores/urlStore"; - import type { CanonDto, ContratoDto, ContratoPropiedadDto, GaranteDto2 } from "../types"; + import type { AltaDefectoDto, CanonDto, ContratoDto, ContratoPropiedadDto, DefectoDto, GaranteDto2 } from "../types"; import ModalPedirDoc from "../Componentes/ModalPedirDoc.svelte"; + import FormAltaDefecto from "../Componentes/FormAltaDefecto.svelte"; let token:string = sessionStorage.getItem("token")||""; @@ -26,6 +27,7 @@ mesesAumento:0, mesesDuracion:0, }); + let defectos:DefectoDto[] = $state([]); let modaldata:string = $state(""); let contratoid:string = $state(""); @@ -55,14 +57,24 @@ "Auth": String(token), } }); - const [p, g, c] = await Promise.all([respPropiedad, respgarantes, respCanons]); + const respoDefect = fetch($urlG+"/api/defectos?Idcontrato="+contratoid, { + method: "GET", + headers: { + "Auth": token, + } + }); + const [p, g, c, d] = await Promise.all([respPropiedad, respgarantes, respCanons, respoDefect]); const datosPropiedad = await p.json(); const datosGarantes = await g.json(); const datosCanons = await c.json(); + const datosDefect = await d.json(); + prop = datosPropiedad; garantes = datosGarantes; canons = datosCanons; + defectos = datosDefect; + } catch { modaldata = "Fallo hacer las request"; } @@ -145,7 +157,7 @@ } - function generarTiket(mod) { + function generarTiket(mod:any) { selMod = mod; showmodal =true; } @@ -174,6 +186,43 @@ modaldata = "Fallo al intentar hacer la request"; } } + + async function cargarDefecto(data: AltaDefectoDto) { + if(data.idcontrato ==0) data.idcontrato = prop.id; + try { + const r = await fetch($urlG+"/api/defecto", { + method: "POST", + headers: { + "Auth": String(token), + "Content-Type": "application/json", + }, + body: JSON.stringify(data), + }); + let dr = await r.json(); + modaldata = dr.message; + if (r.ok) { + refreshDefectos(); + } + }catch{ + modaldata = "Fallo al intentar hacer la request"; + } + } + + async function refreshDefectos() { + try { + const r = await fetch($urlG+"/api/defectos?Idcontrato="+contratoid, { + method: "GET", + headers: { + "Auth": token, + } + }); + let rr =await r.json(); + defectos = rr; + } catch { + modaldata ="No se pudo pedir la lista de Defectos"; + } + + } @@ -307,6 +356,69 @@ +
+

+ +

+
+
+
+
+ Notificar Defecto en Propiedad +
+
+ +
+ +
+
+ + + + + + + + + + + + {#if defectos.length == 0} + + + + {:else} + {#each defectos as defecto} + + + + + + + + {/each} + {/if} + +
DescripciónCostoEstadoPaga InquilinoDivisa
No hay defectos que mostrar
{defecto.descripcion}{defecto.costo}{defecto.estado}{defecto.pagainquilino}{defecto.divisa}
+
+
+
diff --git a/Front/src/paginas/ContratosPropietario.svelte b/Front/src/paginas/ContratosPropietario.svelte index 851993b..012960b 100644 --- a/Front/src/paginas/ContratosPropietario.svelte +++ b/Front/src/paginas/ContratosPropietario.svelte @@ -3,7 +3,7 @@ import NavBarAutocompletable from "../Componentes/NavBarAutocompletable.svelte"; import ModalEstatico from "../Componentes/ModalEstatico.svelte"; import {urlG} from "../stores/urlStore"; - import type { CanonDto, ContratoDto, ContratoPropiedadDto, GaranteDto2 } from "../types"; + import type { CanonDto, ContratoDto, ContratoPropiedadDto, DefectoDto, GaranteDto2 } from "../types"; import ModalConfirm from "../Componentes/ModalConfirm.svelte"; import ModalPedirDoc from "../Componentes/ModalPedirDoc.svelte"; import ModalNotificacion from "../Componentes/ModalNotificacion.svelte"; @@ -34,6 +34,7 @@ mesesAumento:0, mesesDuracion:0, }); + let defectos:DefectoDto[] = $state([]); let modaldata:string = $state(""); let contratoid:string = $state(""); @@ -49,29 +50,38 @@ const respPropiedad = fetch($urlG+"/api/contrato/propietario?id="+contratoid, { method: "GET", headers: { - "Auth": String(token), + "Auth": token, } }); const respgarantes = fetch($urlG+"/api/contratos/garantes?idcontrato="+contratoid, { method: "GET", headers: { - "Auth": String(token), + "Auth": token, } }); const respCanons = fetch($urlG+"/api/contratos/canon?id="+contratoid, { method: "GET", headers: { - "Auth": String(token), + "Auth": token, } }); - const [p, g, c] = await Promise.all([respPropiedad, respgarantes, respCanons]); + const respoDefect = fetch($urlG+"/api/defectos?Idcontrato="+contratoid, { + method: "GET", + headers: { + "Auth": token, + } + }); + const [p, g, c, d] = await Promise.all([respPropiedad, respgarantes, respCanons, respoDefect]); const datosPropiedad = await p.json(); const datosGarantes = await g.json(); const datosCanons = await c.json(); + const datosDefect = await d.json(); + prop = datosPropiedad; garantes = datosGarantes; canons = datosCanons; + defectos = datosDefect; } catch { modaldata = "Fallo hacer las request"; } @@ -233,6 +243,44 @@ function abrirModalNotif() { shownotif = true; } + + + async function marcarDefectoPago(defecto: DefectoDto) { + try{ + const r = await fetch($urlG+"/api/defecto/marcarpago?iddefecto="+defecto.id, { + method: "PUT", + headers: { + "Auth": String(token), + "Content-Type": "application/json", + }, + }); + + let dr = await r.json(); + modaldata = dr.message; + if (r.ok) { + refreshDefectos(); + } + + }catch { + modaldata = "No se pudo marcar como pago"; + } + } + + async function refreshDefectos() { + try { + const r = await fetch($urlG+"/api/defectos?Idcontrato="+contratoid, { + method: "GET", + headers: { + "Auth": token, + } + }); + let rr =await r.json(); + defectos = rr; + } catch { + modaldata ="No se pudo pedir la lista de Defectos"; + } + + } @@ -405,6 +453,64 @@ +
+

+ +

+
+
+ + + + + + + + + + + + + {#if defectos.length == 0} + + + + {:else} + {#each defectos as defecto} + + + + + + + + + {/each} + {/if} + +
DescripciónCostoEstadoPaga InquilinoDivisa
No hay defectos que mostrar
{defecto.descripcion}{defecto.costo}{defecto.estado}{defecto.pagainquilino}{defecto.divisa} + {#if defecto.estado !== "Pagado"} + + + {/if} +
+
+
+
diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index 726983f..eaabcf9 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -118,4 +118,22 @@ export type ContratoPropiedadDto ={ letra:string, mesesAumento:number, mesesDuracion:number +} + +export type DefectoDto ={ + id:number, + descripcion:string, + costo:number, + estado:string, + idcontrato:number, + pagainquilino:string, + divisa:string, +} + +export type AltaDefectoDto ={ + descripcion:string, + costo:number, + pagainquilino:number, + iddivisa:number, + idcontrato:number } \ No newline at end of file diff --git a/Modelo/RepositorioDefectos.cs b/Modelo/RepositorioDefectos.cs index aebfb89..df62251 100644 --- a/Modelo/RepositorioDefectos.cs +++ b/Modelo/RepositorioDefectos.cs @@ -1,4 +1,5 @@ using Entidades; +using Microsoft.EntityFrameworkCore; namespace Modelo; @@ -21,7 +22,10 @@ public class RepositorioDefectos: RepositorioBase { public IQueryable ObtenerDefectosPorIdContrato(long idcontrato){ var con = Context; - var l = con.Defectos.Where(x=>x.Idcontrato == idcontrato); + var l = con.Defectos + .Include(x=>x.IdestadoNavigation) + .Include(x=>x.IddivisaNavigation) + .Where(x=>x.Idcontrato == idcontrato); return l; } } \ No newline at end of file