211 lines
10 KiB
C#
211 lines
10 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Modelo;
|
|
using Entidades.Admin;
|
|
using Entidades.Dto;
|
|
using Entidades;
|
|
using System.Linq.Expressions;
|
|
using AlquilaFacil.StrategyBusquedaAdmin;
|
|
using System.Diagnostics;
|
|
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/cliente")]
|
|
public IActionResult ObtenerCliente([FromHeader(Name ="Auth")]string Auth, long dni = 0){
|
|
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 haber un dni 0 o menor"});
|
|
|
|
Cliente? cambio = RepositorioUsuarios.Singleton.ObtenerClientePorDni(dni);
|
|
if (cambio == null) BadRequest(new { message = "no hay un cliente por ese dni"});
|
|
|
|
UpdateUsuarioAdmin a = new UpdateUsuarioAdmin{
|
|
Apellido = cambio.Apellido,
|
|
Celular = cambio.Celular,
|
|
Domicilio = cambio.Domicilio,
|
|
Nombre = cambio.Nombre,
|
|
};
|
|
|
|
return Ok(a);
|
|
}
|
|
|
|
[HttpPatch("api/admin/cliente")]
|
|
public IActionResult PatchCliente([FromHeader(Name ="Auth")]string Auth, [FromBody]UpdateUsuarioAdmin dto, [FromQuery]long dni=0){
|
|
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 haber un dni 0 o menor"});
|
|
|
|
var validacion2 = checkdto(dto);
|
|
if (validacion2 != "") return BadRequest(new { message = validacion2});
|
|
|
|
Cliente?cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
|
if (cli == null) return Unauthorized();
|
|
|
|
bool ret = RepositorioUsuarios.Singleton.PatchUsuario(dto, dni, cli.Dni);
|
|
|
|
return ret?
|
|
Ok(new { message = "Se actualizaron los datos"}):
|
|
BadRequest(new { message = "Fallo al guardar los datos"});
|
|
}
|
|
|
|
[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();
|
|
|
|
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
|
if (cli == null) return BadRequest(new { message = "No hay un cliente por ese token"});
|
|
|
|
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, cli.Dni);
|
|
|
|
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();
|
|
|
|
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
|
if (cli == null) return BadRequest(new { message = "No hay un cliente por ese token"});
|
|
|
|
|
|
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, cli.Dni);
|
|
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"});
|
|
|
|
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
|
if (cli == null) return Unauthorized();
|
|
|
|
var ret = RepositorioPropiedades.Singleton.BajaPropiedad(id, cli.Dni);
|
|
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;
|
|
|
|
var clave = $"{(cantidadHabitaciones != 0 ? "1" : "0")}{(tipoPropiedad != 0 ? "1" : "0")}{(!string.IsNullOrEmpty(servicios) ? "1" : "0")}";
|
|
var gen = AdminBusquedaContext.Singleton;
|
|
var estrategia = gen.ObtenerEstrategia(clave);
|
|
props = estrategia.Filtrar(servicios, cantidadHabitaciones, tipoPropiedad, pag);
|
|
|
|
return Ok(props);
|
|
}
|
|
|
|
[HttpGet("api/admin/busqueda/cantPag")]
|
|
public IActionResult CantidadPaginas([FromHeader(Name = "Auth")]string Auth, int cantidadHabitaciones = 0, int tipoPropiedad = 0, [FromQuery]string servicios = "") {
|
|
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
|
|
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10);
|
|
if (validacion1 == false) return Unauthorized();
|
|
|
|
int ret = RepositorioPropiedades.Singleton.CuantasPaginasBusqueda(cantidadHabitaciones, servicios, tipoPropiedad, 0);
|
|
return Ok(new { message = ret});
|
|
}
|
|
|
|
private string checkdto(UpdateUsuarioAdmin d){
|
|
string ret ="";
|
|
if (d.Nombre=="") ret+="Campo Nombre vacio\n";
|
|
if (d.Apellido=="") ret+="Campo Apellido vacio\n";
|
|
if (d.Celular=="") ret+="Campo Celular vacio\n";
|
|
if (d.Domicilio=="")ret+="Campo Domicilio vacio\n";
|
|
return ret;
|
|
}
|
|
} |