This commit is contained in:
2025-01-30 23:27:47 -03:00
parent b98cf77807
commit 68745cab5e
9 changed files with 660 additions and 6 deletions

View File

@@ -6,11 +6,217 @@ using Entidades;
using System.Linq.Expressions;
using AlquilaFacil.StrategyBusquedaAdmin;
using System.Diagnostics;
using AlquilaFacil.Builder;
using Minio.DataModel.Args;
using Minio;
using AlquilaFacil.Config;
using System.Text.Json;
namespace AlquilaFacil.Controllers;
[ApiController]
public class AdminController: ControllerBase
{
[HttpGet("api/contratos/controlPagos")]
public IActionResult obtenerContratosInpagos([FromHeader(Name = "Auth")] string Auth) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 14);
if (validacion1 == false) return Unauthorized();
var contratos = RepositorioContratos.Singleton.ObtenerContratosInpagos();
List<ContratoDto> dtos = new();
foreach (var i in contratos) {
if (i.DniinquilinoNavigation == null || i.IdpropiedadNavigation == null
|| i.DnipropietarioNavigation == null) continue;
var cont = new ContratoDtoBuilder()
.SetInquilino($"{i.DniinquilinoNavigation.Nombre} {i.DniinquilinoNavigation.Apellido}")
.SetUbicacion(i.IdpropiedadNavigation.Ubicacion)
.SetPropietario($"{i.DnipropietarioNavigation.Nombre} {i.DnipropietarioNavigation.Apellido}")
.SetId(i.Id)
.SetTipo(i.IdpropiedadNavigation.IdtipropiedadNavigation.Descripcion)
.SetFechaInicio(i.Fechainicio)
.SetEstado(i.Habilitado, i.Cancelado)
.Build();
dtos.Add(cont);
}
return Ok(dtos);
}
[HttpGet("api/contratos/controlPagos/propiedad")]
public IActionResult obtenerPropiedad([FromHeader(Name = "Auth")] string Auth, int id = 0) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Admin");
if (validacion1 == false) return Unauthorized();
if (id <= 0) return BadRequest(new { message = "No hay propiedades con id igual o menor a 0"});
var i = RepositorioContratos.Singleton.ObtenerContratoPorId(id);
if (i == null || i.DniinquilinoNavigation == null ||
i.IdpropiedadNavigation == null || i.DnipropietarioNavigation == null)return BadRequest(new { message = "Fallo la query"});
var cont = new ContratoPropiedadDtoBuilder()
.SetInquilino($"{i.DniinquilinoNavigation.Nombre} {i.DniinquilinoNavigation.Apellido}")
.SetUbicacion(i.IdpropiedadNavigation.Ubicacion)
.SetId(i.Id)
.SetPropietario($"{i.DnipropietarioNavigation.Nombre} {i.DnipropietarioNavigation.Apellido}")
.SetTipo(i.IdpropiedadNavigation.IdtipropiedadNavigation.Descripcion)
.SetFechaInicio(i.Fechainicio)
.SetEstado(i.Habilitado, i.Cancelado)
.SetHabitaciones(i.IdpropiedadNavigation.Canthabitaciones)
.SetPiso(i.IdpropiedadNavigation.Piso??0)
.SetLetra(i.IdpropiedadNavigation.Letra??"")
.SetMesesAumento(i.MesesHastaAumento)
.SetMesesDuracion(i.MesesDurationContrato)
.Build();
return Ok(cont);
}
private readonly IMinioClient mc;
public AdminController(IMinioClient minioClient) {
mc = minioClient;
if (mc == null){
MinioConfigcus? mcon = JsonSerializer.Deserialize<MinioConfigcus>(System.IO.File.ReadAllText("./settings.json"))?? null;
if (mcon == null) throw new Exception();
mc = new MinioClient().WithCredentials(mcon.usr, mcon.scrt)
.WithEndpoint("192.168.1.11:9000")
.WithSSL(false)
.Build();
}
}
[HttpGet("/api/admin/contrato/verDocumento")]
public IActionResult verDocumento([FromHeader(Name = "Auth")] string Auth, int idcontrato = 0){
if (String.IsNullOrWhiteSpace(Auth)) return BadRequest("");
var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Admin");
if (validacion1 == false) return Unauthorized();
if (idcontrato <= 0) return BadRequest(new {message = "La id no puede ser igual o menor a 0"});
Contrato? contr = RepositorioContratos.Singleton.ObtenerContratoPorId(idcontrato);
try{
var memstream = new MemoryStream();
var goa = new GetObjectArgs()
.WithBucket("alquilafacil")
.WithObject(contr.UrlContrato)
.WithCallbackStream(stream => {
memstream.Position=0;
stream.CopyTo(memstream);
});
mc.GetObjectAsync(goa).Wait();
memstream.Position = 0;
if (memstream.Length == 0) return BadRequest(new { message = "El archivo está vacío" });
return File(memstream, "application/pdf", contr.UrlContrato);
} catch (Exception e){
Console.Error.WriteLine(e);
return BadRequest(new { message = "Fallo al intentar obtener el archivo del almacenamiento o este no existe"});
}
}
[HttpGet("api/admin/contrato/canons")]
public IActionResult ObtenerCanones([FromHeader(Name="Auth")]string Auth, int id = 0){
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Admin");
if (validacion1 == false) return Unauthorized();
var cont = RepositorioContratos.Singleton.ObtenerContratoPorId(id);
if (cont == null) return BadRequest(new { message = "No existe el contrato"});
var list = RepositorioCanons.Singleton.ObtenerCanonsPorContrato(id);
if (list == null) return BadRequest(new { message = "No hay contrato por esa id"});
DateTime date = DateTime.Now;
bool ret =list.Any(x=>x.Pagado ==0 && date > x.Fecha);
if (ret == true) return BadRequest(new { message = "Este contrato no tiene canones vencidos"});
string divisa ="";
if (cont.Iddivisa == 0) divisa = "AR$"; else if (cont.Iddivisa == 1) divisa = "US$";
List<CanonDto> d = new();
foreach (var i in list) {
var c = new CanonDtoBuilder()
.SetId(i.Id)
.SetPago(i.Idrecibo==null?false:true)
.SetDivisa(divisa==""?"Ugh esta mal cargado la divisa en el contrato":divisa)
.SetMes(i.Fecha)
.SetMesNum(int.Parse((i.Fecha.Month - cont.Fechainicio.Month).ToString()) + 1)
.SetMonto(i.Monto)
.Build();
d.Add(c);
}
return Ok(d);
}
[HttpPost("api/admin/contrato/marcarPago")]
public IActionResult realizarPago([FromHeader(Name="Auth")]string Auth, MarcarPagoDto dto) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Admin");
if (validacion1 == false) return Unauthorized();
if (dto.Idcontrato<=0) return BadRequest(new { message = "No puede existir un contrato con id 0 o menor"});
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
if (cli == null)return Unauthorized();
Contrato? cont = RepositorioContratos.Singleton.ObtenerContratoPorId(dto.Idcontrato);
if (cont == null) return BadRequest(new { message = "No hay un contrato por esa id"});
Canon? c = RepositorioCanons.Singleton.ObtenerCanonContrato(dto.fecha, dto.Idcontrato);
if (c == null) return BadRequest(new { message = "no hay un canon por esa id"});
Recibo re = new Recibo{
Monto = c.Monto,
Fecha = DateTime.Now,
};
bool ret = RepositorioCanons.Singleton.SetRecibo(c, re, cli.Dni, "Admin Marca Recibo Como Pago");
return ret ?
Ok(new { message = "Se guardo correctamente"}):BadRequest(new { message = "No se pudo guardar"});
}
[HttpPost("api/admin/notificarInquilino")]
public IActionResult NotificarInquilino([FromHeader(Name ="Auth")]string Auth, NotificarAdmin data){
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Admin");
if (validacion1 == false) return Unauthorized();
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
if (cli == null)return Unauthorized();
if (data.Mensaje == "") return BadRequest(new {message = "El campo Mensaje esta vacio"});
if (data.Idcontrato <= 0) return BadRequest(new {message = "La id de contrato no puede ser 0 o menor"});
if (data.Idcanon <= 0) return BadRequest(new {message = "La id de contrato no puede ser 0 o menor"});
Contrato? cont = RepositorioContratos.Singleton.ObtenerContratoPorId(data.Idcontrato);
if (cont == null || cont.DniinquilinoNavigation == null || cont.DnipropietarioNavigation == null || cont.IdpropiedadNavigation == null) return BadRequest(new { message = "no hay un contrato por esa id"});
Canon? can = RepositorioCanons.Singleton.ObtenerCanonPorId(data.Idcanon);
if (can == null)return BadRequest(new { message = "No existe un canon por esa id"});
var n = new NotificacioneBuilder()
.SetAccion("Notificacion Inquilino")
.SetMensaje(data.Mensaje)
.SetLeido(false)
.SetDnicliente(cont.DniinquilinoNavigation.Dni)
.SetDniremitente(cont.DnipropietarioNavigation.Dni)
.SetIdpropiedad(cont.IdpropiedadNavigation.Id)
.SetFecha(DateTime.Now)
.Build();
var ret = RepositorioNotificaciones.Singleton.AltaNotificacion(n, cli.Dni);
return ret?
Ok(new { message = "se envio el aviso" }):BadRequest(new { message = "Fallo al intentar enviar el aviso" });
}
[HttpGet("api/admin/clientes")]
public IActionResult GetClientes([FromHeader(Name ="Auth")]string Auth){
if (String.IsNullOrEmpty(Auth)) return Unauthorized();