añadida informacion a la pantalla de añadirgarantes

This commit is contained in:
2025-07-25 03:12:40 -03:00
parent ff63497b61
commit b7b7b80072
6 changed files with 143 additions and 30 deletions

View File

@@ -401,6 +401,38 @@ public class ContratoController : ControllerBase
BadRequest(new { message = "No se pudo enviar la notificacion" });
}
[HttpGet("api/precontrato/preCargaGarantes/data")]
public IActionResult ObtenerDatosParaMostrarleAlInquilinoPreCargaGarantes([FromHeader(Name="Auth")]string Auth, int propiedadId){
if (propiedadId<=0) return BadRequest(new { message = "Numero de propiedad inexistente"});
var cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
if (cli == null) return BadRequest(new { message = "No hay cliente por ese token" });
Contrato? contrato = RepositorioContratos.Singleton.ObtenerPreContratoPorIdDePropiedadyCliente(cli, propiedadId);
if (contrato == null) return BadRequest(new {message = "no se pudo encontrar los datos del precontrato"});
PreContratoDataDto d = new PreContratoDataDto
{
TieneOpcionDeVenta = contrato.Tieneopcionventa == 1,
MontoOpcionDeVenta = contrato.Tieneopcionventa == 1 && contrato.IdventaNavigation != null
? contrato.IdventaNavigation.Monto
: null,
MonedaOpcionDeVenta = contrato.Tieneopcionventa == 1
&& contrato.IdventaNavigation != null
&& contrato.IdventaNavigation.IddivisaNavigation != null
? contrato.IdventaNavigation.IddivisaNavigation.Signo
: null,
DuracionEnMeses = contrato.MesesDurationContrato,
FrecuenciaAumentoEnMeses = contrato.MesesHastaAumento
};
return Ok(d);
}
[HttpPut("api/contratos/addGarantes")]
public IActionResult AddGarantes([FromHeader(Name = "Auth")] string Auth, AltaGarantesDto dto)
{

View File

@@ -0,0 +1,7 @@
public class PreContratoDataDto{
public bool TieneOpcionDeVenta { get; set; }
public decimal? MontoOpcionDeVenta { get; set; }
public string? MonedaOpcionDeVenta { get; set; }
public int DuracionEnMeses { get; set; }
public int? FrecuenciaAumentoEnMeses { get; set; }
}

View File

@@ -1,10 +1,11 @@
<script lang="ts">
import type { GaranteDto } from "../types";
import type { GaranteDto, PreContratoData } from "../types";
let { onClose, onSubmit, maxGarantes }: {
let { onClose, onSubmit, maxGarantes, datosprecontrato }: {
onClose: () => void,
onSubmit: (garantes: GaranteDto[]) => void,
maxGarantes: number
maxGarantes: number,
datosprecontrato: PreContratoData,
} = $props();
let cantGarantes: number = $state(0);
@@ -21,6 +22,7 @@
Domiciliolaboral: ""
});
function handleSubmit(e: Event) {
e.preventDefault();
onSubmit(garantes);
@@ -48,6 +50,7 @@
}
</script>
<div class="modal fade show" tabindex="-1" role="dialog" style="display: block; background-color: rgba(0, 0, 0, 0.5);">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
@@ -55,6 +58,43 @@
<h5 class="modal-title">Nuevo Alquiler - Garantes</h5>
<button class="btn-close" onclick={onClose} aria-label="Close"></button>
</div>
<div class="card">
<div class="card-body">
<h5>Detalles del Precontrato</h5>
<hr />
<!-- Opción de Venta -->
<div class="mb-3">
<p class="form-label"><strong>Opción de Venta:</strong></p>
<div>
{#if datosprecontrato.tieneOpcionDeVenta}
<span class="badge bg-success" id="tieneOpcionDeVenta"></span>
{:else}
<span class="badge bg-secondary" id="noTieneOpcionDeVenta">No</span>
{/if}
</div>
</div>
{#if datosprecontrato.tieneOpcionDeVenta}
<!-- Monto y Moneda de Opción de Venta (visible solo si hay opción) -->
<div class="mb-3" id="opcionVentaDetalles">
<p class="form-label"><strong>Monto de Opción de Venta:</strong></p>
<p class="form-control-plaintext" id="montoOpcionDeVenta">{datosprecontrato.montoOpcionDeVenta} {datosprecontrato.monedaOpcionDeVenta}</p>
</div>
{/if}
<!-- Duración del Contrato -->
<div class="mb-3">
<label class="form-label"><strong>Duración del Contrato:</strong></label>
<p class="form-control-plaintext" id="duracionEnMeses">{datosprecontrato.duracionEnMeses} Meses</p>
</div>
<!-- Frecuencia de Aumento -->
<div class="mb-3">
<label class="form-label"><strong>Frecuencia de Aumento:</strong></label>
<p class="form-control-plaintext" id="frecuenciaAumentoEnMeses">Cada {datosprecontrato.frecuenciaAumentoEnMeses} meses</p>
</div>
</div>
</div>
<form onsubmit={handleSubmit}>
<div class="modal-body">
<div class="mb-3">
@@ -98,15 +138,8 @@
<input type="text" class="form-control" bind:value={newGarante.Domiciliolaboral} required />
</div>
<div class="d-flex justify-content-between">
<button
class="btn btn-secondary"
type="button"
onclick={() => (showAddForm = false)}
>
Cancelar
</button>
<button class="btn btn-primary" type="button" onclick={addGarante}>
Confirmar
<button class="btn btn-success" type="button" onclick={addGarante}>
Añadir
</button>
</div>
</div>

View File

@@ -1,7 +1,7 @@
<script lang="ts">
import { onMount } from "svelte";
import NavBarAutocompletable from "../Componentes/NavBarAutocompletable.svelte";
import type { GaranteDto, MensajeDto } from "../types";
import type { GaranteDto, MensajeDto, PreContratoData } from "../types";
import ModalEstatico from "../Componentes/ModalEstatico.svelte";
import { urlG } from "../stores/urlStore";
import ModalConfirm from "../Componentes/ModalConfirm.svelte";
@@ -113,6 +113,7 @@
if (mensaje.accion === "Carge Garantes") {
Selmens = { ...mensaje };
setCantGarantes = Number(Selmens.mensaje.split(" ").reverse()[1]);
ObtenerDatosPreContrato();
return;
}
@@ -467,6 +468,28 @@
}
showConsultaCompra = false; Selmens.accion = "";
}
let datosprecontrato: PreContratoData = $state({});
async function ObtenerDatosPreContrato(){
try {
const req = await fetch($urlG + "/api/precontrato/preCargaGarantes/data?propiedadId="+Selmens.propiedad, {
method: 'GET',
headers: {
"Auth": token || "",
}
});
const data = await req.json();
if (req.ok){
datosprecontrato = data;
return;
}
modaldata = data.message;
} catch {
modaldata = "Fallo al obtener los datos del precontrato";
}
}
</script>
<NavBarAutocompletable/>
@@ -478,7 +501,7 @@
{#if Selmens.accion == "Nuevo Alquiler" }
<ModalPrecontrato onClose={() => (Selmens.accion = "")} onSubmit={handleEnviarmensaje2} />
{:else if Selmens.accion == "Carge Garantes"}
<ModalAddGarantes maxGarantes={setCantGarantes} onClose={() => (Selmens.accion = "")} onSubmit={handleEnviarmensaje3}/>
<ModalAddGarantes maxGarantes={setCantGarantes} onClose={() => (Selmens.accion = "")} onSubmit={handleEnviarmensaje3} {datosprecontrato}/>
{:else if Selmens.accion == "Check y Contrato"}
<ModalCheckYContrato {garantes} men={Selmens} onCancel={handleCancelPrecontrato} onClose={() => (Selmens.accion = "")} onConfirm={handleEnviarmensaje4}/>
{:else if Selmens.accion == "Aceptar Contrato"}

34
Front/src/types.d.ts vendored
View File

@@ -244,20 +244,28 @@ export type ClientePanel = {
}
export type IngresosDto = {
mes:number,
realizados:number,
atrasados:number,
sin_realizar:number
mes:number,
realizados:number,
atrasados:number,
sin_realizar:number
}
export type CrearUsuario = {
Dni: number;
Nombre: string;
Apellido: string;
Domicilio: string;
Celular: string;
Email: string;
Contraseña: string;
EmailRecuperacion?: string | null;
grupos: number[];
Dni: number;
Nombre: string;
Apellido: string;
Domicilio: string;
Celular: string;
Email: string;
Contraseña: string;
EmailRecuperacion?: string | null;
grupos: number[];
}
export type PreContratoData = {
tieneOpcionDeVenta: boolean;
montoOpcionDeVenta?: number;
monedaOpcionDeVenta?: string;
duracionEnMeses: number;
frecuenciaAumentoEnMeses?: number | null;
};

View File

@@ -168,6 +168,16 @@ public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
return Guardar(con);
}
public Contrato? ObtenerPreContratoPorIdDePropiedadyCliente(Cliente cli, int propiedadid){
var con = Context;
var cont = con.Contratos.Where(x=>x.Habilitado == 0ul && x.Cancelado == 0ul)
.Include(x=>x.IdventaNavigation)
.ThenInclude(x=>x.IddivisaNavigation)
.FirstOrDefault(x => x.Dniinquilino == cli.Dni && x.Idpropiedad == propiedadid);
return cont;
}
public IQueryable<Contrato> ObtenerContratosDePropietario(long dni) {
var con = Context;
var l = con.Contratos