carga de contratos por admin funcional
This commit is contained in:
@@ -58,37 +58,74 @@ public class CargarContratoAdminController: ControllerBase{
|
|||||||
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 20);
|
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 20);
|
||||||
if (validacion1 == false) return Unauthorized();
|
if (validacion1 == false) return Unauthorized();
|
||||||
|
|
||||||
if (!Request.HasFormContentType)
|
if (!Request.HasFormContentType) {
|
||||||
{
|
|
||||||
return BadRequest(new { message = "La solicitud debe contener datos de formulario (FormData)." });
|
return BadRequest(new { message = "La solicitud debe contener datos de formulario (FormData)." });
|
||||||
}
|
}
|
||||||
|
|
||||||
var formData = await Request.ReadFormAsync();
|
var formData = await Request.ReadFormAsync();
|
||||||
if (formData == null)
|
if (formData == null) {
|
||||||
{
|
|
||||||
return BadRequest(new { message = "No se pudieron leer los datos del formulario." });
|
return BadRequest(new { message = "No se pudieron leer los datos del formulario." });
|
||||||
}
|
}
|
||||||
|
|
||||||
var archivoContrato = Request.Form.Files.FirstOrDefault(x=>x.FileName =="archivoContrato");
|
var archivoContrato = Request.Form.Files.FirstOrDefault(x=>x.Name =="archivoContrato");
|
||||||
if (archivoContrato == null) return BadRequest(new { message = "Falto Subir el archivo" });
|
if (archivoContrato == null) return BadRequest(new { message = "Falto Subir el archivo" });
|
||||||
|
|
||||||
if (archivoContrato.ContentType != "application/pdf")
|
if (archivoContrato.ContentType != "application/pdf") {
|
||||||
{
|
|
||||||
return BadRequest(new { message = "El archivo debe ser un PDF." });
|
return BadRequest(new { message = "El archivo debe ser un PDF." });
|
||||||
}
|
}
|
||||||
|
|
||||||
Contrato? cont; ActionResult? req;
|
Contrato? cont; IActionResult? req;
|
||||||
|
|
||||||
(cont, req) = ParseContratoFromForm(formData);
|
(cont, req) = ParseContratoFromForm(formData);
|
||||||
if (req != null && cont == null) return req;
|
if (req != null && cont == null) return req;
|
||||||
|
|
||||||
var ret = RepositorioContratos.Singleton.AdminCargaContrato(cont, cli.Dni);
|
var ret = RepositorioContratos.Singleton.AdminCargaContrato(cont, cli.Dni);
|
||||||
|
if(ret == false) return BadRequest( new {message = "No se pudo cargar el contrato" });
|
||||||
|
|
||||||
//WIP
|
var inq = RepositorioUsuarios.Singleton.ObtenerClientePorDni(cont.Dniinquilino??0);
|
||||||
//Falta Carga del archivo a minio
|
|
||||||
//Falta añadir la url al contrato
|
cont = RepositorioContratos.Singleton.ObtenerContrato(inq.Email, cont.Idpropiedad ?? 0);
|
||||||
//Falta generar canones
|
if (cont == null) return BadRequest(new { message = "No se pudo recuperar el contrato" });
|
||||||
//Falta mandar notificaciones
|
|
||||||
|
|
||||||
|
string nuevoNombreArchivo = $"id:{cont.Id}-inq:{cont.Dniinquilino}-propi:{cont.Dnipropietario}-idprop:{cont.Idpropiedad}.pdf";
|
||||||
|
|
||||||
|
ret = await subirContrato(archivoContrato, nuevoNombreArchivo);
|
||||||
|
if (ret == false) return BadRequest(new { message = "No se pudo subir el archivo" });
|
||||||
|
|
||||||
|
ret = RepositorioContratos.Singleton.AddUrl(cont.Id, nuevoNombreArchivo, cli.Dni);
|
||||||
|
if (ret == false) return BadRequest(new { message = "No se pudo guardar la url del contrato" });
|
||||||
|
|
||||||
|
ret = RepositorioContratos.Singleton.GenerarCanones(cont.Id, cli.Dni);
|
||||||
|
if (ret == false) return BadRequest( new { message = "Fallo al generar canones" });
|
||||||
|
|
||||||
|
var noti = new NotificacioneBuilder()
|
||||||
|
.SetDniremitente(int.Parse(cli.Dni.ToString()))
|
||||||
|
.SetIdpropiedad(cont.Idpropiedad ?? 0)
|
||||||
|
.SetDnicliente(cont.Dniinquilino ?? 0)
|
||||||
|
.SetAccion("Notificacion")
|
||||||
|
.SetMensaje($"Contrato Cargado desde Administracion")
|
||||||
|
.SetFecha(DateTime.Now)
|
||||||
|
.SetLeido(false)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var noti2 = new NotificacioneBuilder()
|
||||||
|
.SetDniremitente(int.Parse(cli.Dni.ToString()))
|
||||||
|
.SetIdpropiedad(cont.Idpropiedad ?? 0)
|
||||||
|
.SetDnicliente(cont.Dnipropietario ?? 0)
|
||||||
|
.SetAccion("Notificacion")
|
||||||
|
.SetMensaje($"Contrato Cargado desde Administracion")
|
||||||
|
.SetFecha(DateTime.Now)
|
||||||
|
.SetLeido(false)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
ret = RepositorioNotificaciones.Singleton.AltaNotificacion(noti);
|
||||||
|
if (ret == false) return BadRequest( new { message = "No se pudo entregar la notificacion al inquilino" });
|
||||||
|
|
||||||
|
ret = RepositorioNotificaciones.Singleton.AltaNotificacion(noti2);
|
||||||
|
if (ret == false) return BadRequest( new { message = "No se pudo entregar la notificacion al propietario" });
|
||||||
|
|
||||||
|
return Ok(new { message = "Se cargo el contrato" });
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -159,6 +196,7 @@ public class CargarContratoAdminController: ControllerBase{
|
|||||||
if (mesesHastaAumento <= 0){
|
if (mesesHastaAumento <= 0){
|
||||||
return (null, BadRequest(new { message = "No se cargaron los meses hasta el aumento" }));
|
return (null, BadRequest(new { message = "No se cargaron los meses hasta el aumento" }));
|
||||||
}
|
}
|
||||||
|
if (mesesDuration<mesesHastaAumento) return (null, BadRequest( new { message = "El contrato no puede durar menos que el tiempo hasta el aumento" } ));
|
||||||
|
|
||||||
if (!formData.TryGetValue("monto", out var montoValues) ||
|
if (!formData.TryGetValue("monto", out var montoValues) ||
|
||||||
string.IsNullOrEmpty(montoValues.FirstOrDefault()) ||
|
string.IsNullOrEmpty(montoValues.FirstOrDefault()) ||
|
||||||
@@ -199,13 +237,13 @@ public class CargarContratoAdminController: ControllerBase{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (montoOpcionVenta <= 0.0m){
|
if (montoOpcionVenta <= 0.0m && tieneOpcionVenta){
|
||||||
return (null, BadRequest(new { message = "No se cargo el monto de la opcion de venta" }));
|
return (null, BadRequest(new { message = "No se cargo el monto de la opcion de venta" }));
|
||||||
}
|
}
|
||||||
|
|
||||||
var cont = new Contrato{
|
var cont = new Contrato{
|
||||||
Cancelado=0,
|
Cancelado=0,
|
||||||
Habilitado=1,
|
Habilitado=0,
|
||||||
Cantgarantemin=cantGarantMin,
|
Cantgarantemin=cantGarantMin,
|
||||||
Dniinquilino=dniInquilino,
|
Dniinquilino=dniInquilino,
|
||||||
Dnipropietario=dniPropietario,
|
Dnipropietario=dniPropietario,
|
||||||
@@ -241,7 +279,14 @@ public class CargarContratoAdminController: ControllerBase{
|
|||||||
var garanteCount = garanteKeys.Count / 6;
|
var garanteCount = garanteKeys.Count / 6;
|
||||||
|
|
||||||
for (int i = 0; i < garanteCount; i++) {
|
for (int i = 0; i < garanteCount; i++) {
|
||||||
var dni = formData.TryGetValue($"garantes[{i}].dni", out var dniValue) ? dniValue.ToString() ?? "" : "";
|
|
||||||
|
int dni = 0;
|
||||||
|
if (formData.TryGetValue($"garantes[{i}].dni", out var dniValue) &&
|
||||||
|
!string.IsNullOrEmpty(dniValue.FirstOrDefault()))
|
||||||
|
{
|
||||||
|
int.TryParse(dniValue.FirstOrDefault(), out dni);
|
||||||
|
}
|
||||||
|
|
||||||
var nombre = formData.TryGetValue($"garantes[{i}].nombre", out var nombreValue) ? nombreValue.ToString() ?? "" : "";
|
var nombre = formData.TryGetValue($"garantes[{i}].nombre", out var nombreValue) ? nombreValue.ToString() ?? "" : "";
|
||||||
var apellido = formData.TryGetValue($"garantes[{i}].apellido", out var apellidoValue) ? apellidoValue.ToString() ?? "" : "";
|
var apellido = formData.TryGetValue($"garantes[{i}].apellido", out var apellidoValue) ? apellidoValue.ToString() ?? "" : "";
|
||||||
var domicilio = formData.TryGetValue($"garantes[{i}].domicilio", out var domicilioValue) ? domicilioValue.ToString() ?? "" : "";
|
var domicilio = formData.TryGetValue($"garantes[{i}].domicilio", out var domicilioValue) ? domicilioValue.ToString() ?? "" : "";
|
||||||
@@ -278,4 +323,31 @@ public class CargarContratoAdminController: ControllerBase{
|
|||||||
.Build();
|
.Build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<bool> subirContrato(IFormFile f, string flname) {
|
||||||
|
try {
|
||||||
|
var buck = new BucketExistsArgs().WithBucket("alquilafacil");
|
||||||
|
bool encontrado = await mc.BucketExistsAsync(buck).ConfigureAwait(false);
|
||||||
|
|
||||||
|
if (!encontrado) {
|
||||||
|
var mb = new MakeBucketArgs().WithBucket("alquilafacil");
|
||||||
|
await mc.MakeBucketAsync(mb).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
using (var stream = new MemoryStream()) {
|
||||||
|
await f.CopyToAsync(stream);
|
||||||
|
stream.Position = 0;
|
||||||
|
PutObjectArgs putbj = new PutObjectArgs()
|
||||||
|
.WithBucket("alquilafacil")
|
||||||
|
.WithObject(flname)
|
||||||
|
.WithStreamData(stream)
|
||||||
|
.WithContentType("application/pdf")
|
||||||
|
.WithObjectSize(stream.Length);
|
||||||
|
await mc.PutObjectAsync(putbj);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
Console.Error.WriteLine(e.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,9 +64,9 @@ public class UsuarioController : ControllerBase
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public record setemail(string EmailRecuperacion);
|
public record SetEmail(string EmailRecuperacion);
|
||||||
[HttpPut("/api/usuario/emailrecuperacion")]
|
[HttpPut("/api/usuario/emailrecuperacion")]
|
||||||
public IActionResult CambiarPass([FromHeader(Name = "Auth")] string Auth, [FromBody] setemail setemail)
|
public IActionResult CambiarPass([FromHeader(Name = "Auth")] string Auth, [FromBody] SetEmail setemail)
|
||||||
{
|
{
|
||||||
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
||||||
if (cli == null) return BadRequest(new { message = "No hay un usuario por ese token" });
|
if (cli == null) return BadRequest(new { message = "No hay un usuario por ese token" });
|
||||||
@@ -86,9 +86,9 @@ public class UsuarioController : ControllerBase
|
|||||||
return Ok(new { message = "Email de recuperación actualizado con éxito" });
|
return Ok(new { message = "Email de recuperación actualizado con éxito" });
|
||||||
}
|
}
|
||||||
|
|
||||||
public record recuperarusuario(string Email, string EmailRecuperacion);
|
public record RecuperarUsuarioDto(string Email, string EmailRecuperacion);
|
||||||
[HttpPost("/api/recuperarUsuario")]
|
[HttpPost("/api/recuperarUsuario")]
|
||||||
public IActionResult RecuperarUsuario([FromBody] recuperarusuario mails)
|
public IActionResult RecuperarUsuario([FromBody] RecuperarUsuarioDto mails)
|
||||||
{
|
{
|
||||||
bool check = RepositorioUsuarios.Singleton.CheckEmailRecuperacion(mails.Email, mails.EmailRecuperacion);
|
bool check = RepositorioUsuarios.Singleton.CheckEmailRecuperacion(mails.Email, mails.EmailRecuperacion);
|
||||||
if (check == false) return BadRequest(new { message = "El email no corresponde al email de recuperacion" });
|
if (check == false) return BadRequest(new { message = "El email no corresponde al email de recuperacion" });
|
||||||
|
|||||||
@@ -160,15 +160,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/api/contratos', {
|
const response = await fetch($urlG + '/api/admin/contrato/carga', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": token || "",
|
"Auth": token || "",
|
||||||
},
|
},
|
||||||
body: formData
|
body: formData
|
||||||
});
|
});
|
||||||
|
const data = await response.json();
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
alert('Contrato creado exitosamente');
|
|
||||||
contrato = {
|
contrato = {
|
||||||
id: 0,
|
id: 0,
|
||||||
cantgarantemin: 0,
|
cantgarantemin: 0,
|
||||||
@@ -180,11 +180,14 @@
|
|||||||
mesesHastaAumento: 0,
|
mesesHastaAumento: 0,
|
||||||
monto: 0,
|
monto: 0,
|
||||||
tieneopcionventa: false,
|
tieneopcionventa: false,
|
||||||
archivoContrato: null
|
archivoContrato: null,
|
||||||
|
divisaOpcionVenta: 0,
|
||||||
|
montoOpcionVenta: 0,
|
||||||
|
garantes: []
|
||||||
};
|
};
|
||||||
} else {
|
|
||||||
alert('Error al crear contrato');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
modaldata = data.message;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
modaldata = "Fallo al hacer la request";
|
modaldata = "Fallo al hacer la request";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,54 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
namespace Modelo;
|
namespace Modelo;
|
||||||
public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
||||||
|
|
||||||
|
public bool GenerarCanones(long id = 0, long dni=0){
|
||||||
|
if (id == 0) return false;
|
||||||
|
var con = Context;
|
||||||
|
|
||||||
|
var cont = con.Contratos.Include(x=>x.IdpropiedadNavigation).FirstOrDefault(x=>x.Id == id && x.Cancelado == 0 && x.Habilitado == 0);
|
||||||
|
if (cont == null) return false;
|
||||||
|
|
||||||
|
cont.Habilitado = 1;
|
||||||
|
cont.Fechainicio = DateTime.Now;
|
||||||
|
var fecha = cont.Fechainicio;
|
||||||
|
cont.IdpropiedadNavigation.Monto = cont.Monto;
|
||||||
|
if (cont.MesesDurationContrato < cont.MesesHastaAumento)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < cont.MesesDurationContrato; i++)
|
||||||
|
{
|
||||||
|
Canon can = new Canon
|
||||||
|
{
|
||||||
|
Fecha = fecha.AddMonths(i),
|
||||||
|
Monto = cont.IdpropiedadNavigation.Monto,
|
||||||
|
Pagado = 0,
|
||||||
|
};
|
||||||
|
can.Id = (con.Canons.Any() ? con.Canons.Count() : 0) + 1 + i;
|
||||||
|
|
||||||
|
|
||||||
|
con.Canons.Add(can);
|
||||||
|
cont.Idcanons.Add(can);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < cont.MesesHastaAumento; i++)
|
||||||
|
{
|
||||||
|
Canon can = new Canon
|
||||||
|
{
|
||||||
|
Fecha = fecha.AddMonths(i),
|
||||||
|
Monto = cont.IdpropiedadNavigation.Monto,
|
||||||
|
Pagado = 0,
|
||||||
|
};
|
||||||
|
can.Id = (con.Canons.Any() ? con.Canons.Count() : 0) + 1 + i;
|
||||||
|
|
||||||
|
|
||||||
|
con.Canons.Add(can);
|
||||||
|
cont.Idcanons.Add(can);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// GenerarLog(con, dni, "Creacion de Canones");
|
||||||
|
return Guardar(con);
|
||||||
|
}
|
||||||
|
|
||||||
public bool AdminCargaContrato(Contrato? cont, long dni){
|
public bool AdminCargaContrato(Contrato? cont, long dni){
|
||||||
if (cont == null) return false;
|
if (cont == null) return false;
|
||||||
@@ -13,6 +61,10 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
|||||||
|
|
||||||
cont.Id = (con.Contratos.Any() ? con.Contratos.Max(x => x.Id) : 0) + 1;
|
cont.Id = (con.Contratos.Any() ? con.Contratos.Max(x => x.Id) : 0) + 1;
|
||||||
|
|
||||||
|
foreach(Garante g in cont.Idgarantes){
|
||||||
|
g.Id = (con.Garantes.Any()?con.Garantes.Max(x=>x.Id): 0) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (cont.IdventaNavigation != null){
|
if (cont.IdventaNavigation != null){
|
||||||
cont.IdventaNavigation.Id = (con.Ventas.Any()?con.Ventas.Count():0)+1;
|
cont.IdventaNavigation.Id = (con.Ventas.Any()?con.Ventas.Count():0)+1;
|
||||||
con.Ventas.Add(cont.IdventaNavigation);
|
con.Ventas.Add(cont.IdventaNavigation);
|
||||||
@@ -125,13 +177,15 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
|
|||||||
return contr;
|
return contr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AddUrl(long id, string nuevoNombreArchivo, long dni) {
|
public bool AddUrl(long id, string nuevoNombreArchivo, long dni =0) {
|
||||||
var con = Context;
|
var con = Context;
|
||||||
Contrato? contrato = con.Contratos
|
Contrato? contrato = con.Contratos
|
||||||
.FirstOrDefault(x=>x.Id == id);
|
.FirstOrDefault(x=>x.Id == id);
|
||||||
if (contrato == null) return false;
|
if (contrato == null) return false;
|
||||||
contrato.UrlContrato = nuevoNombreArchivo;
|
contrato.UrlContrato = nuevoNombreArchivo;
|
||||||
GenerarLog(con, dni, $"Añadido contrato");
|
if (dni != 0 ){
|
||||||
|
GenerarLog(con, dni, $"Añadido contrato");
|
||||||
|
}
|
||||||
return Guardar(con);
|
return Guardar(con);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user