From f1c9632855b4217def3b04895f26f3d63ebc708f Mon Sep 17 00:00:00 2001 From: fede Date: Tue, 31 Dec 2024 01:53:49 -0300 Subject: [PATCH 1/4] =?UTF-8?q?avances=20a=C3=B1adido=20listado=20de=20cli?= =?UTF-8?q?entes=20y=20sus=20grupos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Aspnet/Controllers/AdminController.cs | 31 ++++ Entidades/Admin/GrupoAdmin.cs | 7 + Entidades/Admin/PermisosAdmin.cs | 6 + Entidades/Admin/UsuarioAdmin.cs | 8 + Entidades/Dto/CrearContratoDto.cs | 2 +- Front/src/App.svelte | 7 + .../BarraHorizontalConTexto.svelte | 4 +- Front/src/Componentes/RowPropiedad.svelte | 1 - Front/src/paginas/ControlUsuarios.svelte | 165 ++++++++++++++++++ Front/src/paginas/MisPropiedades.svelte | 11 +- Front/src/paginas/MisPropiedadesDeBaja.svelte | 12 +- Front/src/types.d.ts | 7 + Modelo/RepositorioGrupos.cs | 15 +- Modelo/RepositorioUsuarios.cs | 10 ++ 14 files changed, 266 insertions(+), 20 deletions(-) create mode 100644 Aspnet/Controllers/AdminController.cs create mode 100644 Entidades/Admin/GrupoAdmin.cs create mode 100644 Entidades/Admin/PermisosAdmin.cs create mode 100644 Entidades/Admin/UsuarioAdmin.cs create mode 100644 Front/src/paginas/ControlUsuarios.svelte diff --git a/Aspnet/Controllers/AdminController.cs b/Aspnet/Controllers/AdminController.cs new file mode 100644 index 0000000..b3f4b6b --- /dev/null +++ b/Aspnet/Controllers/AdminController.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Mvc; +using Modelo; +using Entidades.Admin; +namespace AlquilaFacil.Controllers; + +[ApiController] +public class AdminController: ControllerBase +{ + [HttpGet("api/admin/clientes")] + public IActionResult GetClientes([FromHeader(Name ="Auth")]string Auth){ + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); + if (validacion1 == false) return Unauthorized(); + + IEnumerablelist = RepositorioUsuarios.Singleton.GetClientes(); + return Ok(list); + } + + [HttpGet("api/admin/clientes/grupo")] + public IActionResult GetGruposByCliente([FromHeader(Name ="Auth")]string Auth, [FromQuery]long Dni){ + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); + if (validacion1 == false) return Unauthorized(); + + if (Dni <= 0) return BadRequest(new {message = "No puede tener un dni con numero negativo o cero"}); + + IEnumerable list = RepositorioGrupos.Singleton.ObtenerGruposPorDni(Dni); + return Ok(list); + + } +} \ No newline at end of file diff --git a/Entidades/Admin/GrupoAdmin.cs b/Entidades/Admin/GrupoAdmin.cs new file mode 100644 index 0000000..a25dd9c --- /dev/null +++ b/Entidades/Admin/GrupoAdmin.cs @@ -0,0 +1,7 @@ +namespace Entidades.Admin; + +public class GrupoAdmin { + public int Id {get; set;} = 0; + public String Descripcion {get; set;} = ""; + public List Permisos {get; set;} = new(); +} \ No newline at end of file diff --git a/Entidades/Admin/PermisosAdmin.cs b/Entidades/Admin/PermisosAdmin.cs new file mode 100644 index 0000000..aba95e0 --- /dev/null +++ b/Entidades/Admin/PermisosAdmin.cs @@ -0,0 +1,6 @@ +namespace Entidades.Admin; + +public class PermisoAdmin { + public int Id {get; set;} + public String Descripcion {get; set;} = ""; +} \ No newline at end of file diff --git a/Entidades/Admin/UsuarioAdmin.cs b/Entidades/Admin/UsuarioAdmin.cs new file mode 100644 index 0000000..6833961 --- /dev/null +++ b/Entidades/Admin/UsuarioAdmin.cs @@ -0,0 +1,8 @@ +namespace Entidades.Admin; + +public record UsuarioAdmin { + public long Dni { get; set; } = 0; + public string Nombre { get; set; } = ""; + public string Email { get; set; } = ""; + public ulong Habilitado { get; set; } +} \ No newline at end of file diff --git a/Entidades/Dto/CrearContratoDto.cs b/Entidades/Dto/CrearContratoDto.cs index 065237e..bfd023f 100644 --- a/Entidades/Dto/CrearContratoDto.cs +++ b/Entidades/Dto/CrearContratoDto.cs @@ -1,5 +1,5 @@ namespace Entidades.Dto; - +//WIP public class CrearContratoDto { public int Meses {get; set;} public int Idpropiedad {get; set;} diff --git a/Front/src/App.svelte b/Front/src/App.svelte index fcfeaf0..2c8e293 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -14,6 +14,7 @@ import FrontPropietario from "./paginas/grupos/PropietarioG.svelte"; import PublicarPropiedad from "./paginas/PublicarPropiedad.svelte"; import BusquedaPropiedades from "./paginas/BusquedaPropiedades.svelte"; + import ControlUsuarios from "./paginas/ControlUsuarios.svelte"; @@ -61,6 +62,12 @@ + + + + + + diff --git a/Front/src/Componentes/BarraHorizontalConTexto.svelte b/Front/src/Componentes/BarraHorizontalConTexto.svelte index 6a48406..82a7aba 100644 --- a/Front/src/Componentes/BarraHorizontalConTexto.svelte +++ b/Front/src/Componentes/BarraHorizontalConTexto.svelte @@ -1,11 +1,11 @@

-
{prop.text}
+
{text}

\ No newline at end of file diff --git a/Front/src/Componentes/RowPropiedad.svelte b/Front/src/Componentes/RowPropiedad.svelte index b979573..819efa9 100644 --- a/Front/src/Componentes/RowPropiedad.svelte +++ b/Front/src/Componentes/RowPropiedad.svelte @@ -47,7 +47,6 @@ {servicios} - diff --git a/Front/src/paginas/ControlUsuarios.svelte b/Front/src/paginas/ControlUsuarios.svelte new file mode 100644 index 0000000..7507029 --- /dev/null +++ b/Front/src/paginas/ControlUsuarios.svelte @@ -0,0 +1,165 @@ + + + + +{#if modaldata} + !!(modaldata = "")}/> +{/if} + +
+
+
+ + +
+ + + + + + + + + + + {#each Clientes as cli} + cargaGrupos(cli.dni)} in:fade> + + + + + + {/each} + +
DniNombre/ApellidoEmail
{cli.dni}{cli.nombre}{cli.email} + {#if cli.habilitado} + + {:else} + + {/if} +
+
+
+
+ + + + + + + + + + + {#each Grupos as g} + + + + + + {/each} + +
IdDescripcion
{g.id}{g.descripcion}
+ + {#if showAddmenu} +
+ + +
+
+ + +
+ +
+
+ {/if} +
+
+
+ \ No newline at end of file diff --git a/Front/src/paginas/MisPropiedades.svelte b/Front/src/paginas/MisPropiedades.svelte index a1e882c..0ce5d0a 100644 --- a/Front/src/paginas/MisPropiedades.svelte +++ b/Front/src/paginas/MisPropiedades.svelte @@ -5,6 +5,7 @@ import RowPropiedad from "../Componentes/RowPropiedad.svelte"; import type { PropiedadDto } from "../types"; import { urlG } from "../stores/urlStore"; + import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte"; let propiedades = writable([]); let email = localStorage.getItem("email"); @@ -39,11 +40,9 @@ -

- Propiedades de Alta -

-
- + +
+
@@ -53,12 +52,12 @@ + {#each $propiedades as propiedad} - {/each}
#Piso Tipo Servicios
diff --git a/Front/src/paginas/MisPropiedadesDeBaja.svelte b/Front/src/paginas/MisPropiedadesDeBaja.svelte index 48cafc0..b1c5890 100644 --- a/Front/src/paginas/MisPropiedadesDeBaja.svelte +++ b/Front/src/paginas/MisPropiedadesDeBaja.svelte @@ -5,6 +5,7 @@ import RowPropiedad from "../Componentes/RowPropiedad.svelte"; import type { PropiedadDto } from "../types"; import { urlG } from "../stores/urlStore"; + import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte"; let propiedades = writable([]); let email = localStorage.getItem("email"); @@ -39,11 +40,10 @@ -

- Propiedades de Baja -

-
- + + +
+
@@ -53,12 +53,12 @@ + {#each $propiedades as propiedad} - {/each}
#Piso Tipo Servicios
diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index a9f26ca..5634317 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -12,6 +12,13 @@ export type Permiso = { descripcion: string; }; +export type Cliente = { + dni: number, + nombre: string, + email: string, + habilitado: boolean +} + export type Grupo = { id: number; nombre: string; diff --git a/Modelo/RepositorioGrupos.cs b/Modelo/RepositorioGrupos.cs index c8bef71..28e1fa3 100644 --- a/Modelo/RepositorioGrupos.cs +++ b/Modelo/RepositorioGrupos.cs @@ -1,6 +1,5 @@ -#if DEBUG - using Entidades; +using Entidades.Admin; using Microsoft.EntityFrameworkCore; namespace Modelo; @@ -23,6 +22,14 @@ public class RepositorioGrupos: RepositorioBase { var con = Context; return con.Grupos.Where(x=>x.Nombre == grupo).SelectMany(x => x.Idpermisos); } -} -#endif \ No newline at end of file + public IQueryable ObtenerGruposPorDni(long Dni) { + var con = Context; + var grupos = con.Clientes.Where(x=>x.Dni == Dni).SelectMany(x=>x.Idgrupos) + .Select(x=> new GrupoAdmin{ + Id = x.Id, + Descripcion = x.Nombre, + }); + return grupos; + } +} \ No newline at end of file diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index ede9978..a2db2c0 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -119,4 +119,14 @@ public class RepositorioUsuarios: RepositorioBase { return ret; } + + public IEnumerable GetClientes(){ + var con = Context; + var list = con.Clientes.ToList().Select(x => new Entidades.Admin.UsuarioAdmin { + Dni = x.Dni, + Email = x.Email, + Nombre = x.Nombre+" "+x.Apellido, + Habilitado = x.Habilitado}); + return list; + } } -- 2.52.0 From 872415cddefa4fad2a60f2fa6a466e44c9274ecb Mon Sep 17 00:00:00 2001 From: fede Date: Tue, 31 Dec 2024 20:24:08 -0300 Subject: [PATCH 2/4] feat: terminado tema desabilitacion cliente --- Aspnet/Controllers/AdminController.cs | 78 +++++++++++++++ Aspnet/Controllers/PropiedadesController.cs | 11 ++- Entidades/Admin/EmailGrupo.cs | 2 + Entidades/Alquilafacilcontext.cs | 3 + Entidades/Dto/AltaPropiedadDto.cs | 1 + Entidades/Dto/PatchPropiedadDto.cs | 2 +- Entidades/Dto/PropiedadesDto.cs | 1 + Entidades/Propiedade.cs | 2 + .../Componentes/PublicacionPropiedad.svelte | 1 + Front/src/Componentes/RowPropiedad.svelte | 5 +- .../Componentes/modificarPropiedadForm.svelte | 14 ++- Front/src/paginas/ControlUsuarios.svelte | 98 ++++++++++++++++--- Front/src/paginas/MisPropiedades.svelte | 3 +- Front/src/paginas/MisPropiedadesDeBaja.svelte | 3 +- Front/src/paginas/PublicarPropiedad.svelte | 12 +++ Front/src/types.d.ts | 4 +- Modelo/RepositorioContratos.cs | 15 +++ Modelo/RepositorioPropiedades.cs | 69 ++++++++----- Modelo/RepositorioUsuarios.cs | 44 +++++++++ 19 files changed, 320 insertions(+), 48 deletions(-) create mode 100644 Entidades/Admin/EmailGrupo.cs create mode 100644 Modelo/RepositorioContratos.cs diff --git a/Aspnet/Controllers/AdminController.cs b/Aspnet/Controllers/AdminController.cs index b3f4b6b..1941782 100644 --- a/Aspnet/Controllers/AdminController.cs +++ b/Aspnet/Controllers/AdminController.cs @@ -1,6 +1,8 @@ using Microsoft.AspNetCore.Mvc; using Modelo; using Entidades.Admin; +using Entidades.Dto; +using Entidades; namespace AlquilaFacil.Controllers; [ApiController] @@ -26,6 +28,82 @@ public class AdminController: ControllerBase IEnumerable list = RepositorioGrupos.Singleton.ObtenerGruposPorDni(Dni); return Ok(list); + } + [HttpPatch("api/admin/cliente/addGrupo")] + public IActionResult AddGrupoACliente([FromHeader(Name = "Auth")]string Auth, [FromBody]EmailGrupo data){ + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); + if (validacion1 == false) return Unauthorized(); + if (data.email == "" || data.grupo == "") return BadRequest(new { message = "Faltan datos en la request" }); + + var ret = RepositorioUsuarios.Singleton.CheckGrupo(data.email, data.grupo); + if (ret) return BadRequest(new { message = $"El usuario ya pertenece al grupo {data.grupo}"}); + + var ret2 = RepositorioUsuarios.Singleton.AñadirClienteAGrupo(data.email, data.grupo); + + return ret2 ? Ok(new {message = "Se Añadio al Grupo"}): BadRequest(new { message = "Fallo al añadirse al Grupo" }); + } + + [HttpPatch("api/admin/cliente/rmGrupo")] + public IActionResult RmGrupoACliente([FromHeader(Name = "Auth")]string Auth, [FromBody]EmailGrupo data){ + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); + if (validacion1 == false) return Unauthorized(); + + if (data.email == "" || data.grupo == "") return BadRequest(new { message = "Faltan datos en la request" }); + + //una ward para que no me bloquee a mi mismo de tener acceso a admin + if (data.email == "celu@fedesrv.ddns.net" && data.grupo == "Admin") return BadRequest(new { message = "Si hago esto me estaria bloqueando la cuenta a mi mismo" }); + + var ret = RepositorioUsuarios.Singleton.CheckGrupo(data.email, data.grupo); + if (!ret) return BadRequest(new { message = $"El usuario no pertenece al grupo {data.grupo}"}); + + if (data.grupo == "Propietario") { + IQueryable ret3 = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(data.email); + if (ret3.Count() > 0){ + bool ret4 = RepositorioPropiedades.Singleton.BajaPropiedades(data.email); + if (ret4 == false) return BadRequest(new { message = "No se pudo dar de baja las propiedades"}); + } + } + if (data.grupo == "Inquilino") { + var ret5 = RepositorioContratos.Singleton.ObtenerContratosPorEmailInquilino(data.email); + if ( ret5 == null || ret5.Where(x=>x.Habilitado == 0).Count() > 0) return BadRequest(new { message = "Aun tenes alquileres pendientes o fallo al intentar obtener la lista de alquileres, no se puede dar de baja"}); + } + + var ret2 = RepositorioUsuarios.Singleton.EliminarClienteAGrupo(data.email, data.grupo); + return ret2 ? Ok(new {message = $"Se elimino del Grupo: {data.grupo}"}): BadRequest(new { message = "Fallo al añadirse al Grupo" }); + } + + [HttpDelete("api/admin/cliente")] + public IActionResult BajaCliente([FromHeader(Name ="Auth")]string Auth, long Dni){ + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); + if (validacion1 == false) return Unauthorized(); + + if ( Dni <=0) return BadRequest(new {message = "No puede tener un Dni menor o igual a 0"}); + + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorDni(Dni); + + if (cli == null) return BadRequest(new {message = "No existe un cliente con ese numero de dni"}); + + bool esPropietario = RepositorioUsuarios.Singleton.CheckGrupo(cli.Email, "Propietario"); + bool esInquilino = RepositorioUsuarios.Singleton.CheckGrupo(cli.Email, "Inquilino"); + + if (esPropietario) { + IQueryable ret3 = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(cli.Email); + if (ret3.Count() > 0){ + bool ret4 = RepositorioPropiedades.Singleton.BajaPropiedades(cli.Email); + if (ret4 == false) return BadRequest(new { message = "No se pudo dar de baja las propiedades"}); + } + } + + if (esInquilino) { + var ret5 = RepositorioContratos.Singleton.ObtenerContratosPorEmailInquilino(cli.Email); + if ( ret5 == null || ret5.Where(x=>x.Habilitado == 0).Count() > 0) return BadRequest(new { message = "Aun tenes alquileres pendientes o fallo al intentar obtener la lista de alquileres, no se puede dar de baja"}); + } + // lo da de baja si no tiene el grupo propietario y no tiene alquileres pendientes + var ret = RepositorioUsuarios.Singleton.BajaCliente(Dni); + return Ok(ret); } } \ No newline at end of file diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs index 9acfe43..0a7a5c2 100644 --- a/Aspnet/Controllers/PropiedadesController.cs +++ b/Aspnet/Controllers/PropiedadesController.cs @@ -11,6 +11,7 @@ public class PropiedadesController: ControllerBase { public IActionResult ListarPropiedades([FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12); + if (validacion1 == false) validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2); if (validacion1 == false) return Unauthorized(); var ret = RepositorioPropiedades.Singleton.ListarPropiedades(); @@ -81,6 +82,7 @@ public class PropiedadesController: ControllerBase { Ubicacion = propiedad.Ubicacion, Letra = propiedad.Letra ?? null, Piso = propiedad.Piso ?? null, + Monto = propiedad.Monto, }; var ret = RepositorioPropiedades.Singleton.AñadirPropiedad(Prop); @@ -113,6 +115,7 @@ public class PropiedadesController: ControllerBase { Letra = propiedad.Letra ?? null, Piso = propiedad.Piso ?? null, IdServicios = servs, + Monto = propiedad.Monto }; bool ret = RepositorioPropiedades.Singleton.PatchPropiedad(Prop); @@ -193,8 +196,9 @@ public class PropiedadesController: ControllerBase { if (prop.Idtipropiedad <= 0) ret += "No tiene un tipo de propiedad asociada\n"; - if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad"; + if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n"; + if (prop.Monto<=1) ret += "El monto tiene que ser como minimo mayor a 0"; return ret; } @@ -211,8 +215,9 @@ public class PropiedadesController: ControllerBase { if (prop.tipo <= 0) ret += "No tiene un tipo de propiedad asociada\n"; - if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad"; - + if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n"; + + if (prop.Monto<=1) ret += "El monto tiene que ser como minimo mayor a 0"; return ret; } diff --git a/Entidades/Admin/EmailGrupo.cs b/Entidades/Admin/EmailGrupo.cs new file mode 100644 index 0000000..3db517c --- /dev/null +++ b/Entidades/Admin/EmailGrupo.cs @@ -0,0 +1,2 @@ +namespace Entidades.Admin; +public record EmailGrupo(string email, string grupo); \ No newline at end of file diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs index 5191cf1..8f0a69a 100644 --- a/Entidades/Alquilafacilcontext.cs +++ b/Entidades/Alquilafacilcontext.cs @@ -436,6 +436,9 @@ public partial class AlquilaFacilContext : DbContext .HasMaxLength(1) .IsFixedLength() .HasColumnName("letra"); + entity.Property(e => e.Monto) + .HasPrecision(10) + .HasColumnName("monto"); entity.Property(e => e.Piso) .HasColumnType("int(11)") .HasColumnName("piso"); diff --git a/Entidades/Dto/AltaPropiedadDto.cs b/Entidades/Dto/AltaPropiedadDto.cs index 86865ce..a549463 100644 --- a/Entidades/Dto/AltaPropiedadDto.cs +++ b/Entidades/Dto/AltaPropiedadDto.cs @@ -6,4 +6,5 @@ public class AltaPropiedadDto { public string? Letra { get; set; } = null; public string Email { get; set; } = string.Empty; public int Idtipropiedad { get; set; } + public int Monto { get; set; } } \ No newline at end of file diff --git a/Entidades/Dto/PatchPropiedadDto.cs b/Entidades/Dto/PatchPropiedadDto.cs index e146ce7..f7a01d5 100644 --- a/Entidades/Dto/PatchPropiedadDto.cs +++ b/Entidades/Dto/PatchPropiedadDto.cs @@ -1,3 +1,3 @@ namespace Entidades.Dto; -public record PatchPropiedadDto(int id, string Ubicacion, int Canthabitaciones, int? Piso, string? Letra, string Email, int tipo, List Servicios); +public record PatchPropiedadDto(int id, string Ubicacion, int Canthabitaciones, int? Piso, string? Letra, string Email, int tipo, List Servicios, int Monto); diff --git a/Entidades/Dto/PropiedadesDto.cs b/Entidades/Dto/PropiedadesDto.cs index b4aa423..274206f 100644 --- a/Entidades/Dto/PropiedadesDto.cs +++ b/Entidades/Dto/PropiedadesDto.cs @@ -7,4 +7,5 @@ public class PropiedadesDto { public string letra { get; set; } = ""; public string Tipo { get; set; } = ""; public string? Servicios {get;set;} = ""; + public int Monto { get; set; } } diff --git a/Entidades/Propiedade.cs b/Entidades/Propiedade.cs index 8d47663..c5ca2b2 100644 --- a/Entidades/Propiedade.cs +++ b/Entidades/Propiedade.cs @@ -21,6 +21,8 @@ public partial class Propiedade public int? Idestado { get; set; } + public decimal Monto { get; set; } + public virtual ICollection Contratos { get; set; } = new List(); public virtual Cliente? DnipropietarioNavigation { get; set; } diff --git a/Front/src/Componentes/PublicacionPropiedad.svelte b/Front/src/Componentes/PublicacionPropiedad.svelte index 2d43cd4..d905ed9 100644 --- a/Front/src/Componentes/PublicacionPropiedad.svelte +++ b/Front/src/Componentes/PublicacionPropiedad.svelte @@ -17,6 +17,7 @@ Piso: {prop.piso || "N/A"}
Letra: {prop.letra || "N/A"}
Servicios: {prop.servicios || "Sin servicios especificados"} + Monto: {prop.monto}

diff --git a/Front/src/Componentes/RowPropiedad.svelte b/Front/src/Componentes/RowPropiedad.svelte index 819efa9..c9cdb15 100644 --- a/Front/src/Componentes/RowPropiedad.svelte +++ b/Front/src/Componentes/RowPropiedad.svelte @@ -3,7 +3,7 @@ import ModalEstatico from "./ModalEstatico.svelte"; import ModificarPropiedadForm from "./modificarPropiedadForm.svelte"; - let { id, ubicacion, tipo, letra, piso,canthabitaciones, servicios, btnbaja = "Baja" } = $props(); + let { id, ubicacion, tipo, letra, piso,canthabitaciones, servicios, btnbaja = "Baja", monto } = $props(); import { urlG } from "../stores/urlStore"; @@ -45,6 +45,7 @@ {piso} {tipo} {servicios} + {monto} @@ -56,7 +57,7 @@ {#if modificar} - + {/if} diff --git a/Front/src/Componentes/modificarPropiedadForm.svelte b/Front/src/Componentes/modificarPropiedadForm.svelte index 13d7bce..709ec9b 100644 --- a/Front/src/Componentes/modificarPropiedadForm.svelte +++ b/Front/src/Componentes/modificarPropiedadForm.svelte @@ -2,7 +2,7 @@ import { urlG } from "../stores/urlStore"; import { onMount } from "svelte"; - let { canthabitaciones, id, letra, piso, tipo, ubicacion, servicios } = $props(); + let { canthabitaciones, id, letra, piso, tipo, ubicacion, servicios, monto } = $props(); let serviciosSeleccionados: string[] = $state([]); const serviciosDisponibles = ["Gas", "Internet", "Telefono", "Luz"]; @@ -53,6 +53,7 @@ ubicacion, email, servicios: serviciosSeleccionados, + monto }), }); if (response.ok) { @@ -116,6 +117,17 @@ />
+
+ + +
{ try{ @@ -33,9 +36,9 @@ }); - async function cargaGrupos(dni: number){ + async function cargaGrupos(cli: Cliente){ try { - const response = await fetch($urlG+"/api/admin/clientes/grupo?Dni="+dni, { + const response = await fetch($urlG+"/api/admin/clientes/grupo?Dni="+cli.dni, { method: "GET", headers: { "Auth": String(token), @@ -45,6 +48,7 @@ let data = await response.json(); Grupos = data; showAddmenu = true; + SelCliente = cli; return; } @@ -74,6 +78,67 @@ } } + async function añadirGrupo(e:Event, cli: Cliente, grupo:string){ + e.preventDefault(); + if (cli.dni == 0 || cli.email == "" || grupo == ""){ + modaldata = "No se selecciono un cliente o Grupo"; + return; + } + const email = cli.email; + try { + const response = await fetch($urlG+"/api/admin/cliente/addGrupo", { + method: "PATCH", + headers: { + "Auth": String(token), + 'Content-Type' : 'application/json', + }, + body: JSON.stringify({email, grupo}) + }); + + if (response.ok){ + let data = await response.json(); + modaldata = data.message; + cargaGrupos(cli); + return; + } + let data = await response.json(); + modaldata = data.message; + } catch { + modaldata = "Falla la conexion al servidor"; + } + } + async function BajaGrupo(e:Event, cli: Cliente, grupo:string){ + e.preventDefault(); + if (cli.dni == 0 || cli.email == "" || grupo == ""){ + modaldata = "No se selecciono un cliente o Grupo"; + return; + } + const email = cli.email; + if (grupo === "Propietario"){ + if (confirm("Sos propietario si te desactivas de ese rol tus propiedades se van a dar de baja, Estas seguro?") == false) return; + } + try { + const response = await fetch($urlG+"/api/admin/cliente/rmGrupo", { + method: "PATCH", + headers: { + "Auth": String(token), + 'Content-Type' : 'application/json', + }, + body: JSON.stringify({email, grupo}) + }); + + if (response.ok){ + let data = await response.json(); + modaldata = data.message; + cargaGrupos(cli); + return; + } + let data = await response.json(); + modaldata = data.message; + } catch { + modaldata = "Falla la conexion al servidor"; + } + } @@ -99,7 +164,7 @@ {#each Clientes as cli} - cargaGrupos(cli.dni)} in:fade> + cargaGrupos(cli)} in:fade> {cli.dni} {cli.nombre} {cli.email} @@ -131,13 +196,24 @@ + {#if Grupos.length>0} + {#each Grupos as g} {g.id} {g.descripcion} - + {/each} + {:else if SelCliente != null} + + Este Cliente no tiene Grupos + + {:else} + + Seleccione un cliente para ver sus grupos + + {/if} @@ -145,14 +221,14 @@
-
+ añadirGrupo(e,SelCliente, grupo)}>
- + + + +
diff --git a/Front/src/paginas/MisPropiedades.svelte b/Front/src/paginas/MisPropiedades.svelte index 0ce5d0a..48f9c2c 100644 --- a/Front/src/paginas/MisPropiedades.svelte +++ b/Front/src/paginas/MisPropiedades.svelte @@ -52,12 +52,13 @@ Piso Tipo Servicios + Monto {#each $propiedades as propiedad} - + {/each} diff --git a/Front/src/paginas/MisPropiedadesDeBaja.svelte b/Front/src/paginas/MisPropiedadesDeBaja.svelte index b1c5890..29de6c1 100644 --- a/Front/src/paginas/MisPropiedadesDeBaja.svelte +++ b/Front/src/paginas/MisPropiedadesDeBaja.svelte @@ -53,12 +53,13 @@ Piso Tipo Servicios + Monto {#each $propiedades as propiedad} - + {/each} diff --git a/Front/src/paginas/PublicarPropiedad.svelte b/Front/src/paginas/PublicarPropiedad.svelte index ebfb256..34fc13b 100644 --- a/Front/src/paginas/PublicarPropiedad.svelte +++ b/Front/src/paginas/PublicarPropiedad.svelte @@ -12,6 +12,7 @@ letra: "", email: localStorage.getItem("email") || "", idtipropiedad: 1, + monto: 1, }; let token = sessionStorage.getItem("token"); @@ -93,6 +94,17 @@ />
+
+ + +
{ + public IQueryable? ObtenerContratosPorEmailInquilino(string email){ + var con = Context; + try{ + var listcont = con.Contratos.Where(x=>x.DniinquilinoNavigation.Email == email); + return listcont; + } catch { + return null; + } + } +} diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs index 6269fc2..7bc44de 100644 --- a/Modelo/RepositorioPropiedades.cs +++ b/Modelo/RepositorioPropiedades.cs @@ -12,7 +12,7 @@ public class RepositorioPropiedades: RepositorioBase { public IQueryable ListarPropiedades(){ FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, - GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios + GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id @@ -41,35 +41,36 @@ public class RepositorioPropiedades: RepositorioBase { return prop; } -public bool AñadirPropiedad(Propiedade? prop) { - if (prop == null) return false; + public bool AñadirPropiedad(Propiedade? prop) { + if (prop == null) return false; - var con = Context; + var con = Context; - if (string.IsNullOrEmpty(prop.Letra)) prop.Letra = "_"; + if (string.IsNullOrEmpty(prop.Letra)) prop.Letra = "_"; - var filasInsertadasParam = new MySqlParameter("@p_filas_insertadas", SqlDbType.Int) - { - Direction = ParameterDirection.Output - }; + var filasInsertadasParam = new MySqlParameter("@p_filas_insertadas", SqlDbType.Int) + { + Direction = ParameterDirection.Output + }; - // Ejecutar el procedimiento almacenado - var row = con.Database.ExecuteSqlRaw( - $""" - CALL InsertarPropiedad(@p_ubicacion, @p_cant_habitaciones, @p_piso, @p_letra, - @p_dni_propietario, @p_id_tipo_propiedad, @p_filas_insertadas) - """, - new MySqlParameter("@p_ubicacion", prop.Ubicacion), - new MySqlParameter("@p_cant_habitaciones", prop.Canthabitaciones), - new MySqlParameter("@p_piso", prop.Piso), - new MySqlParameter("@p_letra", prop.Letra), - new MySqlParameter("@p_dni_propietario", prop.Dnipropietario), - new MySqlParameter("@p_id_tipo_propiedad", prop.Idtipropiedad), - filasInsertadasParam - ); + // Ejecutar el procedimiento almacenado + var row = con.Database.ExecuteSqlRaw( + $""" + CALL InsertarPropiedad(@p_ubicacion, @p_cant_habitaciones, @p_piso, @p_letra, + @p_dni_propietario, @p_id_tipo_propiedad, @p_monto, @p_filas_insertadas) + """, + new MySqlParameter("@p_ubicacion", prop.Ubicacion), + new MySqlParameter("@p_cant_habitaciones", prop.Canthabitaciones), + new MySqlParameter("@p_piso", prop.Piso), + new MySqlParameter("@p_letra", prop.Letra), + new MySqlParameter("@p_dni_propietario", prop.Dnipropietario), + new MySqlParameter("@p_id_tipo_propiedad", prop.Idtipropiedad), + new MySqlParameter("@p_monto",prop.Monto), + filasInsertadasParam + ); - return (int)filasInsertadasParam.Value == 1? true: false; -} + return (int)filasInsertadasParam.Value == 1? true: false; + } public bool PatchPropiedad(Propiedade prop) { var con = Context; @@ -82,6 +83,7 @@ public bool AñadirPropiedad(Propiedade? prop) { propi.Ubicacion = prop.Ubicacion; propi.Piso = prop.Piso; propi.Letra = prop.Letra; + propi.Monto = prop.Monto; propi.IdServicios.Clear(); foreach(Servicio ser in prop.IdServicios) { @@ -95,7 +97,7 @@ public bool AñadirPropiedad(Propiedade? prop) { public IQueryable ObtenerPropiedadesPorEmail(string email) { FormattableString sqlq = $""" - SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo, GROUP_CONCAT(IFNULL(s.descripcion, '') SEPARATOR ', ') AS Servicios + SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo, GROUP_CONCAT(IFNULL(s.descripcion, '') SEPARATOR ', ') AS Servicios, p.monto as Monto FROM Propiedades p JOIN Clientes c ON c.dni = p.dnipropietario JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad @@ -111,7 +113,7 @@ public bool AñadirPropiedad(Propiedade? prop) { public IQueryable ObtenerPropiedadesDeBajaPorEmail(string email) { FormattableString sqlq = $""" - SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo, GROUP_CONCAT(IFNULL(s.descripcion, '') SEPARATOR ', ') AS Servicios + SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo, GROUP_CONCAT(IFNULL(s.descripcion, '') SEPARATOR ', ') AS Servicios, p.monto as Monto FROM Propiedades p JOIN Clientes c ON c.dni = p.dnipropietario JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad @@ -326,4 +328,17 @@ public bool AñadirPropiedad(Propiedade? prop) { var ret = Context.Database.SqlQuery(sqlq); return ret; } + + public bool BajaPropiedades(string email) { + var con = Context; + try { + IQueryable listprop = con.Propiedades.Where(x=>x.DnipropietarioNavigation.Email == email); + foreach (var item in listprop) { + item.Idestado = 3; + } + } catch { + return false; + } + return Guardar(con); + } } \ No newline at end of file diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index a2db2c0..c93c352 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -129,4 +129,48 @@ public class RepositorioUsuarios: RepositorioBase { Habilitado = x.Habilitado}); return list; } + + public bool AñadirClienteAGrupo(string email, string grupo) { + var con = Context; + + var cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email); + var gru = con.Grupos.FirstOrDefault(x => x.Nombre == grupo); + + if (cli == null || gru == null) { + return false; + } + + cli.Idgrupos.Add(gru); + return Guardar(con); + } + + public bool EliminarClienteAGrupo(string email, string grupo) { + var con = Context; + + var cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email); + var gru = con.Grupos.FirstOrDefault(x => x.Nombre == grupo); + + if (cli == null || gru == null) { + return false; + } + cli.Idgrupos.Remove(gru); + return Guardar(con); + } + + public bool BajaCliente(long dni) { + var con = Context; + + Cliente? cli = con.Clientes.Include(x=>x.Idgrupos).FirstOrDefault(x=>x.Dni == dni); + if (cli == null) return false; + + cli.Habilitado = 0; + + return Guardar(con); + } + + public Cliente? ObtenerClientePorDni(long dni) { + var con = Context; + Cliente? cli = con.Clientes.FirstOrDefault(x=>x.Dni == dni); + return cli; + } } -- 2.52.0 From 8c5d0108a14be4d485cf0216b14b9c1df305d0c0 Mon Sep 17 00:00:00 2001 From: fede Date: Wed, 1 Jan 2025 18:06:40 -0300 Subject: [PATCH 3/4] fix: bug no da de alta el usuario --- Front/src/paginas/ControlUsuarios.svelte | 12 ++++++------ Modelo/RepositorioUsuarios.cs | 6 +++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Front/src/paginas/ControlUsuarios.svelte b/Front/src/paginas/ControlUsuarios.svelte index eb2a796..66a0abb 100644 --- a/Front/src/paginas/ControlUsuarios.svelte +++ b/Front/src/paginas/ControlUsuarios.svelte @@ -13,7 +13,7 @@ let token = sessionStorage.getItem("token"); let showAddmenu: boolean = $state(false); - let grupo:string; + let grupo:string = $state(""); let SelCliente: Cliente = $state(); onMount(async () => { @@ -58,11 +58,11 @@ } } - async function bajaCliente(event:Event, Dni:number) { + async function bajaCliente(event:Event, cli:Cliente) { //WIP añadir una flag para que muestre que no se pudo dar se alta/baja event.stopPropagation(); try { - const response = await fetch($urlG+"/api/admin/cliente?Dni="+Dni, { + const response = await fetch($urlG+"/api/admin/cliente?Dni="+cli.dni, { method: "DELETE", headers: { "Auth": String(token), @@ -71,6 +71,7 @@ if(response.ok){ let data = await response.json(); modaldata = data.message; + cli.habilitado = !cli.habilitado; } } catch { modaldata = ""; @@ -170,11 +171,11 @@ {cli.email} {#if cli.habilitado} - {:else} - {/if} @@ -219,7 +220,6 @@ {#if showAddmenu}
- añadirGrupo(e,SelCliente, grupo)}>
diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index c93c352..3694f90 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -163,7 +163,11 @@ public class RepositorioUsuarios: RepositorioBase { Cliente? cli = con.Clientes.Include(x=>x.Idgrupos).FirstOrDefault(x=>x.Dni == dni); if (cli == null) return false; - cli.Habilitado = 0; + if (cli.Habilitado == 0) { + cli.Habilitado = 1; + } else { + cli.Habilitado = 0; + } return Guardar(con); } -- 2.52.0 From a89852804de46e493ec4e8f3993eefa48cca555e Mon Sep 17 00:00:00 2001 From: fede Date: Thu, 2 Jan 2025 14:53:29 -0300 Subject: [PATCH 4/4] =?UTF-8?q?a=C3=B1adido=20signo=20peso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Front/src/Componentes/PublicacionPropiedad.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Front/src/Componentes/PublicacionPropiedad.svelte b/Front/src/Componentes/PublicacionPropiedad.svelte index d905ed9..41b6a75 100644 --- a/Front/src/Componentes/PublicacionPropiedad.svelte +++ b/Front/src/Componentes/PublicacionPropiedad.svelte @@ -17,7 +17,7 @@ Piso: {prop.piso || "N/A"}
Letra: {prop.letra || "N/A"}
Servicios: {prop.servicios || "Sin servicios especificados"} - Monto: {prop.monto}
+ Monto: ${prop.monto}

-- 2.52.0