asd
This commit is contained in:
@@ -106,4 +106,44 @@ public class AdminController: ControllerBase
|
||||
var ret = RepositorioUsuarios.Singleton.BajaCliente(Dni);
|
||||
return Ok(ret);
|
||||
}
|
||||
|
||||
[HttpDelete("api/admin/propiedad")]
|
||||
public IActionResult BajaPropiedad([FromHeader(Name = "Auth")] string Auth, int id = 0) {
|
||||
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
|
||||
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10);
|
||||
if (validacion1 == false) return Unauthorized();
|
||||
|
||||
if (id <= 0) return BadRequest(new { message = "Falto indicar id Propiedad"});
|
||||
|
||||
var ret = RepositorioPropiedades.Singleton.BajaPropiedad(id);
|
||||
return ret ?
|
||||
Ok(new {message = "Se cambio el estado de la propiedad"}): BadRequest(new { message = "No se pudo dar de baja"});
|
||||
}
|
||||
|
||||
[HttpGet("api/admin/busqueda/paginada")]
|
||||
public IActionResult FiltroPropiedadesPaginado([FromHeader(Name = "Auth")]string Auth, int cantidadHabitaciones = 0, int tipoPropiedad = 0, [FromQuery]string servicios = "", int pag = 1) {
|
||||
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
|
||||
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10);
|
||||
if (validacion1 == false) return Unauthorized();
|
||||
|
||||
IQueryable<PropiedadesAdmin>? props = null;
|
||||
pag -= 1;
|
||||
|
||||
var clave = $"{(cantidadHabitaciones != 0 ? "1" : "0")}{(tipoPropiedad != 0 ? "1" : "0")}{(!string.IsNullOrEmpty(servicios) ? "1" : "0")}";
|
||||
var gen = AdminBusquedaContext.Singleton;
|
||||
var estrategia = gen.ObtenerEstrategia(clave);
|
||||
props = estrategia.Filtrar(servicios, cantidadHabitaciones, tipoPropiedad, pag);
|
||||
|
||||
return Ok(props);
|
||||
}
|
||||
|
||||
[HttpGet("api/admin/busqueda/cantPag")]
|
||||
public IActionResult CantidadPaginas([FromHeader(Name = "Auth")]string Auth, int cantidadHabitaciones = 0, int tipoPropiedad = 0, [FromQuery]string servicios = "") {
|
||||
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
|
||||
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10);
|
||||
if (validacion1 == false) return Unauthorized();
|
||||
|
||||
int ret = RepositorioPropiedades.Singleton.CuantasPaginasBusqueda(cantidadHabitaciones, servicios, tipoPropiedad, 0);
|
||||
return Ok(new { message = ret});
|
||||
}
|
||||
}
|
||||
@@ -35,4 +35,15 @@ public class BusquedaController: ControllerBase {
|
||||
|
||||
return Ok(props);
|
||||
}
|
||||
|
||||
[HttpGet("api/busqueda/cantPag")]
|
||||
public IActionResult GetCantPag([FromHeader(Name = "Auth")]string Auth, int cantidadHabitaciones = 0, int tipoPropiedad = 0, [FromQuery]string servicios = "") {
|
||||
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
|
||||
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 3);
|
||||
if (validacion1 == false) return Unauthorized();
|
||||
|
||||
int ret = RepositorioPropiedades.Singleton.CuantasPaginasBusqueda(cantidadHabitaciones, servicios, tipoPropiedad, 1);
|
||||
return Ok(new { message = ret});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
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";
|
||||
import ControlUsuarios from "./paginas/AdminUsuarios.svelte";
|
||||
import ControlPropiedades from "./paginas/AdminPropiedades.svelte";
|
||||
import Notificaciones from "./paginas/Notificaciones.svelte";
|
||||
</script>
|
||||
|
||||
<Router>
|
||||
@@ -82,6 +84,10 @@
|
||||
<ProteRoute componente={FrontInformes}/>
|
||||
</Route>
|
||||
|
||||
<!--Notificaciones-->
|
||||
<Route path="/notificaciones">
|
||||
<ProteRoute componente={Notificaciones}/>
|
||||
</Route>
|
||||
|
||||
|
||||
</Router>
|
||||
|
||||
@@ -63,13 +63,16 @@
|
||||
<img src="/home.svg" alt="Volver al Menú"/>
|
||||
</a>
|
||||
</div>
|
||||
<button class="badge btn btn-outline-primary" onclick={toggleTheme} style="background-color: cadetblue;">
|
||||
<button class="badge btn" onclick={toggleTheme} style="background-color: cadetblue;">
|
||||
{#if theme === "light" }
|
||||
<img src="/toggle-left.svg" alt=""/>
|
||||
{:else}
|
||||
<img src="/toggle-right.svg" alt=""/>
|
||||
{/if}
|
||||
</button>
|
||||
<button class="badge btn btn-info" onclick={()=>navigate("/notificaciones")}>
|
||||
<img src="/bell.svg" alt="">
|
||||
</button>
|
||||
</div>
|
||||
<NavbarToggler on:click={() => (isOpen = !isOpen)} />
|
||||
<Collapse isOpen={isOpen} navbar expand="md">
|
||||
|
||||
7
Front/src/paginas/Notificaciones.svelte
Normal file
7
Front/src/paginas/Notificaciones.svelte
Normal file
@@ -0,0 +1,7 @@
|
||||
<script lang="ts">
|
||||
import NavBarAutocompletable from "../Componentes/NavBarAutocompletable.svelte";
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<NavBarAutocompletable/>
|
||||
@@ -341,4 +341,246 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
||||
}
|
||||
return Guardar(con);
|
||||
}
|
||||
|
||||
public IQueryable<PropiedadesDto> ListarPropiedadesPorPagina(int pag) {
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = 1
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
///////////////ADMIN
|
||||
public IQueryable<PropiedadesAdmin> ListarPropiedadesPorPaginaAdmin(int pag) {
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = ep.id
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Singleton.Context.Database.SqlQuery<PropiedadesAdmin>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorHabitacionesPaginado(int cantidadHabitaciones, int pag) {
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = ep.id
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
WHERE p.canthabitaciones = {cantidadHabitaciones}
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Singleton.Context.Database.SqlQuery<PropiedadesAdmin>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorTipoPaginado(int tipoPropiedad, int pag) {
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = ep.id
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
WHERE p.idtipropiedad = {tipoPropiedad}
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Singleton.Context.Database.SqlQuery<PropiedadesAdmin>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorHabitaciones_TipoPaginado(int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = ep.id
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
WHERE p.canthabitaciones = {cantidadHabitaciones} AND p.idtipropiedad = {tipoPropiedad}
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Singleton.Context.Database.SqlQuery<PropiedadesAdmin>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorServiciosPaginado(string servicios, int pag) {
|
||||
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
||||
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = ep.id
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM Servicio_Propiedad sp2
|
||||
JOIN Servicios s2 ON sp2.idServicio = s2.id
|
||||
WHERE sp2.idPropiedad = p.id
|
||||
AND FIND_IN_SET(s2.descripcion, {serviciosEscapados})
|
||||
)
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Singleton.Context.Database.SqlQuery<PropiedadesAdmin>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorHabitaciones_Servicios_Paginado(int cantidadHabitaciones, string servicios, int pag) {
|
||||
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = ep.id
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
WHERE p.canthabitaciones = {cantidadHabitaciones}
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM Servicio_Propiedad sp2
|
||||
JOIN Servicios s2 ON sp2.idServicio = s2.id
|
||||
WHERE sp2.idPropiedad = p.id
|
||||
AND FIND_IN_SET(s2.descripcion, {serviciosEscapados})
|
||||
)
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Singleton.Context.Database.SqlQuery<PropiedadesAdmin>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorTipo_Servicios_Paginado(int tipoPropiedad, string servicios, int pag) {
|
||||
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = ep.id
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
WHERE p.idtipropiedad = {tipoPropiedad}
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM Servicio_Propiedad sp2
|
||||
JOIN Servicios s2 ON sp2.idServicio = s2.id
|
||||
WHERE sp2.idPropiedad = p.id
|
||||
AND FIND_IN_SET(s2.descripcion, {serviciosEscapados})
|
||||
)
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Singleton.Context.Database.SqlQuery<PropiedadesAdmin>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorHabitaciones_Tipo_Servicios_Paginado(int habitaciones, int tipo, string servicios, int pag) {
|
||||
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
||||
FormattableString sqlq = $"""
|
||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||
FROM Propiedades p
|
||||
JOIN EstadoPropiedad ep ON p.idestado = ep.id
|
||||
JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id
|
||||
JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad
|
||||
JOIN Servicios s on sp.idServicio =s.id
|
||||
WHERE p.canthabitaciones = {habitaciones} AND p.idtipropiedad = {tipo}
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM Servicio_Propiedad sp2
|
||||
JOIN Servicios s2 ON sp2.idServicio = s2.id
|
||||
WHERE sp2.idPropiedad = p.id
|
||||
AND FIND_IN_SET(s2.descripcion, {serviciosEscapados})
|
||||
)
|
||||
GROUP BY p.id
|
||||
LIMIT 10 OFFSET {pag*10}
|
||||
""";
|
||||
|
||||
var ret = Singleton.Context.Database.SqlQuery<PropiedadesAdmin>(sqlq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public int CuantasPaginas(int estado = 0) {
|
||||
var con = Context;
|
||||
double inter;
|
||||
int ret;
|
||||
|
||||
if (estado == 0){
|
||||
inter = con.Propiedades.Count()/10.0;
|
||||
} else {
|
||||
inter = con.Propiedades.Where(x=>x.Idestado == estado).Count();
|
||||
}
|
||||
if (inter == 0.00) return 0;
|
||||
ret = (int)Math.Ceiling(inter);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public int CuantasPaginasBusqueda(int habitaciones, string servicios, int tipoPropiedad, int estado) {
|
||||
int registrosPorPagina = 10;
|
||||
|
||||
var query = Context.Propiedades
|
||||
.Include(p => p.IdestadoNavigation)
|
||||
.Include(p => p.IdtipropiedadNavigation)
|
||||
.Include(p => p.IdServicios)
|
||||
.AsQueryable();
|
||||
|
||||
if (habitaciones > 0) {
|
||||
query = query.Where(p => p.Canthabitaciones == habitaciones);
|
||||
}
|
||||
|
||||
if (estado > 0){
|
||||
query = query.Where(x=>x.Idestado == estado);
|
||||
}
|
||||
|
||||
if (tipoPropiedad > 0) {
|
||||
query = query.Where(p => p.Idtipropiedad == tipoPropiedad);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(servicios)) {
|
||||
var listaServicios = servicios.Split(',').Select(s => s.Trim()).ToList();
|
||||
query = query.Where(p =>
|
||||
p.IdServicios.Any(sp =>
|
||||
listaServicios.Contains(sp.Descripcion)));
|
||||
}
|
||||
|
||||
int totalRegistros = query.Distinct().Count();
|
||||
|
||||
return (int)Math.Ceiling((double)totalRegistros / registrosPorPagina);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user