falta testear

This commit is contained in:
2025-01-13 01:08:02 -03:00
parent db7c66e15b
commit 69b83c8380
8 changed files with 208 additions and 17 deletions

View File

@@ -275,7 +275,7 @@ public class ContratoController: ControllerBase {
}
[HttpGet("api/contrato/getdocumento")]
public async Task<IActionResult> ObtenerContrato([FromHeader(Name = "Auth")]string Auth, [FromQuery]long idcontrato) {
public IActionResult ObtenerContrato([FromHeader(Name = "Auth")]string Auth, [FromQuery]long idcontrato) {
if (String.IsNullOrWhiteSpace(Auth)) return BadRequest("");
var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino");
if (validacion1 == false) return Unauthorized();
@@ -291,23 +291,23 @@ public class ContratoController: ControllerBase {
string nuevoNombreArchivo = $"id:{contr.Id}-inq:{contr.Dniinquilino}-propi:{contr.Dnipropietario}-idprop:{contr.Idpropiedad}.pdf";
try{
using( var memstream = new MemoryStream()){
var memstream = new MemoryStream();
var goa = new GetObjectArgs()
.WithBucket("alquilafacil")
.WithObject(nuevoNombreArchivo)
.WithCallbackStream(async stream => {
.WithCallbackStream(stream => {
memstream.Position=0;
await stream.CopyToAsync(memstream);
stream.CopyTo(memstream);
});
await mc.GetObjectAsync(goa);
mc.GetObjectAsync(goa).Wait();
memstream.Position = 0;
if (memstream.Length == 0) return BadRequest(new { message = "El archivo está vacío" });
return File(memstream.ToArray(), "application/pdf", nuevoNombreArchivo);
}
return File(memstream, "application/pdf", nuevoNombreArchivo);
} catch (Exception e){
Console.Error.WriteLine(e);
return BadRequest(new { message = "Fallo al intentar obtener el archivo del almacenamiento o este no existe"});
@@ -316,12 +316,75 @@ public class ContratoController: ControllerBase {
}
[HttpPost("api/contratos/aceptarContrato")]
public IActionResult AceptarContrato([FromHeader(Name = "Auth")]string Auth){
public IActionResult AceptarContrato([FromHeader(Name = "Auth")]string Auth, [FromBody] AceptarContratoDto dto){
if (String.IsNullOrWhiteSpace(Auth)) return BadRequest();
var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino");
if (validacion1 == false) return Unauthorized();
if (dto.Idcontrato <= 0) return BadRequest(new {message = "La id no puede ser igual o menor a 0"});
Contrato? contr = RepositorioContratos.Singleton.ObtenerPreContratoPorId(dto.Idcontrato);
if (contr == null || contr.Dniinquilino == 0) return BadRequest(new { message = "No hay un precontrato por esa id"});
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
if (cli == null) return BadRequest(new { message = "No hay un cliente por ese token"});
if (cli.Dni != contr.Dniinquilino) return BadRequest(new { message = "El token no corresponde con el del inquilino"});
bool ret = RepositorioContratos.Singleton.AceptarContrato(dto.Idcontrato);
if (ret == false) return BadRequest(new { message ="fallo al aceptar el contrato"});
RepositorioNotificaciones.Singleton.MarcarComoLeido(cli.Dni, dto.Fecha);
var noti = new NotificacioneBuilder()
.SetDniremitente(cli.Dni)
.SetIdpropiedad(contr.Idpropiedad??0)
.SetDnicliente(contr.Dnipropietario??0)
.SetAccion("Aceptado Contrato")
.SetMensaje($"Se inicio el alquiler")
.SetFecha(DateTime.Now)
.SetLeido(false)
.Build();
ret = RepositorioNotificaciones.Singleton.AltaNotificacion(noti);
return ret ?
Ok(new { message = "Se acepto el contrato y se crearon los Canons a ser pagados"}) :
BadRequest(new { message = "No se pudo aceptar el contrato"});
}
[HttpPut("api/contratos/rechazarPreContrato")]
public IActionResult CancelarContrato([FromHeader(Name = "Auth")]string Auth, [FromBody] RechazarPreContrato dto ) {
if (String.IsNullOrWhiteSpace(Auth)) return BadRequest();
var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Inquilino");
if (validacion1 == false) return Unauthorized();
return Ok();
if (dto.Idcontrato <= 0) return BadRequest(new {message = "La id no puede ser igual o menor a 0"});
Contrato? contr = RepositorioContratos.Singleton.ObtenerPreContratoPorId(dto.Idcontrato);
if (contr == null || contr.Dniinquilino == 0) return BadRequest(new { message = "No hay un precontrato por esa id"});
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
if (cli == null) return BadRequest(new { message = "No hay un cliente por ese token"});
if (cli.Dni != contr.Dniinquilino) return BadRequest(new { message = "El token no corresponde con el del inquilino"});
var ret = RepositorioContratos.Singleton.CancelarPrecontrato(dto.Idcontrato);
if (ret == false) return BadRequest(new {message = "Fallo al intentar cancelar el precontrato"});
RepositorioNotificaciones.Singleton.MarcarComoLeido(cli.Dni, dto.Fecha);
var noti = new NotificacioneBuilder()
.SetDniremitente(cli.Dni)
.SetIdpropiedad(contr.Idpropiedad??0)
.SetDnicliente(contr.Dnipropietario??0)
.SetAccion("Rechazo Contrato")
.SetMensaje($"Se cancelo el proceso para alquilar de: {cli.Nombre}")
.SetFecha(DateTime.Now)
.SetLeido(false)
.Build();
ret = RepositorioNotificaciones.Singleton.AltaNotificacion(noti);
return ret?
Ok(new { message = "Se cancelo el proceso para iniciar el alquiler"}):
BadRequest(new { message = "No se pudo cancelar"});
}
private async Task<bool> subirContrato(IFormFile f, string flname) {

View File

@@ -2,6 +2,7 @@
using System.Text.Json;
using Minio;
using AlquilaFacil.Config;
using Microsoft.AspNetCore.Http.Features;
var builder = WebApplication.CreateBuilder(args);
@@ -19,6 +20,11 @@ builder.Services.AddMinio(options => options
.WithSSL(false)
.Build());
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 50 * 1024 * 1024; // 50 MB
});
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowSvelteApp",

4
Aspnet/settings.json Normal file
View File

@@ -0,0 +1,4 @@
{
"usr":"aVO9C3PqeK1hiPCyqZCj",
"scrt":"szj58kceWG3GcRZ8P1QCQiv5tSjMI7iD5zfjneTT"
}

View File

@@ -0,0 +1,5 @@
namespace Entidades.Dto;
public class AceptarContratoDto {
public long Idcontrato { get; set; }
public DateTime Fecha { get; set; }
}

View File

@@ -0,0 +1,5 @@
namespace Entidades.Dto;
public class RechazarPreContrato {
public long Idcontrato { get; set; }
public DateTime Fecha { get; set; }
}

View File

@@ -4,8 +4,8 @@
let {getContrato, onConfirm, onCancel, onClose, men
} : {
getContrato:(idcontrato:number)=>void,
onConfirm:()=>void,
onCancel:()=>void,
onConfirm:(idcontrato:number)=>void,
onCancel:(idcontrato:number)=>void,
onClose:()=>void,
men: MensajeDto
} = $props();
@@ -21,13 +21,15 @@
function confirmar() {
if (leiContrato) {
onConfirm();
let idcontrato = Number(men.mensaje.split(" ").reverse()[0]);
onConfirm(idcontrato);
}
}
function rechazar() {
if (leiContrato) {
onCancel();
let idcontrato = Number(men.mensaje.split(" ").reverse()[0]);
onCancel(idcontrato);
}
}
</script>

View File

@@ -12,6 +12,7 @@
import { self } from "svelte/legacy";
import ModalVeryAceptarContrato from "../Componentes/ModalVeryAceptarContrato.svelte";
import { getRequest } from "@sveltejs/kit/node";
import { json } from "@sveltejs/kit";
const token = sessionStorage.getItem("token");
let mensajes: MensajeDto[] = $state([]);
@@ -320,7 +321,7 @@
return;
}
let blob = await Blob(responce.body());
let blob = await responce.blob();
const blobUrl = URL.createObjectURL(blob);
window.open(blobUrl, '_blank');
setTimeout(() => URL.revokeObjectURL(blobUrl), 100000);
@@ -328,7 +329,75 @@
modaldata = "Fallo al intentar conectarse al servidor";
}
}
async function handlerechazarcontrato(idcontrato:number) {
if (idcontrato<=0){
modaldata="La idcontrato da 0 o menos comunicate con el administrador";
return;
}
try {
let rq = {
idcontrato:idcontrato,
fecha:Selmens.fecha,
}
const responce = await fetch($urlG+"/api/contratos/aceptarContrato", {
method: "POST",
headers: {
"Auth": String(token),
},
body: JSON.stringify(rq),
});
if (responce.ok){
let data = await responce.json();
modaldata = data.message;
if (mostrarleidos) {
Leidos();
} else {
SinLeer();
}
return;
}
let data = await responce.json();
modaldata = data.message;
return;
} catch {
modaldata = "Fallo la request";
return;
}
}
async function handleAceptarContrato(idcontrato:number) {
if (idcontrato<=0){
modaldata="La idcontrato da 0 o menos comunicate con el administrador";
return;
}
try {
const responce = await fetch($urlG+"/api/contratos/rechazarPreContrato?idcontrato="+idcontrato, {
method: "PUT",
headers: {
"Auth": String(token),
}
});
if (responce.ok){
let data = await responce.json();
modaldata = data.message;
if (mostrarleidos) {
Leidos();
} else {
SinLeer();
}
return;
}
let data = await responce.json();
modaldata = data.message;
return;
} catch {
modaldata = "Fallo la request";
return;
}
}
</script>
<NavBarAutocompletable/>
@@ -344,7 +413,7 @@
{:else if Selmens.accion == "Check y Contrato"}
<ModalCheckYContrato {garantes} men={Selmens} onCancel={handleCancelPrecontrato} onClose={() => (Selmens.accion = "")} onConfirm={handleEnviarmensaje4}/>
{:else if Selmens.accion == "Aceptar Contrato"}
<ModalVeryAceptarContrato onClose={() => (Selmens.accion = "")} onConfirm={()=> ""} onCancel={()=>""} getContrato={ObtenerContrato} men={Selmens}/>
<ModalVeryAceptarContrato onClose={() => (Selmens.accion = "")} onConfirm={handleAceptarContrato} onCancel={handleCancelPrecontrato} getContrato={ObtenerContrato} men={Selmens}/>
{/if}
<div class="container">

View File

@@ -81,8 +81,9 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
x.Habilitado == 0 &&
x.Cancelado == 0);
if (contr == null) return false;
if (contr == null || contr.IdpropiedadNavigation == null) return false;
contr.Cancelado = 1;
contr.IdpropiedadNavigation.Idestado = 1;
return Guardar(con);
}
@@ -105,4 +106,40 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
contrato.UrlContrato = nuevoNombreArchivo;
return Guardar(con);
}
public bool AceptarContrato(long idcontrato) {
var con = Context;
Contrato? cont = con.Contratos
.Include(x=>x.Idcanons)
.Include(x=>x.Idpropiedad)
.FirstOrDefault(x=>x.Id ==idcontrato &&
x.Habilitado ==0 &&
x.Cancelado == 0);
if (cont == null || cont.IdpropiedadNavigation==null) return false;
cont.Habilitado = 1;
var fecha = cont.Fechainicio;
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.Max(x=>x.Id) :0)+1;
cont.Idcanons.Add(can);
}
return Guardar(con);
}
public bool CancelarPrecontrato(long idcontrato) {
var con = Context;
Contrato? cont = con.Contratos.Include(x=>x.Idpropiedad).FirstOrDefault(x=>x.Id ==idcontrato && x.Habilitado ==0);
if (cont == null|| cont.IdpropiedadNavigation==null) return false;
cont.Cancelado = 1;
cont.IdpropiedadNavigation.Idestado = 1;
return Guardar(con);
}
}