diff --git a/Aspnet/Controllers/CargaContratoAdminController.cs b/Aspnet/Controllers/CargaContratoAdminController.cs index ee718ca..e899de6 100644 --- a/Aspnet/Controllers/CargaContratoAdminController.cs +++ b/Aspnet/Controllers/CargaContratoAdminController.cs @@ -58,37 +58,74 @@ public class CargarContratoAdminController: ControllerBase{ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 20); if (validacion1 == false) return Unauthorized(); - if (!Request.HasFormContentType) - { + if (!Request.HasFormContentType) { return BadRequest(new { message = "La solicitud debe contener datos de formulario (FormData)." }); } var formData = await Request.ReadFormAsync(); - if (formData == null) - { + if (formData == null) { 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.ContentType != "application/pdf") - { + if (archivoContrato.ContentType != "application/pdf") { return BadRequest(new { message = "El archivo debe ser un PDF." }); } - Contrato? cont; ActionResult? req; + Contrato? cont; IActionResult? req; (cont, req) = ParseContratoFromForm(formData); if (req != null && cont == null) return req; var ret = RepositorioContratos.Singleton.AdminCargaContrato(cont, cli.Dni); + if(ret == false) return BadRequest( new {message = "No se pudo cargar el contrato" }); - //WIP - //Falta Carga del archivo a minio - //Falta añadir la url al contrato - //Falta generar canones - //Falta mandar notificaciones + var inq = RepositorioUsuarios.Singleton.ObtenerClientePorDni(cont.Dniinquilino??0); + + cont = RepositorioContratos.Singleton.ObtenerContrato(inq.Email, cont.Idpropiedad ?? 0); + if (cont == null) return BadRequest(new { message = "No se pudo recuperar el contrato" }); + + + 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){ return (null, BadRequest(new { message = "No se cargaron los meses hasta el aumento" })); } + if (mesesDuration 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; + } + } } diff --git a/Aspnet/Controllers/UsuarioController.cs b/Aspnet/Controllers/UsuarioController.cs index 3c3e102..1df5a15 100644 --- a/Aspnet/Controllers/UsuarioController.cs +++ b/Aspnet/Controllers/UsuarioController.cs @@ -64,9 +64,9 @@ public class UsuarioController : ControllerBase } - public record setemail(string EmailRecuperacion); + public record SetEmail(string 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); 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" }); } - public record recuperarusuario(string Email, string EmailRecuperacion); + public record RecuperarUsuarioDto(string Email, string EmailRecuperacion); [HttpPost("/api/recuperarUsuario")] - public IActionResult RecuperarUsuario([FromBody] recuperarusuario mails) + public IActionResult RecuperarUsuario([FromBody] RecuperarUsuarioDto mails) { bool check = RepositorioUsuarios.Singleton.CheckEmailRecuperacion(mails.Email, mails.EmailRecuperacion); if (check == false) return BadRequest(new { message = "El email no corresponde al email de recuperacion" }); diff --git a/Front/src/paginas/CargarContratoAdmin.svelte b/Front/src/paginas/CargarContratoAdmin.svelte index 653df58..f483c79 100644 --- a/Front/src/paginas/CargarContratoAdmin.svelte +++ b/Front/src/paginas/CargarContratoAdmin.svelte @@ -160,15 +160,15 @@ } try { - const response = await fetch('/api/contratos', { + const response = await fetch($urlG + '/api/admin/contrato/carga', { method: 'POST', headers: { "Auth": token || "", }, body: formData }); + const data = await response.json(); if (response.ok) { - alert('Contrato creado exitosamente'); contrato = { id: 0, cantgarantemin: 0, @@ -180,11 +180,14 @@ mesesHastaAumento: 0, monto: 0, tieneopcionventa: false, - archivoContrato: null + archivoContrato: null, + divisaOpcionVenta: 0, + montoOpcionVenta: 0, + garantes: [] }; - } else { - alert('Error al crear contrato'); } + + modaldata = data.message; } catch (error) { modaldata = "Fallo al hacer la request"; } diff --git a/Modelo/RepositorioContratos.cs b/Modelo/RepositorioContratos.cs index e723275..e9b5da7 100644 --- a/Modelo/RepositorioContratos.cs +++ b/Modelo/RepositorioContratos.cs @@ -5,6 +5,54 @@ using Microsoft.EntityFrameworkCore; namespace Modelo; public class RepositorioContratos: RepositorioBase { + 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){ if (cont == null) return false; @@ -13,6 +61,10 @@ public class RepositorioContratos: RepositorioBase { 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){ cont.IdventaNavigation.Id = (con.Ventas.Any()?con.Ventas.Count():0)+1; con.Ventas.Add(cont.IdventaNavigation); @@ -125,13 +177,15 @@ public class RepositorioContratos: RepositorioBase { return contr; } - public bool AddUrl(long id, string nuevoNombreArchivo, long dni) { + public bool AddUrl(long id, string nuevoNombreArchivo, long dni =0) { var con = Context; Contrato? contrato = con.Contratos .FirstOrDefault(x=>x.Id == id); if (contrato == null) return false; contrato.UrlContrato = nuevoNombreArchivo; - GenerarLog(con, dni, $"Añadido contrato"); + if (dni != 0 ){ + GenerarLog(con, dni, $"Añadido contrato"); + } return Guardar(con); }