diff --git a/Aspnet/Controllers/AdminController.cs b/Aspnet/Controllers/AdminController.cs
new file mode 100644
index 0000000..1941782
--- /dev/null
+++ b/Aspnet/Controllers/AdminController.cs
@@ -0,0 +1,109 @@
+using Microsoft.AspNetCore.Mvc;
+using Modelo;
+using Entidades.Admin;
+using Entidades.Dto;
+using Entidades;
+namespace AlquilaFacil.Controllers;
+
+[ApiController]
+public class AdminController: ControllerBase
+{
+ [HttpGet("api/admin/clientes")]
+ public IActionResult GetClientes([FromHeader(Name ="Auth")]string Auth){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
+ if (validacion1 == false) return Unauthorized();
+
+ IEnumerablelist = RepositorioUsuarios.Singleton.GetClientes();
+ return Ok(list);
+ }
+
+ [HttpGet("api/admin/clientes/grupo")]
+ public IActionResult GetGruposByCliente([FromHeader(Name ="Auth")]string Auth, [FromQuery]long Dni){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
+ if (validacion1 == false) return Unauthorized();
+
+ if (Dni <= 0) return BadRequest(new {message = "No puede tener un dni con numero negativo o cero"});
+
+ IEnumerable list = RepositorioGrupos.Singleton.ObtenerGruposPorDni(Dni);
+ return Ok(list);
+ }
+ [HttpPatch("api/admin/cliente/addGrupo")]
+ public IActionResult AddGrupoACliente([FromHeader(Name = "Auth")]string Auth, [FromBody]EmailGrupo data){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
+ if (validacion1 == false) return Unauthorized();
+
+ if (data.email == "" || data.grupo == "") return BadRequest(new { message = "Faltan datos en la request" });
+
+ var ret = RepositorioUsuarios.Singleton.CheckGrupo(data.email, data.grupo);
+ if (ret) return BadRequest(new { message = $"El usuario ya pertenece al grupo {data.grupo}"});
+
+ var ret2 = RepositorioUsuarios.Singleton.AñadirClienteAGrupo(data.email, data.grupo);
+
+ return ret2 ? Ok(new {message = "Se Añadio al Grupo"}): BadRequest(new { message = "Fallo al añadirse al Grupo" });
+ }
+
+ [HttpPatch("api/admin/cliente/rmGrupo")]
+ public IActionResult RmGrupoACliente([FromHeader(Name = "Auth")]string Auth, [FromBody]EmailGrupo data){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
+ if (validacion1 == false) return Unauthorized();
+
+ if (data.email == "" || data.grupo == "") return BadRequest(new { message = "Faltan datos en la request" });
+
+ //una ward para que no me bloquee a mi mismo de tener acceso a admin
+ if (data.email == "celu@fedesrv.ddns.net" && data.grupo == "Admin") return BadRequest(new { message = "Si hago esto me estaria bloqueando la cuenta a mi mismo" });
+
+ var ret = RepositorioUsuarios.Singleton.CheckGrupo(data.email, data.grupo);
+ if (!ret) return BadRequest(new { message = $"El usuario no pertenece al grupo {data.grupo}"});
+
+ if (data.grupo == "Propietario") {
+ IQueryable ret3 = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(data.email);
+ if (ret3.Count() > 0){
+ bool ret4 = RepositorioPropiedades.Singleton.BajaPropiedades(data.email);
+ if (ret4 == false) return BadRequest(new { message = "No se pudo dar de baja las propiedades"});
+ }
+ }
+ if (data.grupo == "Inquilino") {
+ var ret5 = RepositorioContratos.Singleton.ObtenerContratosPorEmailInquilino(data.email);
+ if ( ret5 == null || ret5.Where(x=>x.Habilitado == 0).Count() > 0) return BadRequest(new { message = "Aun tenes alquileres pendientes o fallo al intentar obtener la lista de alquileres, no se puede dar de baja"});
+ }
+
+ var ret2 = RepositorioUsuarios.Singleton.EliminarClienteAGrupo(data.email, data.grupo);
+ return ret2 ? Ok(new {message = $"Se elimino del Grupo: {data.grupo}"}): BadRequest(new { message = "Fallo al añadirse al Grupo" });
+ }
+
+ [HttpDelete("api/admin/cliente")]
+ public IActionResult BajaCliente([FromHeader(Name ="Auth")]string Auth, long Dni){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
+ if (validacion1 == false) return Unauthorized();
+
+ if ( Dni <=0) return BadRequest(new {message = "No puede tener un Dni menor o igual a 0"});
+
+ Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorDni(Dni);
+
+ if (cli == null) return BadRequest(new {message = "No existe un cliente con ese numero de dni"});
+
+ bool esPropietario = RepositorioUsuarios.Singleton.CheckGrupo(cli.Email, "Propietario");
+ bool esInquilino = RepositorioUsuarios.Singleton.CheckGrupo(cli.Email, "Inquilino");
+
+ if (esPropietario) {
+ IQueryable ret3 = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(cli.Email);
+ if (ret3.Count() > 0){
+ bool ret4 = RepositorioPropiedades.Singleton.BajaPropiedades(cli.Email);
+ if (ret4 == false) return BadRequest(new { message = "No se pudo dar de baja las propiedades"});
+ }
+ }
+
+ if (esInquilino) {
+ var ret5 = RepositorioContratos.Singleton.ObtenerContratosPorEmailInquilino(cli.Email);
+ if ( ret5 == null || ret5.Where(x=>x.Habilitado == 0).Count() > 0) return BadRequest(new { message = "Aun tenes alquileres pendientes o fallo al intentar obtener la lista de alquileres, no se puede dar de baja"});
+ }
+ // lo da de baja si no tiene el grupo propietario y no tiene alquileres pendientes
+ var ret = RepositorioUsuarios.Singleton.BajaCliente(Dni);
+ return Ok(ret);
+ }
+}
\ No newline at end of file
diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs
index 9acfe43..0a7a5c2 100644
--- a/Aspnet/Controllers/PropiedadesController.cs
+++ b/Aspnet/Controllers/PropiedadesController.cs
@@ -11,6 +11,7 @@ public class PropiedadesController: ControllerBase {
public IActionResult ListarPropiedades([FromHeader(Name = "Auth")] string Auth) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12);
+ if (validacion1 == false) validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2);
if (validacion1 == false) return Unauthorized();
var ret = RepositorioPropiedades.Singleton.ListarPropiedades();
@@ -81,6 +82,7 @@ public class PropiedadesController: ControllerBase {
Ubicacion = propiedad.Ubicacion,
Letra = propiedad.Letra ?? null,
Piso = propiedad.Piso ?? null,
+ Monto = propiedad.Monto,
};
var ret = RepositorioPropiedades.Singleton.AñadirPropiedad(Prop);
@@ -113,6 +115,7 @@ public class PropiedadesController: ControllerBase {
Letra = propiedad.Letra ?? null,
Piso = propiedad.Piso ?? null,
IdServicios = servs,
+ Monto = propiedad.Monto
};
bool ret = RepositorioPropiedades.Singleton.PatchPropiedad(Prop);
@@ -193,8 +196,9 @@ public class PropiedadesController: ControllerBase {
if (prop.Idtipropiedad <= 0) ret += "No tiene un tipo de propiedad asociada\n";
- if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad";
+ if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n";
+ if (prop.Monto<=1) ret += "El monto tiene que ser como minimo mayor a 0";
return ret;
}
@@ -211,8 +215,9 @@ public class PropiedadesController: ControllerBase {
if (prop.tipo <= 0) ret += "No tiene un tipo de propiedad asociada\n";
- if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad";
-
+ if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n";
+
+ if (prop.Monto<=1) ret += "El monto tiene que ser como minimo mayor a 0";
return ret;
}
diff --git a/Entidades/Admin/EmailGrupo.cs b/Entidades/Admin/EmailGrupo.cs
new file mode 100644
index 0000000..3db517c
--- /dev/null
+++ b/Entidades/Admin/EmailGrupo.cs
@@ -0,0 +1,2 @@
+namespace Entidades.Admin;
+public record EmailGrupo(string email, string grupo);
\ No newline at end of file
diff --git a/Entidades/Admin/GrupoAdmin.cs b/Entidades/Admin/GrupoAdmin.cs
new file mode 100644
index 0000000..a25dd9c
--- /dev/null
+++ b/Entidades/Admin/GrupoAdmin.cs
@@ -0,0 +1,7 @@
+namespace Entidades.Admin;
+
+public class GrupoAdmin {
+ public int Id {get; set;} = 0;
+ public String Descripcion {get; set;} = "";
+ public List Permisos {get; set;} = new();
+}
\ No newline at end of file
diff --git a/Entidades/Admin/PermisosAdmin.cs b/Entidades/Admin/PermisosAdmin.cs
new file mode 100644
index 0000000..aba95e0
--- /dev/null
+++ b/Entidades/Admin/PermisosAdmin.cs
@@ -0,0 +1,6 @@
+namespace Entidades.Admin;
+
+public class PermisoAdmin {
+ public int Id {get; set;}
+ public String Descripcion {get; set;} = "";
+}
\ No newline at end of file
diff --git a/Entidades/Admin/UsuarioAdmin.cs b/Entidades/Admin/UsuarioAdmin.cs
new file mode 100644
index 0000000..6833961
--- /dev/null
+++ b/Entidades/Admin/UsuarioAdmin.cs
@@ -0,0 +1,8 @@
+namespace Entidades.Admin;
+
+public record UsuarioAdmin {
+ public long Dni { get; set; } = 0;
+ public string Nombre { get; set; } = "";
+ public string Email { get; set; } = "";
+ public ulong Habilitado { get; set; }
+}
\ No newline at end of file
diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs
index 5191cf1..8f0a69a 100644
--- a/Entidades/Alquilafacilcontext.cs
+++ b/Entidades/Alquilafacilcontext.cs
@@ -436,6 +436,9 @@ public partial class AlquilaFacilContext : DbContext
.HasMaxLength(1)
.IsFixedLength()
.HasColumnName("letra");
+ entity.Property(e => e.Monto)
+ .HasPrecision(10)
+ .HasColumnName("monto");
entity.Property(e => e.Piso)
.HasColumnType("int(11)")
.HasColumnName("piso");
diff --git a/Entidades/Dto/AltaPropiedadDto.cs b/Entidades/Dto/AltaPropiedadDto.cs
index 86865ce..a549463 100644
--- a/Entidades/Dto/AltaPropiedadDto.cs
+++ b/Entidades/Dto/AltaPropiedadDto.cs
@@ -6,4 +6,5 @@ public class AltaPropiedadDto {
public string? Letra { get; set; } = null;
public string Email { get; set; } = string.Empty;
public int Idtipropiedad { get; set; }
+ public int Monto { get; set; }
}
\ No newline at end of file
diff --git a/Entidades/Dto/CrearContratoDto.cs b/Entidades/Dto/CrearContratoDto.cs
index 065237e..bfd023f 100644
--- a/Entidades/Dto/CrearContratoDto.cs
+++ b/Entidades/Dto/CrearContratoDto.cs
@@ -1,5 +1,5 @@
namespace Entidades.Dto;
-
+//WIP
public class CrearContratoDto {
public int Meses {get; set;}
public int Idpropiedad {get; set;}
diff --git a/Entidades/Dto/PatchPropiedadDto.cs b/Entidades/Dto/PatchPropiedadDto.cs
index e146ce7..f7a01d5 100644
--- a/Entidades/Dto/PatchPropiedadDto.cs
+++ b/Entidades/Dto/PatchPropiedadDto.cs
@@ -1,3 +1,3 @@
namespace Entidades.Dto;
-public record PatchPropiedadDto(int id, string Ubicacion, int Canthabitaciones, int? Piso, string? Letra, string Email, int tipo, List Servicios);
+public record PatchPropiedadDto(int id, string Ubicacion, int Canthabitaciones, int? Piso, string? Letra, string Email, int tipo, List Servicios, int Monto);
diff --git a/Entidades/Dto/PropiedadesDto.cs b/Entidades/Dto/PropiedadesDto.cs
index b4aa423..274206f 100644
--- a/Entidades/Dto/PropiedadesDto.cs
+++ b/Entidades/Dto/PropiedadesDto.cs
@@ -7,4 +7,5 @@ public class PropiedadesDto {
public string letra { get; set; } = "";
public string Tipo { get; set; } = "";
public string? Servicios {get;set;} = "";
+ public int Monto { get; set; }
}
diff --git a/Entidades/Propiedade.cs b/Entidades/Propiedade.cs
index 8d47663..c5ca2b2 100644
--- a/Entidades/Propiedade.cs
+++ b/Entidades/Propiedade.cs
@@ -21,6 +21,8 @@ public partial class Propiedade
public int? Idestado { get; set; }
+ public decimal Monto { get; set; }
+
public virtual ICollection Contratos { get; set; } = new List();
public virtual Cliente? DnipropietarioNavigation { get; set; }
diff --git a/Front/src/App.svelte b/Front/src/App.svelte
index fcfeaf0..2c8e293 100644
--- a/Front/src/App.svelte
+++ b/Front/src/App.svelte
@@ -14,6 +14,7 @@
import FrontPropietario from "./paginas/grupos/PropietarioG.svelte";
import PublicarPropiedad from "./paginas/PublicarPropiedad.svelte";
import BusquedaPropiedades from "./paginas/BusquedaPropiedades.svelte";
+ import ControlUsuarios from "./paginas/ControlUsuarios.svelte";
@@ -61,6 +62,12 @@
+
+
+
+
+
+
diff --git a/Front/src/Componentes/BarraHorizontalConTexto.svelte b/Front/src/Componentes/BarraHorizontalConTexto.svelte
index 6a48406..82a7aba 100644
--- a/Front/src/Componentes/BarraHorizontalConTexto.svelte
+++ b/Front/src/Componentes/BarraHorizontalConTexto.svelte
@@ -1,11 +1,11 @@
-
{prop.text}
+
{text}
\ No newline at end of file
diff --git a/Front/src/Componentes/PublicacionPropiedad.svelte b/Front/src/Componentes/PublicacionPropiedad.svelte
index 2d43cd4..41b6a75 100644
--- a/Front/src/Componentes/PublicacionPropiedad.svelte
+++ b/Front/src/Componentes/PublicacionPropiedad.svelte
@@ -17,6 +17,7 @@
Piso: {prop.piso || "N/A"} Letra: {prop.letra || "N/A"} Servicios: {prop.servicios || "Sin servicios especificados"}
+ Monto: ${prop.monto}
diff --git a/Front/src/Componentes/RowPropiedad.svelte b/Front/src/Componentes/RowPropiedad.svelte
index b979573..c9cdb15 100644
--- a/Front/src/Componentes/RowPropiedad.svelte
+++ b/Front/src/Componentes/RowPropiedad.svelte
@@ -3,7 +3,7 @@
import ModalEstatico from "./ModalEstatico.svelte";
import ModificarPropiedadForm from "./modificarPropiedadForm.svelte";
- let { id, ubicacion, tipo, letra, piso,canthabitaciones, servicios, btnbaja = "Baja" } = $props();
+ let { id, ubicacion, tipo, letra, piso,canthabitaciones, servicios, btnbaja = "Baja", monto } = $props();
import { urlG } from "../stores/urlStore";
@@ -45,9 +45,9 @@
{piso}
{tipo}
{servicios}
+
{monto}
-
@@ -57,7 +57,7 @@
{#if modificar}
-
+
{/if}
diff --git a/Front/src/Componentes/modificarPropiedadForm.svelte b/Front/src/Componentes/modificarPropiedadForm.svelte
index 13d7bce..709ec9b 100644
--- a/Front/src/Componentes/modificarPropiedadForm.svelte
+++ b/Front/src/Componentes/modificarPropiedadForm.svelte
@@ -2,7 +2,7 @@
import { urlG } from "../stores/urlStore";
import { onMount } from "svelte";
- let { canthabitaciones, id, letra, piso, tipo, ubicacion, servicios } = $props();
+ let { canthabitaciones, id, letra, piso, tipo, ubicacion, servicios, monto } = $props();
let serviciosSeleccionados: string[] = $state([]);
const serviciosDisponibles = ["Gas", "Internet", "Telefono", "Luz"];
@@ -53,6 +53,7 @@
ubicacion,
email,
servicios: serviciosSeleccionados,
+ monto
}),
});
if (response.ok) {
@@ -116,6 +117,17 @@
/>
+
+
+
+
+ import { onMount } from "svelte";
+ import NavBarAutocompletable from "../Componentes/NavBarAutocompletable.svelte";
+ import type { Cliente, Grupo } from "../types";
+ import {urlG} from "../stores/urlStore";
+ import ModalEstatico from "../Componentes/ModalEstatico.svelte";
+ import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte";
+ import { fade, fly } from "svelte/transition";
+
+ let Clientes: Cliente[] = $state([]);
+ let Grupos:any[] = $state([]);
+ let modaldata = $state();
+ let token = sessionStorage.getItem("token");
+ let showAddmenu: boolean = $state(false);
+
+ let grupo:string = $state("");
+ let SelCliente: Cliente = $state();
+
+ onMount(async () => {
+ try{
+ const response = await fetch($urlG+"/api/admin/clientes", {
+ method: "GET",
+ headers: {
+ "Auth": String(token),
+ }
+ })
+ if (response.ok) {
+ let data: Cliente[] = await response.json();
+ Clientes = data;
+ return;
+ }
+ modaldata = "fallo al asignar la lista de clientes";
+ } catch {
+ modaldata = "fallo al intentar obtener la lista de clientes";
+ }
+
+ });
+
+ async function cargaGrupos(cli: Cliente){
+ try {
+ const response = await fetch($urlG+"/api/admin/clientes/grupo?Dni="+cli.dni, {
+ method: "GET",
+ headers: {
+ "Auth": String(token),
+ },
+ });
+ if (response.ok){
+ let data = await response.json();
+ Grupos = data;
+ showAddmenu = true;
+ SelCliente = cli;
+ return;
+ }
+
+ modaldata = await response.json();
+ } catch {
+ modaldata = "no se pudo obtener la lista de grupos";
+ }
+ }
+
+ async function bajaCliente(event:Event, cli:Cliente) {
+ //WIP añadir una flag para que muestre que no se pudo dar se alta/baja
+ event.stopPropagation();
+ try {
+ const response = await fetch($urlG+"/api/admin/cliente?Dni="+cli.dni, {
+ method: "DELETE",
+ headers: {
+ "Auth": String(token),
+ }
+ });
+ if(response.ok){
+ let data = await response.json();
+ modaldata = data.message;
+ cli.habilitado = !cli.habilitado;
+ }
+ } catch {
+ modaldata = "";
+
+ }
+
+ }
+ async function añadirGrupo(e:Event, cli: Cliente, grupo:string){
+ e.preventDefault();
+ if (cli.dni == 0 || cli.email == "" || grupo == ""){
+ modaldata = "No se selecciono un cliente o Grupo";
+ return;
+ }
+ const email = cli.email;
+ try {
+ const response = await fetch($urlG+"/api/admin/cliente/addGrupo", {
+ method: "PATCH",
+ headers: {
+ "Auth": String(token),
+ 'Content-Type' : 'application/json',
+ },
+ body: JSON.stringify({email, grupo})
+ });
+
+ if (response.ok){
+ let data = await response.json();
+ modaldata = data.message;
+ cargaGrupos(cli);
+ return;
+ }
+ let data = await response.json();
+ modaldata = data.message;
+ } catch {
+ modaldata = "Falla la conexion al servidor";
+ }
+ }
+ async function BajaGrupo(e:Event, cli: Cliente, grupo:string){
+ e.preventDefault();
+ if (cli.dni == 0 || cli.email == "" || grupo == ""){
+ modaldata = "No se selecciono un cliente o Grupo";
+ return;
+ }
+ const email = cli.email;
+ if (grupo === "Propietario"){
+ if (confirm("Sos propietario si te desactivas de ese rol tus propiedades se van a dar de baja, Estas seguro?") == false) return;
+ }
+ try {
+ const response = await fetch($urlG+"/api/admin/cliente/rmGrupo", {
+ method: "PATCH",
+ headers: {
+ "Auth": String(token),
+ 'Content-Type' : 'application/json',
+ },
+ body: JSON.stringify({email, grupo})
+ });
+
+ if (response.ok){
+ let data = await response.json();
+ modaldata = data.message;
+ cargaGrupos(cli);
+ return;
+ }
+ let data = await response.json();
+ modaldata = data.message;
+ } catch {
+ modaldata = "Falla la conexion al servidor";
+ }
+ }
+
+
+
+
+{#if modaldata}
+ !!(modaldata = "")}/>
+{/if}
+
+
+
+
+
+
+
+
+
+
+
Dni
+
Nombre/Apellido
+
Email
+
+
+
+
+ {#each Clientes as cli}
+
cargaGrupos(cli)} in:fade>
+
{cli.dni}
+
{cli.nombre}
+
{cli.email}
+
+ {#if cli.habilitado}
+
+ {:else}
+
+ {/if}
+
+
+ {/each}
+
+
+
+
+
+
+
+
+
+
Id
+
Descripcion
+
+
+
+
+ {#if Grupos.length>0}
+
+ {#each Grupos as g}
+
+
{g.id}
+
{g.descripcion}
+
+
+ {/each}
+ {:else if SelCliente != null}
+
+
Este Cliente no tiene Grupos
+
+ {:else}
+
+
Seleccione un cliente para ver sus grupos
+
+ {/if}
+
+
+
+ {#if showAddmenu}
+
+
+
+
+ {/if}
+
+
+
+
\ No newline at end of file
diff --git a/Front/src/paginas/MisPropiedades.svelte b/Front/src/paginas/MisPropiedades.svelte
index a1e882c..48f9c2c 100644
--- a/Front/src/paginas/MisPropiedades.svelte
+++ b/Front/src/paginas/MisPropiedades.svelte
@@ -5,6 +5,7 @@
import RowPropiedad from "../Componentes/RowPropiedad.svelte";
import type { PropiedadDto } from "../types";
import { urlG } from "../stores/urlStore";
+ import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte";
let propiedades = writable([]);
let email = localStorage.getItem("email");
@@ -39,11 +40,9 @@
-
- Propiedades de Alta
-
-
-
+
+
+
#
@@ -53,12 +52,13 @@
Piso
Tipo
Servicios
+
Monto
+
{#each $propiedades as propiedad}
-
-
+
{/each}
diff --git a/Front/src/paginas/MisPropiedadesDeBaja.svelte b/Front/src/paginas/MisPropiedadesDeBaja.svelte
index 48cafc0..29de6c1 100644
--- a/Front/src/paginas/MisPropiedadesDeBaja.svelte
+++ b/Front/src/paginas/MisPropiedadesDeBaja.svelte
@@ -5,6 +5,7 @@
import RowPropiedad from "../Componentes/RowPropiedad.svelte";
import type { PropiedadDto } from "../types";
import { urlG } from "../stores/urlStore";
+ import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte";
let propiedades = writable([]);
let email = localStorage.getItem("email");
@@ -39,11 +40,10 @@
-