qa
This commit is contained in:
@@ -813,15 +813,25 @@ public class ContratoController : ControllerBase
|
|||||||
public IActionResult ObtenerGarantes([FromHeader(Name = "Auth")] string Auth, int idcontrato)
|
public IActionResult ObtenerGarantes([FromHeader(Name = "Auth")] string Auth, int idcontrato)
|
||||||
{
|
{
|
||||||
if (String.IsNullOrWhiteSpace(Auth)) return BadRequest();
|
if (String.IsNullOrWhiteSpace(Auth)) return BadRequest();
|
||||||
if (idcontrato <= 0) return BadRequest();
|
if (idcontrato <= 0) return BadRequest(new { message = "No puede ser un contrato id menor a 0" });
|
||||||
|
|
||||||
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
||||||
if (cli == null) return BadRequest();
|
if (cli == null) return BadRequest(new { message = "No existe el cliente para el token" });
|
||||||
|
|
||||||
Contrato? cont = RepositorioContratos.Singleton.ObtenerContratoPorId(idcontrato);
|
Contrato? cont = RepositorioContratos.Singleton.ObtenerContratoPorId(idcontrato);
|
||||||
if (cont == null) return BadRequest();
|
if (cont == null) return BadRequest(new { message = "El contrato no existe" });
|
||||||
|
|
||||||
if ((cont.Dniinquilino != cli.Dni && cont.Dnipropietario != cli.Dni) || !RepositorioPermisos.Singleton.CheckPermisos(Auth, 14)) return BadRequest();
|
bool esInquilinoOPropietario = (cont.Dniinquilino ?? 0) == cli.Dni || (cont.Dnipropietario ?? 0) == cli.Dni;
|
||||||
|
bool tienePermiso = RepositorioPermisos.Singleton.CheckPermisos(Auth, 14);
|
||||||
|
|
||||||
|
if (esInquilinoOPropietario == false)
|
||||||
|
{
|
||||||
|
return BadRequest(new { message = "No tiene acceso a este path" });
|
||||||
|
}
|
||||||
|
else if (tienePermiso == false && esInquilinoOPropietario == false)
|
||||||
|
{
|
||||||
|
return BadRequest(new { message = "No tiene acceso a este path de admin" });
|
||||||
|
}
|
||||||
|
|
||||||
var list = cont.Idgarantes;
|
var list = cont.Idgarantes;
|
||||||
List<GaranteDto> l = new();
|
List<GaranteDto> l = new();
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
using System.Configuration;
|
|
||||||
using System.Formats.Asn1;
|
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using AlquilaFacil.Builder;
|
using AlquilaFacil.Builder;
|
||||||
using AlquilaFacil.Config;
|
using AlquilaFacil.Config;
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
let selgru: GrupoDto = $state({
|
let selgru: GrupoDto = $state({
|
||||||
gruposIncluidos: [],
|
gruposIncluidos: [],
|
||||||
idgrupo: 0,
|
idgrupo: 0,
|
||||||
|
habilitado: false,
|
||||||
nombre: "",
|
nombre: "",
|
||||||
permisos: [],
|
permisos: [],
|
||||||
});
|
});
|
||||||
@@ -153,7 +154,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<BotonEsquina handleclick={() => (showmodaladd = true)} />
|
|
||||||
{#if showmodaladd}
|
{#if showmodaladd}
|
||||||
<ModalAadirGrupo
|
<ModalAadirGrupo
|
||||||
onClose={() => (showmodaladd = false)}
|
onClose={() => (showmodaladd = false)}
|
||||||
@@ -242,5 +242,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
|
<BotonEsquina handleclick={() => (showmodaladd = true)} />
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,7 +3,15 @@
|
|||||||
import { onMount } from "svelte";
|
import { onMount } from "svelte";
|
||||||
import ModalEstatico from "../Componentes/ModalEstatico.svelte";
|
import ModalEstatico from "../Componentes/ModalEstatico.svelte";
|
||||||
import { urlG } from "../stores/urlStore";
|
import { urlG } from "../stores/urlStore";
|
||||||
import type { AltaDefectoDto, CanonDto, ContratoDto, ContratoPropiedadDto, DefectoDto, GaranteDto2, OpcionVentaDto } from "../types";
|
import type {
|
||||||
|
AltaDefectoDto,
|
||||||
|
CanonDto,
|
||||||
|
ContratoDto,
|
||||||
|
ContratoPropiedadDto,
|
||||||
|
DefectoDto,
|
||||||
|
GaranteDto2,
|
||||||
|
OpcionVentaDto,
|
||||||
|
} from "../types";
|
||||||
import ModalPedirDoc from "../Componentes/ModalPedirDoc.svelte";
|
import ModalPedirDoc from "../Componentes/ModalPedirDoc.svelte";
|
||||||
import FormAltaDefecto from "../Componentes/FormAltaDefecto.svelte";
|
import FormAltaDefecto from "../Componentes/FormAltaDefecto.svelte";
|
||||||
import { navigate } from "svelte-routing";
|
import { navigate } from "svelte-routing";
|
||||||
@@ -31,7 +39,13 @@
|
|||||||
let defectos: DefectoDto[] = $state([]);
|
let defectos: DefectoDto[] = $state([]);
|
||||||
|
|
||||||
let TieneOpcionVenta: boolean = $state(false);
|
let TieneOpcionVenta: boolean = $state(false);
|
||||||
let dtoVenta:OpcionVentaDto =$state({divisa:"", id:0, monto:0, enOrden:false, fueEjercido:false});
|
let dtoVenta: OpcionVentaDto = $state({
|
||||||
|
divisa: "",
|
||||||
|
id: 0,
|
||||||
|
monto: 0,
|
||||||
|
enOrden: false,
|
||||||
|
fueEjercido: false,
|
||||||
|
});
|
||||||
|
|
||||||
let modaldata: string = $state("");
|
let modaldata: string = $state("");
|
||||||
let contratoid: string = $state("");
|
let contratoid: string = $state("");
|
||||||
@@ -44,12 +58,17 @@
|
|||||||
|
|
||||||
async function opcionVenta() {
|
async function opcionVenta() {
|
||||||
try {
|
try {
|
||||||
const r = await fetch($urlG+"/api/contrato/tieneopcionventa?idcontrato="+contratoid, {
|
const r = await fetch(
|
||||||
|
$urlG +
|
||||||
|
"/api/contrato/tieneopcionventa?idcontrato=" +
|
||||||
|
contratoid,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
|
);
|
||||||
if (r.ok) {
|
if (r.ok) {
|
||||||
let data = await r.json();
|
let data = await r.json();
|
||||||
TieneOpcionVenta = data.message;
|
TieneOpcionVenta = data.message;
|
||||||
@@ -68,16 +87,19 @@
|
|||||||
|
|
||||||
async function ObtenerOpcionVentaDto() {
|
async function ObtenerOpcionVentaDto() {
|
||||||
try {
|
try {
|
||||||
const r = await fetch($urlG+"/api/opcionventa?idcontrato="+contratoid, {
|
const r = await fetch(
|
||||||
|
$urlG + "/api/opcionventa?idcontrato=" + contratoid,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
|
);
|
||||||
if (r.ok) {
|
if (r.ok) {
|
||||||
let data = await r.json();
|
let data = await r.json();
|
||||||
dtoVenta = data;
|
dtoVenta = data;
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
let data = await r.json();
|
let data = await r.json();
|
||||||
modaldata = data.message;
|
modaldata = data.message;
|
||||||
@@ -88,31 +110,49 @@
|
|||||||
|
|
||||||
async function obtenerDatosACargar() {
|
async function obtenerDatosACargar() {
|
||||||
try {
|
try {
|
||||||
const respPropiedad = fetch($urlG+"/api/contrato/inquilino?id="+contratoid, {
|
const respPropiedad = fetch(
|
||||||
|
$urlG + "/api/contrato/inquilino?id=" + contratoid,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
const respgarantes = fetch($urlG+"/api/contratos/garantes?idcontrato="+contratoid, {
|
);
|
||||||
|
const respgarantes = fetch(
|
||||||
|
$urlG + "/api/contratos/garantes?idcontrato=" + contratoid,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
}
|
"Content-Type": "application/json",
|
||||||
});
|
},
|
||||||
const respCanons = fetch($urlG+"/api/contratos/canon?id="+contratoid, {
|
},
|
||||||
|
);
|
||||||
|
const respCanons = fetch(
|
||||||
|
$urlG + "/api/contratos/canon?id=" + contratoid,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
const respoDefect = fetch($urlG+"/api/defectos?Idcontrato="+contratoid, {
|
);
|
||||||
|
const respoDefect = fetch(
|
||||||
|
$urlG + "/api/defectos?Idcontrato=" + contratoid,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": token,
|
Auth: token,
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
const [p, g, c, d] = await Promise.all([respPropiedad, respgarantes, respCanons, respoDefect]);
|
);
|
||||||
|
const [p, g, c, d] = await Promise.all([
|
||||||
|
respPropiedad,
|
||||||
|
respgarantes,
|
||||||
|
respCanons,
|
||||||
|
respoDefect,
|
||||||
|
]);
|
||||||
|
|
||||||
const datosPropiedad = await p.json();
|
const datosPropiedad = await p.json();
|
||||||
const datosGarantes = await g.json();
|
const datosGarantes = await g.json();
|
||||||
@@ -123,7 +163,6 @@
|
|||||||
garantes = datosGarantes;
|
garantes = datosGarantes;
|
||||||
canons = datosCanons;
|
canons = datosCanons;
|
||||||
defectos = datosDefect;
|
defectos = datosDefect;
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
modaldata = "Fallo hacer las request";
|
modaldata = "Fallo hacer las request";
|
||||||
}
|
}
|
||||||
@@ -137,12 +176,15 @@
|
|||||||
|
|
||||||
async function refreshCanon() {
|
async function refreshCanon() {
|
||||||
try {
|
try {
|
||||||
const ret = await fetch($urlG+"/api/contratos/canon?id="+contratoid, {
|
const ret = await fetch(
|
||||||
|
$urlG + "/api/contratos/canon?id=" + contratoid,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
|
);
|
||||||
if (!ret.ok) {
|
if (!ret.ok) {
|
||||||
let data = await ret.json();
|
let data = await ret.json();
|
||||||
modaldata = data.message;
|
modaldata = data.message;
|
||||||
@@ -162,12 +204,15 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const resp = await fetch ($urlG+"/api/contrato/DocumentoFinal?idcontrato="+prop.id, {
|
const resp = await fetch(
|
||||||
|
$urlG + "/api/contrato/DocumentoFinal?idcontrato=" + prop.id,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
|
);
|
||||||
|
|
||||||
if (!resp.ok) {
|
if (!resp.ok) {
|
||||||
let blob = await resp.json();
|
let blob = await resp.json();
|
||||||
@@ -177,7 +222,7 @@
|
|||||||
|
|
||||||
let blob = await resp.blob();
|
let blob = await resp.blob();
|
||||||
const blobUrl = URL.createObjectURL(blob);
|
const blobUrl = URL.createObjectURL(blob);
|
||||||
window.open(blobUrl, '_blank');
|
window.open(blobUrl, "_blank");
|
||||||
setTimeout(() => URL.revokeObjectURL(blobUrl), 100000);
|
setTimeout(() => URL.revokeObjectURL(blobUrl), 100000);
|
||||||
} catch {
|
} catch {
|
||||||
modaldata = "fallo intentar hacer la request";
|
modaldata = "fallo intentar hacer la request";
|
||||||
@@ -189,7 +234,7 @@
|
|||||||
const ret = await fetch($urlG + "/api/contratos/realizarPago", {
|
const ret = await fetch($urlG + "/api/contratos/realizarPago", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
body: JSON.stringify({ idcontrato: contratoid, fecha: mes }),
|
body: JSON.stringify({ idcontrato: contratoid, fecha: mes }),
|
||||||
@@ -197,7 +242,7 @@
|
|||||||
let data = await ret.json();
|
let data = await ret.json();
|
||||||
modaldata = data.message;
|
modaldata = data.message;
|
||||||
if (ret.ok) {
|
if (ret.ok) {
|
||||||
refreshCanon()
|
refreshCanon();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
@@ -205,7 +250,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function generarTiket(mod: any) {
|
function generarTiket(mod: any) {
|
||||||
selMod = mod;
|
selMod = mod;
|
||||||
showmodal = true;
|
showmodal = true;
|
||||||
@@ -213,15 +257,21 @@
|
|||||||
|
|
||||||
async function pedirdocumento(op: boolean) {
|
async function pedirdocumento(op: boolean) {
|
||||||
try {
|
try {
|
||||||
const ret = await fetch($urlG+"/api/contrato/GenerarRecibo?html="+op, {
|
const ret = await fetch(
|
||||||
|
$urlG + "/api/contrato/GenerarRecibo?html=" + op,
|
||||||
|
{
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
|
|
||||||
body: JSON.stringify({fecha: selMod.mes, idcontrato: contratoid})
|
body: JSON.stringify({
|
||||||
});
|
fecha: selMod.mes,
|
||||||
|
idcontrato: contratoid,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
);
|
||||||
if (!ret.ok) {
|
if (!ret.ok) {
|
||||||
let blob = await ret.json();
|
let blob = await ret.json();
|
||||||
modaldata = blob.message;
|
modaldata = blob.message;
|
||||||
@@ -229,7 +279,7 @@
|
|||||||
}
|
}
|
||||||
let blob = await ret.blob();
|
let blob = await ret.blob();
|
||||||
const blobUrl = URL.createObjectURL(blob);
|
const blobUrl = URL.createObjectURL(blob);
|
||||||
window.open(blobUrl, '_blank');
|
window.open(blobUrl, "_blank");
|
||||||
setTimeout(() => URL.revokeObjectURL(blobUrl), 100000);
|
setTimeout(() => URL.revokeObjectURL(blobUrl), 100000);
|
||||||
} catch {
|
} catch {
|
||||||
modaldata = "Fallo al intentar hacer la request";
|
modaldata = "Fallo al intentar hacer la request";
|
||||||
@@ -242,7 +292,7 @@
|
|||||||
const r = await fetch($urlG + "/api/defecto", {
|
const r = await fetch($urlG + "/api/defecto", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": String(token),
|
Auth: String(token),
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
@@ -259,28 +309,35 @@
|
|||||||
|
|
||||||
async function refreshDefectos() {
|
async function refreshDefectos() {
|
||||||
try {
|
try {
|
||||||
const r = await fetch($urlG+"/api/defectos?Idcontrato="+contratoid, {
|
const r = await fetch(
|
||||||
|
$urlG + "/api/defectos?Idcontrato=" + contratoid,
|
||||||
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": token,
|
Auth: token,
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
|
);
|
||||||
let rr = await r.json();
|
let rr = await r.json();
|
||||||
defectos = rr;
|
defectos = rr;
|
||||||
} catch {
|
} catch {
|
||||||
modaldata = "No se pudo pedir la lista de Defectos";
|
modaldata = "No se pudo pedir la lista de Defectos";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function ejercerOpcionVenta() {
|
async function ejercerOpcionVenta() {
|
||||||
try {
|
try {
|
||||||
const r = await fetch($urlG+"/api/ventas/ejercerOpcionVenta?idcontrato="+contratoid, {
|
const r = await fetch(
|
||||||
|
$urlG +
|
||||||
|
"/api/ventas/ejercerOpcionVenta?idcontrato=" +
|
||||||
|
contratoid,
|
||||||
|
{
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
"Auth": token,
|
Auth: token,
|
||||||
}
|
},
|
||||||
});
|
},
|
||||||
|
);
|
||||||
let data = await r.json();
|
let data = await r.json();
|
||||||
modaldata = data.message;
|
modaldata = data.message;
|
||||||
if (r.ok) {
|
if (r.ok) {
|
||||||
@@ -300,7 +357,10 @@
|
|||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if showmodal}
|
{#if showmodal}
|
||||||
<ModalPedirDoc onClose={()=>showmodal=false} onSubmit={pedirdocumento} />
|
<ModalPedirDoc
|
||||||
|
onClose={() => (showmodal = false)}
|
||||||
|
onSubmit={pedirdocumento}
|
||||||
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="container-fluid mt-4 d-flex">
|
<div class="container-fluid mt-4 d-flex">
|
||||||
@@ -315,7 +375,10 @@
|
|||||||
<p><b>Habitaciones:</b> {prop.habitaciones}</p>
|
<p><b>Habitaciones:</b> {prop.habitaciones}</p>
|
||||||
<p><b>Piso:</b> {prop.piso}</p>
|
<p><b>Piso:</b> {prop.piso}</p>
|
||||||
<p><b>Letra:</b> {prop.letra}</p>
|
<p><b>Letra:</b> {prop.letra}</p>
|
||||||
<p><b>Fecha Inicio:</b> {String(prop.fechainicio).split("T")[0]}</p>
|
<p>
|
||||||
|
<b>Fecha Inicio:</b>
|
||||||
|
{String(prop.fechainicio).split("T")[0]}
|
||||||
|
</p>
|
||||||
<p><b>Estado:</b> {prop.estado}</p>
|
<p><b>Estado:</b> {prop.estado}</p>
|
||||||
<button class="btn btn-secondary" onclick={verContrato}>
|
<button class="btn btn-secondary" onclick={verContrato}>
|
||||||
Ver Contrato
|
Ver Contrato
|
||||||
@@ -404,16 +467,42 @@
|
|||||||
{canon.mesNum}/{prop.mesesDuracion}
|
{canon.mesNum}/{prop.mesesDuracion}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p><strong>Mes:</strong> {String(canon.mes).split("T")[0]}</p>
|
<p>
|
||||||
<p><strong>Monto:</strong> {canon.monto}</p>
|
<strong>Mes:</strong>
|
||||||
<p><strong>Divisa:</strong> {canon.divisa}</p>
|
{String(canon.mes).split(
|
||||||
<p><strong>Pago:</strong> {canon.pago ? "Sí" : "No"}</p>
|
"T",
|
||||||
|
)[0]}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>Monto:</strong>
|
||||||
|
{canon.monto}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>Divisa:</strong>
|
||||||
|
{canon.divisa}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>Pago:</strong>
|
||||||
|
{canon.pago ? "Sí" : "No"}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer d-flex justify-content-between">
|
<div
|
||||||
<button class="btn btn-primary btn-xs" disabled={canon.pago} onclick={()=>realizarpago(canon.mes)}>
|
class="card-footer d-flex justify-content-between"
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
class="btn btn-primary btn-xs"
|
||||||
|
disabled={canon.pago}
|
||||||
|
onclick={() =>
|
||||||
|
realizarpago(canon.mes)}
|
||||||
|
>
|
||||||
Pagar
|
Pagar
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-info btn-xs" disabled={!canon.pago} onclick={()=> generarTiket(canon)}>
|
<button
|
||||||
|
class="btn btn-info btn-xs"
|
||||||
|
disabled={!canon.pago}
|
||||||
|
onclick={() =>
|
||||||
|
generarTiket(canon)}
|
||||||
|
>
|
||||||
Generar Tiket
|
Generar Tiket
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -443,7 +532,6 @@
|
|||||||
aria-labelledby="ht"
|
aria-labelledby="ht"
|
||||||
data-bs-parent="#accordionExample"
|
data-bs-parent="#accordionExample"
|
||||||
>
|
>
|
||||||
|
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
{#if prop.estado != "Terminado"}
|
{#if prop.estado != "Terminado"}
|
||||||
<div class="card">
|
<div class="card">
|
||||||
@@ -451,13 +539,14 @@
|
|||||||
Notificar Defecto en Propiedad
|
Notificar Defecto en Propiedad
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<FormAltaDefecto onConfirm={cargarDefecto} idcontrato={prop.id} />
|
<FormAltaDefecto
|
||||||
|
onConfirm={cargarDefecto}
|
||||||
|
idcontrato={prop.id}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer">
|
<div class="card-footer"></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<br />
|
||||||
<br>
|
|
||||||
{/if}
|
{/if}
|
||||||
<table class="table table-hover table-striped">
|
<table class="table table-hover table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -472,7 +561,9 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{#if defectos.length == 0}
|
{#if defectos.length == 0}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="6">No hay defectos que mostrar</td>
|
<td colspan="6"
|
||||||
|
>No hay defectos que mostrar</td
|
||||||
|
>
|
||||||
</tr>
|
</tr>
|
||||||
{:else}
|
{:else}
|
||||||
{#each defectos as defecto}
|
{#each defectos as defecto}
|
||||||
@@ -491,7 +582,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{#if TieneOpcionVenta}
|
{#if TieneOpcionVenta}
|
||||||
|
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header" id="hq">
|
<h2 class="accordion-header" id="hq">
|
||||||
<button
|
<button
|
||||||
@@ -517,23 +607,42 @@
|
|||||||
Datos Opcion Venta
|
Datos Opcion Venta
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<b>Monto</b>: {dtoVenta.divisa} {dtoVenta.monto}.
|
<b>Monto</b>: {dtoVenta.divisa}
|
||||||
|
{dtoVenta.monto}.
|
||||||
|
|
||||||
<p class="mt-2 text-muted">
|
<p class="mt-2 text-muted">
|
||||||
Para poder ejercer la opcion de venta necesitas estar en el mismo mes que el ultimo pago y haber pagado todos los canones
|
Para poder ejercer la opcion de venta
|
||||||
|
necesitas estar en el mismo mes que el
|
||||||
|
ultimo pago y haber pagado todos los
|
||||||
|
canones
|
||||||
</p>
|
</p>
|
||||||
<div class="d-flex justify-content-between">
|
<div class="d-flex justify-content-between">
|
||||||
<button class="btn btn-primary" disabled={dtoVenta.enOrden==false || dtoVenta.fueEjercido == true} onclick={()=>ejercerOpcionVenta()}>
|
<button
|
||||||
|
class="btn btn-primary"
|
||||||
|
disabled={dtoVenta.enOrden ==
|
||||||
|
false ||
|
||||||
|
dtoVenta.fueEjercido == true}
|
||||||
|
onclick={() => ejercerOpcionVenta()}
|
||||||
|
>
|
||||||
Ejercer
|
Ejercer
|
||||||
</button>
|
</button>
|
||||||
{#if dtoVenta.fueEjercido}
|
{#if dtoVenta.fueEjercido}
|
||||||
<button class="btn btn-secondary" onclick={()=>navigate("/Ventas?idventa="+dtoVenta.id)}>
|
<button
|
||||||
|
class="btn btn-secondary"
|
||||||
|
onclick={() =>
|
||||||
|
navigate(
|
||||||
|
"/Ventas?idventa=" +
|
||||||
|
dtoVenta.id,
|
||||||
|
)}
|
||||||
|
>
|
||||||
Ir a la pagina de la Venta
|
Ir a la pagina de la Venta
|
||||||
</button>
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer text-center">IdOpcionVenta: {dtoVenta.id}</div>
|
<div class="card-footer text-center">
|
||||||
|
IdOpcionVenta: {dtoVenta.id}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user