using Microsoft.AspNetCore.Mvc; using Modelo; using Entidades.Admin; using Entidades.Dto; using Entidades; using System.Linq.Expressions; 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); } [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); } [HttpDelete("api/admin/propiedad")] public IActionResult BajaPropiedad([FromHeader(Name = "Auth")] string Auth, int id = 0) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10); if (validacion1 == false) return Unauthorized(); if (id <= 0) return BadRequest(new { message = "Falto indicar id Propiedad"}); var ret = RepositorioPropiedades.Singleton.BajaPropiedad(id); return ret ? Ok(new {message = "Se cambio el estado de la propiedad"}): BadRequest(new { message = "No se pudo dar de baja"}); } [HttpGet("api/admin/busqueda/paginada")] public IActionResult FiltroPropiedadesPaginado([FromHeader(Name = "Auth")]string Auth, int cantidadHabitaciones = 0, int tipoPropiedad = 0, [FromQuery]string servicios = "", int pag = 1) { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10); if (validacion1 == false) return Unauthorized(); IQueryable? props = null; pag -= 1; if (servicios == ""){ //no hay parametros de busqueda if (cantidadHabitaciones == 0 && tipoPropiedad == 0 ) props = RepositorioPropiedades.Singleton.ListarPropiedadesPorPaginaAdmin(pag); //Solo Habitaciones if (cantidadHabitaciones != 0 && tipoPropiedad == 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitacionesPaginado(cantidadHabitaciones, pag); //Solo TipoPropiedad if (cantidadHabitaciones == 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipoPaginado(tipoPropiedad, pag); //Habitaciones y TipoPropiedad if (cantidadHabitaciones != 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_TipoPaginado(cantidadHabitaciones, tipoPropiedad, pag); } else { //Solo se filtra por servicios if (cantidadHabitaciones == 0 && tipoPropiedad == 0 ) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorServiciosPaginado(servicios, pag); //Servicios y habitaciones if (cantidadHabitaciones != 0 && tipoPropiedad == 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Servicios_Paginado(cantidadHabitaciones, servicios, pag); //Tipo y Servicios if (cantidadHabitaciones == 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo_Servicios_Paginado(tipoPropiedad, servicios, pag); // Todos los parametros if (cantidadHabitaciones != 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo_Servicios_Paginado(cantidadHabitaciones, tipoPropiedad, servicios, pag); } return Ok(props); } }