diff --git a/Aspnet/Controllers/InquilinoController.cs b/Aspnet/Controllers/InquilinoController.cs index ef55739..866040d 100644 --- a/Aspnet/Controllers/InquilinoController.cs +++ b/Aspnet/Controllers/InquilinoController.cs @@ -26,13 +26,13 @@ public class InquilinoController: ControllerBase [HttpPost("api/inquilino")] public IActionResult Post([FromBody] CrearClienteDto cid, [FromHeader(Name = "Auth")] string Auth) { - if (!string.IsNullOrEmpty(Auth)) return BadRequest(); + if (string.IsNullOrEmpty(Auth)) return BadRequest(new {message = "El String Auth Esta Vacio"}); var ret3 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 4); - if (ret3 == false) return BadRequest(ret3); + if (ret3 == false) return BadRequest(new {message = "Falló el permiso"}); var ret = verificarCrearUsuario(cid); - if (ret != "") return BadRequest(ret); + if (ret != "") return BadRequest(new {message = ret}); var cli = new Cliente { Dni = cid.dni, @@ -45,7 +45,7 @@ public class InquilinoController: ControllerBase }; bool ret2 = RepositorioUsuarios.Singleton.AltaInquilino(cli); - return (ret2) ? Ok() : BadRequest(ret); + return (ret2) ? Ok(new {message = "Se dio de alta la cuenta"}) : BadRequest(new {message = "Fallo Dar de Alta El inquilino"}); } private string verificarCrearUsuario(CrearClienteDto cid) { diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs index 8f62418..08f78c9 100644 --- a/Aspnet/Controllers/PropiedadesController.cs +++ b/Aspnet/Controllers/PropiedadesController.cs @@ -1,6 +1,5 @@ using Entidades; using Entidades.Dto; -using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Modelo; @@ -24,27 +23,42 @@ public class PropiedadesController: ControllerBase { var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12); if (validacion1 == false) return Unauthorized(); - if (Id < 0) return BadRequest("la id de propiedad no puede ser negativa"); + if (Id < 0) return BadRequest(new {message ="la id de propiedad no puede ser negativa"}); var ret = RepositorioPropiedades.Singleton.ObtenerPropiedadPorId(Id); - if (ret == null) return BadRequest("No existe la propiedad"); + if (ret == null) return BadRequest(new {message ="No existe la propiedad"}); return Ok(ret); } [HttpGet("api/propiedades/Propietario")] public IActionResult ObtenerPropiedadesPorPropietario ( - [FromBody] string email, + [FromHeader(Name = "Email")] string email, [FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2); if (validacion1 == false) return Unauthorized(); email = email.Trim(); - if (String.IsNullOrEmpty(email)) return BadRequest("falta campo email"); + if (String.IsNullOrEmpty(email)) return BadRequest(new {message ="falta campo email"}); - var ret = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(email); + IQueryable ret = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(email); + return Ok(ret); + } + [HttpGet("api/propiedades/Propietario/Bajas")] + public IActionResult ObtenerPropiedadesPorPropietarioBajas ( + [FromHeader(Name = "Email")] string email, + [FromHeader(Name = "Auth")] string Auth) { + + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 8); + if (validacion1 == false) return Unauthorized(); + + email = email.Trim(); + if (String.IsNullOrEmpty(email)) return BadRequest(new {message ="falta campo email"}); + + IQueryable ret = RepositorioPropiedades.Singleton.ObtenerPropiedadesDeBajaPorEmail(email); return Ok(ret); } @@ -58,71 +72,105 @@ public class PropiedadesController: ControllerBase { if (validacion2 != "") return BadRequest(new { message = validacion2 }); Cliente? cli = RepositorioPropietario.Singleton.ObtenerPropietarioPorEmail(propiedad.Email); - if (cli == null) return BadRequest("El email no corresponde a un propietario"); + if (cli == null) return BadRequest(new { message = "El email no corresponde a un propietario"}); Propiedade Prop = new Propiedade{ Canthabitaciones = propiedad.Canthabitaciones, Dnipropietario = cli.Dni, Idtipropiedad = propiedad.Idtipropiedad, Ubicacion = propiedad.Ubicacion, - Letra = propiedad.Letra != null ? propiedad.Letra : null, - Piso = propiedad.Piso != null ? propiedad.Piso : null, + Letra = propiedad.Letra ?? null, + Piso = propiedad.Piso ?? null, }; var ret = RepositorioPropiedades.Singleton.AñadirPropiedad(Prop); return (ret)? - Ok("Fue Cargado Correctamente") : - BadRequest("Fallo al momento de añadir la propiedad a la base de datos"); + Ok(new { message = "Fue Cargado Correctamente"}) : + BadRequest(new { message = "Fallo al momento de añadir la propiedad a la base de datos"}); } + [HttpPatch("api/propiedad")] + public IActionResult PatchPropiedad([FromBody] PatchPropiedadDto propiedad, [FromHeader(Name = "Auth")] string Auth) { + + if (String.IsNullOrEmpty(Auth)) return Unauthorized(); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2); + if (validacion1 == false) return Unauthorized(); + + string validacion2 = ValidarPropiedad(propiedad); + if (validacion2 != "") return BadRequest(new { message = validacion2 }); + + Cliente? cli = RepositorioPropietario.Singleton.ObtenerPropietarioPorEmail(propiedad.Email); + if (cli == null) return BadRequest(new { message = "El email no corresponde a un propietario"}); + + List servs = RepositorioServicios.Singleton.ObtenerServiciosPorDescripcion(propiedad.Servicios); + + Propiedade Prop = new Propiedade{ + Id = propiedad.id, + Canthabitaciones = propiedad.Canthabitaciones, + Dnipropietario = cli.Dni, + Idtipropiedad = propiedad.tipo, + Ubicacion = propiedad.Ubicacion, + Letra = propiedad.Letra ?? null, + Piso = propiedad.Piso ?? null, + IdServicios = servs, + }; + + bool ret = RepositorioPropiedades.Singleton.PatchPropiedad(Prop); + return (ret)? + Ok(new {message = "Fue modificado Correctamente"}): + BadRequest(new {message = "Fallo al modificar la base de datos"}); + } + [HttpDelete("api/propiedad")] - public IActionResult BajaPropiedad(int id, [FromHeader(Name = "Auth")] string Auth){ + public IActionResult BajaPropiedad(int id, [FromHeader(Name = "Auth")] string Auth, [FromHeader(Name = "Email")] string email){ if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2); if (validacion1 == false) return Unauthorized(); - if (id <= 0) return BadRequest("No es una id valida"); + if (String.IsNullOrEmpty(email)) return BadRequest(new { message = "Fallo al identificarse el usuario"}); + if (id <= 0) return BadRequest(new { message = "No es una id valida"}); - var ret = RepositorioPropiedades.Singleton.BajaPropiedad(id); + Cliente? propie = RepositorioPropietario.Singleton.ObtenerPropietarioPorEmail(email); + var ret = RepositorioPropiedades.Singleton.BajaPropiedad(id, propie); return ret ? - Ok(new {message = $"la propiedad con id {id} fue dada de baja"}): - BadRequest("Fallo al dar de baja la propiedad"); + Ok(new { message = $"Se Cambio el estado de la propiedad con id {id}"}): + BadRequest(new {message="Fallo al cambiar el estado de la propiedad"}); } [HttpPut("api/propiedades/addServicio")] public IActionResult AñadirServicio([FromBody] ServicioAPropiedadDto Servicios, [FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 8); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2); if (validacion1 == false) return Unauthorized(); - if (Servicios.propiedadid <= 0) return BadRequest("No puede tener una id negativa o cero"); - if (Servicios.idServicios.Count() < 1) return BadRequest("Falta añadir servicios"); - if (Servicios.idServicios.Any(x => x<= 0)) return BadRequest("No tienen haber ids negativas o cero de servicio"); + if (Servicios.propiedadid <= 0) return BadRequest(new {message ="No puede tener una id negativa o cero"}); + if (Servicios.idServicios.Count() < 1) return BadRequest(new {message ="Falta añadir servicios"}); + if (Servicios.idServicios.Any(x => x<= 0)) return BadRequest(new {message ="No tienen haber ids negativas o cero de servicio"}); var serv = RepositorioServicios.Singleton.ObtenerServiciosPorPropiedad(Servicios.propiedadid); bool validacion2 = Servicios.idServicios.Any(x => serv.Contains(x)); - if (validacion2 == true) return BadRequest("Hay elementos repetidos"); + if (validacion2 == true) return BadRequest(new {message ="Hay elementos repetidos"}); bool ret = RepositorioPropiedades. Singleton.AñadirServicioAPropiedad(Servicios.propiedadid, Servicios.idServicios); return ret ? - Ok("Los Servicios Se Cargaron correctamente a la propiedad") : BadRequest("No se pudo Cargar los Servicios a la propiedad"); + Ok(new {message ="Los Servicios Se Cargaron correctamente a la propiedad"}) : BadRequest(new {message ="No se pudo Cargar los Servicios a la propiedad"}); } [HttpPut("api/propiedades/RmServicio")] public IActionResult EliminarServicio([FromBody] ServicioAPropiedadDto servicio, [FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 13); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2); if (validacion1 == false) return Unauthorized(); - if (servicio.propiedadid <= 0) return BadRequest("No puede tener una id negativa o cero"); - if (servicio.idServicios.Count() < 1) return BadRequest("Falta añadir servicios"); - if (servicio.idServicios.Any(x => x<= 0)) return BadRequest("No tienen haber ids negativas o cero de servicio"); + if (servicio.propiedadid <= 0) return BadRequest(new {message ="No puede tener una id negativa o cero"}); + if (servicio.idServicios.Count() < 1) return BadRequest(new {message ="Falta añadir servicios"}); + if (servicio.idServicios.Any(x => x<= 0)) return BadRequest(new {message ="No tienen haber ids negativas o cero de servicio"}); var serv = RepositorioServicios.Singleton.ObtenerServiciosPorPropiedad(servicio.propiedadid); @@ -131,7 +179,7 @@ public class PropiedadesController: ControllerBase { bool ret = RepositorioPropiedades.Singleton.BajaServiciosAPropiedad(servicio.propiedadid, servicio.idServicios); return ret ? - Ok("Se Eliminaron los servicios seleccionados de la propiedad") : BadRequest("Fallo al eliminarse los servicios de la propiedad"); + Ok(new {message ="Se Eliminaron los servicios seleccionados de la propiedad"}) : BadRequest(new {message ="Fallo al eliminarse los servicios de la propiedad"}); } @@ -140,11 +188,32 @@ public class PropiedadesController: ControllerBase { string ret = ""; if (String.IsNullOrEmpty(prop.Email)) ret += "Falta Definir un email de propietario\n"; + if (prop.Canthabitaciones < 0) ret += "No se puede tener una cantidad de habitaciones negativa\n"; + if (prop.Idtipropiedad <= 0) ret += "No tiene un tipo de propiedad asociada"; + if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n"; return ret; } -} \ No newline at end of file + private string ValidarPropiedad(PatchPropiedadDto prop) { + if (prop == null) return "Esta mal formado el body de la request"; + + string ret = ""; + if (prop.id <1) ret += "No Cargo el dato de id"; + if (String.IsNullOrEmpty(prop.Email)) ret += "Falta Definir un email de propietario\n"; + + if (prop.id <1 ) ret += "No puede haber una id menor a 1"; + + if (prop.Canthabitaciones < 0) ret += "No se puede tener una cantidad de habitaciones negativa\n"; + + if (prop.tipo <= 0) ret += "No tiene un tipo de propiedad asociada"; + + if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n"; + + return ret; + + } +} diff --git a/Aspnet/Controllers/PropietarioController.cs b/Aspnet/Controllers/PropietarioController.cs index 9291d41..590e4da 100644 --- a/Aspnet/Controllers/PropietarioController.cs +++ b/Aspnet/Controllers/PropietarioController.cs @@ -21,7 +21,7 @@ public class PropietarioController: ControllerBase { return Ok(ret); } - [HttpPost("api/propietarios")] + [HttpPost("api/propietario")] public IActionResult AltaPropietario([FromBody]CrearClienteDto Propietario, [FromHeader(Name = "Auth")] string Auth) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); diff --git a/Entidades/Dto/PatchPropiedadDto.cs b/Entidades/Dto/PatchPropiedadDto.cs new file mode 100644 index 0000000..e146ce7 --- /dev/null +++ b/Entidades/Dto/PatchPropiedadDto.cs @@ -0,0 +1,3 @@ +namespace Entidades.Dto; + +public record PatchPropiedadDto(int id, string Ubicacion, int Canthabitaciones, int? Piso, string? Letra, string Email, int tipo, List Servicios); diff --git a/Entidades/Dto/PropiedadesDto.cs b/Entidades/Dto/PropiedadesDto.cs index d63e3a9..b4aa423 100644 --- a/Entidades/Dto/PropiedadesDto.cs +++ b/Entidades/Dto/PropiedadesDto.cs @@ -3,7 +3,8 @@ public class PropiedadesDto { public int id { get; set; } public string Ubicacion { get; set; } = ""; public int canthabitaciones { get; set; } - public string piso { get; set; } = ""; + public int piso { get; set; } public string letra { get; set; } = ""; - public string TipoPropiedad { get; set; } = ""; -} \ No newline at end of file + public string Tipo { get; set; } = ""; + public string? Servicios {get;set;} = ""; +} diff --git a/Front/src/App.svelte b/Front/src/App.svelte index 95c0f96..6528cb0 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -6,11 +6,13 @@ import InfoPage from './paginas/info.svelte'; import InqPage from "./paginas/inquilino.svelte"; import PropPage from "./paginas/propietario.svelte"; + import MisPropiedades from "./paginas/MisPropiedades.svelte"; + import MisPropiedadesDeBaja from "./paginas/MisPropiedadesDeBaja.svelte"; import FrontAdmin from "./paginas/grupos/AdminG.svelte"; - import FrontEstadistica from "./paginas/grupos/EstadisticaG.svelte"; + import FrontInformes from "./paginas/grupos/InformesG.svelte"; import FrontInquilino from "./paginas/grupos/InquilinoG.svelte"; import FrontPropietario from "./paginas/grupos/PropietarioG.svelte"; - import PublicarPropiedad from "./paginas/PublicarPropiedad.svelte"; + import PublicarPropiedad from "./paginas/PublicarPropiedad.svelte"; @@ -33,16 +35,28 @@ + + + + + + + + + + + + @@ -52,9 +66,11 @@ - - + + + + diff --git a/Front/src/Componentes/FormPostCli.svelte b/Front/src/Componentes/FormPostCli.svelte index fa1c309..fb0b05e 100644 --- a/Front/src/Componentes/FormPostCli.svelte +++ b/Front/src/Componentes/FormPostCli.svelte @@ -18,16 +18,24 @@ let domicilio: string = $state("") let celular: string = $state("") + const token = sessionStorage.getItem("token"); + async function submitForm(event: any) { event.preventDefault(); try { let response = await fetch(url, { method: 'POST', headers: { + 'Auth' : String(token), 'Content-Type' : 'application/json', }, body: JSON.stringify({dni, nombre, apellido, domicilio, celular, email, contraseña}) }); + if (response.ok){ + const errorData = await response.json(); + errorMessage = errorData.message; + showAlert = true; + } if (!response.ok) { const errorData = await response.json(); errorMessage = errorData.message; diff --git a/Front/src/Componentes/ListaAcciones.svelte b/Front/src/Componentes/ListaAcciones.svelte index d93319e..51bdbfa 100644 --- a/Front/src/Componentes/ListaAcciones.svelte +++ b/Front/src/Componentes/ListaAcciones.svelte @@ -39,10 +39,10 @@ } -
+
{#each $permisos as item} {item.descripcion} {/each} -
\ No newline at end of file +
diff --git a/Front/src/Componentes/ModalEstatico.svelte b/Front/src/Componentes/ModalEstatico.svelte new file mode 100644 index 0000000..03f801d --- /dev/null +++ b/Front/src/Componentes/ModalEstatico.svelte @@ -0,0 +1,18 @@ + + +
+ + {#if iscomponent == false} + {payload} + {:else} + {@render payload()} + {/if} + +
diff --git a/Front/src/Componentes/NavBarAutocompletable.svelte b/Front/src/Componentes/NavBarAutocompletable.svelte index ad8a925..225919a 100644 --- a/Front/src/Componentes/NavBarAutocompletable.svelte +++ b/Front/src/Componentes/NavBarAutocompletable.svelte @@ -1,21 +1,11 @@ + + + {id} + {ubicacion} + {canthabitaciones} + {letra} + {piso} + {tipo} + {servicios} + + + + + + +{#if modal} + +{/if} +{#if modificar} + + + + + +{/if} diff --git a/Front/src/Componentes/css/popup.css b/Front/src/Componentes/css/popup.css index 0fcdcf2..f13375c 100644 --- a/Front/src/Componentes/css/popup.css +++ b/Front/src/Componentes/css/popup.css @@ -32,7 +32,17 @@ display: block; } +.popup.show { + animation: rollDown 0.5s ease forwards; + display: block; +} + .dropdown-menu.hide { animation: rollUp 0.5s ease forwards; display: block; -} \ No newline at end of file +} + +.popup.hide { + animation: rollUp 0.5s ease forwards; + display: block; +} diff --git a/Front/src/Componentes/login.svelte b/Front/src/Componentes/login.svelte index a98a8f3..34a432c 100644 --- a/Front/src/Componentes/login.svelte +++ b/Front/src/Componentes/login.svelte @@ -5,7 +5,6 @@ let email = $state("") let contraseña = $state("") let errorMessage = $state("") - let showAlert = false; // @ts-ignore async function submitForm(event) { @@ -25,7 +24,6 @@ if (!response.ok){ const errorData = await response.json() errorMessage = errorData.message; - showAlert = true; return; } diff --git a/Front/src/Componentes/modificarPropiedadForm.svelte b/Front/src/Componentes/modificarPropiedadForm.svelte new file mode 100644 index 0000000..13d7bce --- /dev/null +++ b/Front/src/Componentes/modificarPropiedadForm.svelte @@ -0,0 +1,161 @@ + + +{#if showAlert} + +{/if} + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
Servicios
+ {#each serviciosDisponibles as servicio} +
+ + +
+ {/each} +
+ + +
diff --git a/Front/src/paginas/MisPropiedades.svelte b/Front/src/paginas/MisPropiedades.svelte new file mode 100644 index 0000000..f30e350 --- /dev/null +++ b/Front/src/paginas/MisPropiedades.svelte @@ -0,0 +1,64 @@ + + + +
+ + + + + + + + + + + + + + {#each $propiedades as propiedad} + + + {/each} + +
#ubicacionHabitacionesLetraPisoTipoServicios
+
+{#if fallo} +
Fallo al intentar Obtener la lista de propiedades
+{/if} diff --git a/Front/src/paginas/MisPropiedadesDeBaja.svelte b/Front/src/paginas/MisPropiedadesDeBaja.svelte new file mode 100644 index 0000000..a063f0f --- /dev/null +++ b/Front/src/paginas/MisPropiedadesDeBaja.svelte @@ -0,0 +1,64 @@ + + + +
+ + + + + + + + + + + + + + {#each $propiedades as propiedad} + + + {/each} + +
#ubicacionHabitacionesLetraPisoTipoServicios
+
+{#if fallo} +
Fallo al intentar Obtener la lista de propiedades
+{/if} diff --git a/Front/src/paginas/PublicarPropiedad.svelte b/Front/src/paginas/PublicarPropiedad.svelte index 512d5f5..8b9eb05 100644 --- a/Front/src/paginas/PublicarPropiedad.svelte +++ b/Front/src/paginas/PublicarPropiedad.svelte @@ -1,91 +1,129 @@ - -
-

Registrar Propiedad

-
-
- - -
-
- - -
-
- - -
-
- - -
- -
- - -
- -
+ + + +
+ +
+ + Este es un formulario con el objetivo de que usted pueda registrar las propiedades suyas que quiera hacer visibles a las busquedas de inquilinos. +

+ + + Para poder cargar la propiedad deberá especificar su ubicacion, la cantidad de habitaciones que posée, en caso de ser un edificio el piso, y letra, y que tipo de propiedad és (casa, departamento, oficina...). +
+ +
+

Registrar Propiedad

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+{#if mostrarModal == true} + +{/if} diff --git a/Front/src/paginas/grupos/AdminG.svelte b/Front/src/paginas/grupos/AdminG.svelte index 1ed9d36..52ec9cd 100644 --- a/Front/src/paginas/grupos/AdminG.svelte +++ b/Front/src/paginas/grupos/AdminG.svelte @@ -7,7 +7,7 @@ import NavBarAutocompletable from "../../Componentes/NavBarAutocompletable.svelt
-

Perfil del Administrador

+

Menu del Administrador

Gestiona las cuentas de usuarios, propiedades y permisos desde aquí.

diff --git a/Front/src/paginas/grupos/EstadisticaG.svelte b/Front/src/paginas/grupos/EstadisticaG.svelte deleted file mode 100644 index 5e17d5c..0000000 --- a/Front/src/paginas/grupos/EstadisticaG.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/Front/src/paginas/grupos/InformesG.svelte b/Front/src/paginas/grupos/InformesG.svelte new file mode 100644 index 0000000..7546397 --- /dev/null +++ b/Front/src/paginas/grupos/InformesG.svelte @@ -0,0 +1,13 @@ + + + +
+
+

Menu Informes

+

Visualice estadisticas e informes aqui.

+
+ +
\ No newline at end of file diff --git a/Front/src/paginas/grupos/InquilinoG.svelte b/Front/src/paginas/grupos/InquilinoG.svelte index 039f6a3..527096e 100644 --- a/Front/src/paginas/grupos/InquilinoG.svelte +++ b/Front/src/paginas/grupos/InquilinoG.svelte @@ -7,7 +7,7 @@ import NavBarAutocompletable from "../../Componentes/NavBarAutocompletable.svelt
-

Perfil del Inquilino

+

Menu del Inquilino

Gestiona tus Pagos y Busca Propiedades desde aquí.

diff --git a/Front/src/paginas/grupos/PropietarioG.svelte b/Front/src/paginas/grupos/PropietarioG.svelte index 84284d6..e07a0f4 100644 --- a/Front/src/paginas/grupos/PropietarioG.svelte +++ b/Front/src/paginas/grupos/PropietarioG.svelte @@ -6,7 +6,7 @@
-

Perfil del Propietario

+

Menu del Propietario

Gestiona tus propiedades y servicios desde aquí.

diff --git a/Front/src/paginas/inquilino.svelte b/Front/src/paginas/inquilino.svelte index 0da3a45..69f084a 100644 --- a/Front/src/paginas/inquilino.svelte +++ b/Front/src/paginas/inquilino.svelte @@ -6,9 +6,9 @@ -
+
-
+


Este es un formulario para crear una cuenta de Propietario. diff --git a/Front/src/paginas/menu.svelte b/Front/src/paginas/menu.svelte index 06a8931..03cd331 100644 --- a/Front/src/paginas/menu.svelte +++ b/Front/src/paginas/menu.svelte @@ -1,6 +1,15 @@ -hol \ No newline at end of file +
+
+

+ + +

Por favor, elige una de las opciones disponibles en la barra de navegación superior.

+ +
+
\ No newline at end of file diff --git a/Front/src/paginas/propiedades.svelte b/Front/src/paginas/propiedades.svelte deleted file mode 100644 index e69de29..0000000 diff --git a/Front/src/paginas/propietario.svelte b/Front/src/paginas/propietario.svelte index 447c6d1..b551918 100644 --- a/Front/src/paginas/propietario.svelte +++ b/Front/src/paginas/propietario.svelte @@ -6,9 +6,9 @@ -
+
-
+


Este es un formulario para crear una cuenta de Inquilino. diff --git a/Front/src/stores/urlStore.js b/Front/src/stores/urlStore.js new file mode 100644 index 0000000..4ef3ca2 --- /dev/null +++ b/Front/src/stores/urlStore.js @@ -0,0 +1,3 @@ +import { readable } from 'svelte/store'; + +export const urlG = readable('http://localhost:5007'); diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts new file mode 100644 index 0000000..a9f26ca --- /dev/null +++ b/Front/src/types.d.ts @@ -0,0 +1,28 @@ +export type PropiedadDto = { + id: number, + ubicacion: string, + tipo: string, + piso: string | null, + letra: string | null, + canthabitaciones: number, + servicios: string +} +export type Permiso = { + id: number; + descripcion: string; + }; + +export type Grupo = { + id: number; + nombre: string; + idpermisos: Permiso[]; + }; + +export type Propiedad = { + ubicacion: string, + canthabitaciones: number, + piso: number, + letra: string, + email: string, + idtipropiedad: number, +}; diff --git a/Modelo/RepositorioBase.cs b/Modelo/RepositorioBase.cs index 6454fa3..11eeabc 100644 --- a/Modelo/RepositorioBase.cs +++ b/Modelo/RepositorioBase.cs @@ -1,6 +1,4 @@ -using System.Collections.ObjectModel; -using Entidades; -using Microsoft.EntityFrameworkCore; +using Entidades; namespace Modelo; @@ -18,7 +16,7 @@ public abstract class RepositorioBase context.SaveChanges(); context.Dispose(); ret = true; - } catch (DbUpdateException ex) + } catch (Exception ex) { Console.Error.WriteLine(ex.Message); } diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs index cab5cdb..3c1632e 100644 --- a/Modelo/RepositorioPropiedades.cs +++ b/Modelo/RepositorioPropiedades.cs @@ -1,13 +1,13 @@ using System; -using System.Reflection.Metadata.Ecma335; -using System.Runtime.ConstrainedExecution; +using System.Data; using Entidades; using Entidades.Dto; +using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Modelo; +using MySql.Data.MySqlClient; -public class RepositorioPropiedades: RepositorioBase -{ +public class RepositorioPropiedades: RepositorioBase { public IQueryable ListarPropiedades(){ FormattableString sqlq = $""" @@ -36,27 +36,87 @@ public class RepositorioPropiedades: RepositorioBase return prop; } - public bool AñadirPropiedad(Propiedade? prop){ - if (prop == null) return false; - - var con = Context; - - int count = con.Propiedades.Count()+1; +public bool AñadirPropiedad(Propiedade? prop) { + if (prop == null) return false; - prop.Id = count; - prop.Idestado = 1; - con.Propiedades.Add(prop); + var con = Context; + + if (string.IsNullOrEmpty(prop.Letra)) prop.Letra = "_"; + + 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 + ); + + return (int)filasInsertadasParam.Value == 1? true: false; +} + + public bool PatchPropiedad(Propiedade prop) { + var con = Context; + Propiedade? propi = con.Propiedades.Include(x=>x.IdServicios).FirstOrDefault(x=>x.Id == prop.Id); + + if (propi == null) return false; + + propi.Canthabitaciones = prop.Canthabitaciones; + propi.Idtipropiedad = prop.Idtipropiedad; + propi.Ubicacion = prop.Ubicacion; + propi.Piso = prop.Piso; + propi.Letra = prop.Letra; + + propi.IdServicios.Clear(); + foreach(Servicio ser in prop.IdServicios) { + var servi = con.Servicios.FirstOrDefault(x=>x.Id == ser.Id); + if (servi == null) return false; + propi.IdServicios.Add(servi); + } + return Guardar(con); } public IQueryable ObtenerPropiedadesPorEmail(string email) { FormattableString sqlq = $""" - SELECT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as TipoPropiedad From Propiedades p + 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 + FROM Propiedades p JOIN Clientes c ON c.dni = p.dnipropietario JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad - WHERE c.email = {email} + LEFT JOIN Servicio_Propiedad ps ON ps.idPropiedad = p.id + LEFT JOIN Servicios s ON s.Id = ps.idServicio + WHERE c.email = {email} AND p.idestado = 1 + GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); + + return ret; + } + + 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 + FROM Propiedades p + JOIN Clientes c ON c.dni = p.dnipropietario + JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad + LEFT JOIN Servicio_Propiedad ps ON ps.idPropiedad = p.id + LEFT JOIN Servicios s ON s.Id = ps.idServicio + WHERE c.email = {email} AND p.idestado = 3 + GROUP BY p.id + """; + var ret = Context.Database.SqlQuery(sqlq); + return ret; } @@ -75,11 +135,19 @@ public class RepositorioPropiedades: RepositorioBase return Guardar(con); } - public bool BajaPropiedad(int id) { + public bool BajaPropiedad(int id, Cliente? cli) { + if (cli == null) return false; + var con = Context; - Propiedade? prop = con.Propiedades.Find(id); + Propiedade? prop = con.Propiedades.FirstOrDefault(x=>x.Id == id); if (prop == null) return false; - prop.Idestado = 3; + if (prop.Dnipropietario != cli.Dni) return false; + + if(prop.Idestado == 1){ + prop.Idestado = 3; + }else{ + prop.Idestado = 1; + } return Guardar(con); @@ -103,4 +171,4 @@ public class RepositorioPropiedades: RepositorioBase return Guardar(con); } -} \ No newline at end of file +} diff --git a/Modelo/RepositorioPropietario.cs b/Modelo/RepositorioPropietario.cs index e50df24..e8636dd 100644 --- a/Modelo/RepositorioPropietario.cs +++ b/Modelo/RepositorioPropietario.cs @@ -24,15 +24,8 @@ public class RepositorioPropietario: RepositorioBase { } public Cliente? ObtenerPropietarioPorEmail(string email){ - - FormattableString sqlq = $""" - SELECT * FROM Clientes c - JOIN cliente_Grupos cg ON cg.idgrupo = 1 - WHERE c.email = {email} - LIMIT 1 - """; - - Cliente? cli = Context.Database.SqlQuery(sqlq).First(); + var con = Context; + Cliente? cli = con.Clientes.FirstOrDefault(x=>x.Email == email); if (cli == null|| cli.Dni == 0) return null; if (cli.Dni == 0 || cli == null) return null; return cli; diff --git a/Modelo/RepositorioServicios.cs b/Modelo/RepositorioServicios.cs index 8f1c799..36adc8d 100644 --- a/Modelo/RepositorioServicios.cs +++ b/Modelo/RepositorioServicios.cs @@ -8,4 +8,9 @@ public class RepositorioServicios: RepositorioBase { .SelectMany(x => x.IdServicios) .Select(x=>x.Id); } + + public List ObtenerServiciosPorDescripcion(List servs){ + var servicios = Context.Servicios.Where(x=> servs.Contains(x.Descripcion)).ToList(); + return servicios; + } } diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index ae724a8..24f6941 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -10,45 +10,45 @@ public class RepositorioUsuarios: RepositorioBase { public bool AltaInquilino(Cliente cli) { var con = Context; + Grupo? grupo; //check por si la cuenta ya existe (puede ser propietario) Cliente? cli2 = con.Clientes.Find(cli.Dni); if (cli2 != null) { - cli = cli2; + grupo = con.Grupos.Find(2); + if (grupo == null || grupo.Id == 0) return false; + cli2.Idgrupos.Add(grupo); + return Guardar(con); } - var grupo = con.Grupos.Find(2); + grupo = con.Grupos.Find(2); if (grupo == null || grupo.Id == 0) return false; con.Clientes.Add(cli); - Guardar(con); - con = Context; - cli = con.Clientes.Find(cli.Dni) ?? new(); if (cli.Dni == 0) return false; cli.Idgrupos.Add(grupo); return Guardar(con); - - } public bool AltaPropietario(Cliente cli) { var con = Context; + Grupo? grupo; //check por si la cuenta ya existe (puede ser propietario) Cliente? cli2 = con.Clientes.Find(cli.Dni); if (cli2 != null) { - cli = cli2; + grupo = con.Grupos.Find(1); + if (grupo == null || grupo.Id == 0) return false; + cli2.Idgrupos.Add(grupo); + return Guardar(con); } - var grupo = con.Grupos.Find(1); + grupo = con.Grupos.Find(1); if (grupo == null || grupo.Id == 0) return false; con.Clientes.Add(cli); - Guardar(con); - con = Context; - cli = con.Clientes.Find(cli.Dni) ?? new(); if (cli.Dni == 0) return false; cli.Idgrupos.Add(grupo); diff --git a/makefile b/makefile index fda237e..6833aa4 100644 --- a/makefile +++ b/makefile @@ -1,2 +1,2 @@ run: - dotnet run --project Aspnet/AlquilaFacil.csproj + dotnet watch run --project Aspnet/AlquilaFacil.csproj