Files
AlquilaFacil/Aspnet/Controllers/AdminController.cs

154 lines
8.4 KiB
C#

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();
IEnumerable<UsuarioAdmin>list = 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<GrupoAdmin> 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<PropiedadesDto> 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<PropiedadesDto> 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<PropiedadesAdmin>? 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);
}
}