paginacion arreglada
This commit is contained in:
@@ -4,6 +4,8 @@ using Entidades.Admin;
|
|||||||
using Entidades.Dto;
|
using Entidades.Dto;
|
||||||
using Entidades;
|
using Entidades;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using AlquilaFacil.StrategyBusquedaAdmin;
|
||||||
|
using System.Diagnostics;
|
||||||
namespace AlquilaFacil.Controllers;
|
namespace AlquilaFacil.Controllers;
|
||||||
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
@@ -129,26 +131,22 @@ public class AdminController: ControllerBase
|
|||||||
|
|
||||||
IQueryable<PropiedadesAdmin>? props = null;
|
IQueryable<PropiedadesAdmin>? props = null;
|
||||||
pag -= 1;
|
pag -= 1;
|
||||||
if (servicios == ""){
|
|
||||||
//no hay parametros de busqueda
|
var clave = $"{(cantidadHabitaciones != 0 ? "1" : "0")}{(tipoPropiedad != 0 ? "1" : "0")}{(!string.IsNullOrEmpty(servicios) ? "1" : "0")}";
|
||||||
if (cantidadHabitaciones == 0 && tipoPropiedad == 0 ) props = RepositorioPropiedades.Singleton.ListarPropiedadesPorPaginaAdmin(pag);
|
var gen = AdminBusquedaContext.Singleton;
|
||||||
//Solo Habitaciones
|
var estrategia = gen.ObtenerEstrategia(clave);
|
||||||
if (cantidadHabitaciones != 0 && tipoPropiedad == 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitacionesPaginado(cantidadHabitaciones, pag);
|
props = estrategia.Filtrar(servicios, cantidadHabitaciones, tipoPropiedad, pag);
|
||||||
//Solo TipoPropiedad
|
|
||||||
if (cantidadHabitaciones == 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipoPaginado(tipoPropiedad, pag);
|
|
||||||
//Habitaciones y TipoPropiedad
|
|
||||||
if (cantidadHabitaciones != 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_TipoPaginado(cantidadHabitaciones, tipoPropiedad, pag);
|
|
||||||
} else {
|
|
||||||
//Solo se filtra por servicios
|
|
||||||
if (cantidadHabitaciones == 0 && tipoPropiedad == 0 ) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorServiciosPaginado(servicios, pag);
|
|
||||||
//Servicios y habitaciones
|
|
||||||
if (cantidadHabitaciones != 0 && tipoPropiedad == 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Servicios_Paginado(cantidadHabitaciones, servicios, pag);
|
|
||||||
//Tipo y Servicios
|
|
||||||
if (cantidadHabitaciones == 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo_Servicios_Paginado(tipoPropiedad, servicios, pag);
|
|
||||||
// Todos los parametros
|
|
||||||
if (cantidadHabitaciones != 0 && tipoPropiedad != 0) props = RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo_Servicios_Paginado(cantidadHabitaciones, tipoPropiedad, servicios, pag);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Ok(props);
|
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);
|
||||||
|
return Ok(new { message = ret});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -18,8 +18,8 @@ public class BusquedaController: ControllerBase {
|
|||||||
|
|
||||||
var clave = $"{(cantidadHabitaciones != 0 ? "1" : "0")}{(tipoPropiedad != 0 ? "1" : "0")}{(!string.IsNullOrEmpty(servicios) ? "1" : "0")}";
|
var clave = $"{(cantidadHabitaciones != 0 ? "1" : "0")}{(tipoPropiedad != 0 ? "1" : "0")}{(!string.IsNullOrEmpty(servicios) ? "1" : "0")}";
|
||||||
|
|
||||||
var context = BusquedaContext.Singleton;
|
var gen = BusquedaContext.Singleton;
|
||||||
var estrategia = context.ObtenerEstrategia(clave);
|
var estrategia = gen.ObtenerEstrategia(clave);
|
||||||
props = estrategia.Filtrar(servicios, cantidadHabitaciones, tipoPropiedad);
|
props = estrategia.Filtrar(servicios, cantidadHabitaciones, tipoPropiedad);
|
||||||
|
|
||||||
return Ok(props);
|
return Ok(props);
|
||||||
|
|||||||
29
Aspnet/Strategy/BusquedaAdmin/AdminBusquedaContext.cs
Normal file
29
Aspnet/Strategy/BusquedaAdmin/AdminBusquedaContext.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
namespace AlquilaFacil.StrategyBusquedaAdmin;
|
||||||
|
|
||||||
|
public class AdminBusquedaContext
|
||||||
|
{
|
||||||
|
private static readonly AdminBusquedaContext singleton = new();
|
||||||
|
public static AdminBusquedaContext Singleton {get { return singleton; } }
|
||||||
|
|
||||||
|
private readonly Dictionary<string, IAdminBusquedaStrategy> _estrategias;
|
||||||
|
|
||||||
|
public AdminBusquedaContext()
|
||||||
|
{
|
||||||
|
_estrategias = new Dictionary<string, IAdminBusquedaStrategy>
|
||||||
|
{
|
||||||
|
{ "000", new BusquedaSinParametros() },
|
||||||
|
{ "100", new BusquedaPorHabitaciones() },
|
||||||
|
{ "010", new BusquedaPorTipo() },
|
||||||
|
{ "001", new BusquedaPorServicios() },
|
||||||
|
{ "110", new BusquedaPorHabitacionesTipo() },
|
||||||
|
{ "101", new BusquedaPorHabitacionesServicios() },
|
||||||
|
{ "011", new BusquedaTipoServicios() },
|
||||||
|
{ "111", new BusquedaFull() }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public IAdminBusquedaStrategy ObtenerEstrategia(string clave)
|
||||||
|
{
|
||||||
|
return _estrategias.ContainsKey(clave) ? _estrategias[clave] : new BusquedaSinParametros();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,48 +5,48 @@ namespace AlquilaFacil.StrategyBusquedaAdmin;
|
|||||||
|
|
||||||
public class BusquedaSinParametros : IAdminBusquedaStrategy {
|
public class BusquedaSinParametros : IAdminBusquedaStrategy {
|
||||||
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
return RepositorioPropiedades.Singleton.ListarPropiedades();
|
return RepositorioPropiedades.Singleton.ListarPropiedadesPorPaginaAdmin(pag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BusquedaPorHabitaciones : IAdminBusquedaStrategy {
|
public class BusquedaPorHabitaciones : IAdminBusquedaStrategy {
|
||||||
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones(cantidadHabitaciones);
|
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitacionesPaginado(cantidadHabitaciones, pag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BusquedaPorTipo : IAdminBusquedaStrategy {
|
public class BusquedaPorTipo : IAdminBusquedaStrategy {
|
||||||
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo(tipoPropiedad);
|
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipoPaginado(tipoPropiedad, pag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BusquedaPorServicios : IAdminBusquedaStrategy {
|
public class BusquedaPorServicios : IAdminBusquedaStrategy {
|
||||||
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorServicios(servicios);
|
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorServiciosPaginado(servicios, pag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BusquedaPorHabitacionesTipo : IAdminBusquedaStrategy {
|
public class BusquedaPorHabitacionesTipo : IAdminBusquedaStrategy {
|
||||||
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo(cantidadHabitaciones, tipoPropiedad);
|
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_TipoPaginado(cantidadHabitaciones, tipoPropiedad, pag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BusquedaPorHabitacionesServicios : IAdminBusquedaStrategy {
|
public class BusquedaPorHabitacionesServicios : IAdminBusquedaStrategy {
|
||||||
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Servicios(cantidadHabitaciones, servicios);
|
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Servicios_Paginado(cantidadHabitaciones, servicios, pag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BusquedaTipoServicios : IAdminBusquedaStrategy {
|
public class BusquedaTipoServicios : IAdminBusquedaStrategy {
|
||||||
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo_Servicios(tipoPropiedad, servicios);
|
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorTipo_Servicios_Paginado(tipoPropiedad, servicios, pag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BusquedaFull : IAdminBusquedaStrategy {
|
public class BusquedaFull : IAdminBusquedaStrategy {
|
||||||
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> Filtrar(string servicios, int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo_Servicios(cantidadHabitaciones, tipoPropiedad, servicios);
|
return RepositorioPropiedades.Singleton.ObtenerPropiedesPorHabitaciones_Tipo_Servicios_Paginado(cantidadHabitaciones, tipoPropiedad, servicios, pag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
1
Front/public/bell.svg
Normal file
1
Front/public/bell.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-bell"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6" /><path d="M9 17v1a3 3 0 0 0 6 0v-1" /></svg>
|
||||||
|
After Width: | Height: | Size: 447 B |
@@ -40,15 +40,25 @@
|
|||||||
|
|
||||||
async function cargaPropiedades() {
|
async function cargaPropiedades() {
|
||||||
try{
|
try{
|
||||||
const response = await fetch($urlG+"/api/admin/busqueda/paginada?cantidadHabitaciones="+p.cantidadhabitaciones+"&tipoPropiedad="+p.tipopropiedad+"&servicios="+p.servicios+"&pag="+p.pag, {
|
const [response, response2] = await Promise.all([
|
||||||
method: "GET",
|
fetch($urlG+"/api/admin/busqueda/paginada?cantidadHabitaciones="+p.cantidadhabitaciones+"&tipoPropiedad="+p.tipopropiedad+"&servicios="+p.servicios+"&pag="+p.pag, {
|
||||||
headers: {
|
method: "GET",
|
||||||
"Auth": String(token)
|
headers: {
|
||||||
}
|
"Auth": String(token)
|
||||||
});
|
}
|
||||||
if (response.ok) {
|
}),
|
||||||
let data = await response.json();
|
fetch($urlG+"/api/admin/busqueda/cantPag?cantidadHabitaciones="+p.cantidadhabitaciones+"&tipoPropiedad="+p.tipopropiedad+"&servicios="+p.servicios, {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
"Auth": String(token)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (response.ok && response2.ok) {
|
||||||
|
const [data, data2] = await Promise.all([response.json(),response2.json()]);
|
||||||
Propiedades = data;
|
Propiedades = data;
|
||||||
|
cantpag = data2.message;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
modaldata = "Fallo la request";
|
modaldata = "Fallo la request";
|
||||||
@@ -56,31 +66,6 @@
|
|||||||
modaldata = "Fallo al intentar obtener la lista de propiedades";
|
modaldata = "Fallo al intentar obtener la lista de propiedades";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async function obtenerCant(){
|
|
||||||
|
|
||||||
try{
|
|
||||||
const response = await fetch($urlG+"/api/propiedad/cantPagina?estado="+0, {
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Auth": String(token)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (response.ok) {
|
|
||||||
let data = await response.json();
|
|
||||||
cantpag = data.message;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (response.status === 400) {
|
|
||||||
let data = await response.json();
|
|
||||||
modaldata=data.message;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
modaldata="Fallo al recibir la peticion de la cantidad de paginas de propiedades";
|
|
||||||
} catch {
|
|
||||||
modaldata="Fallo al intentar hacer la peticion de cuantas paginas hay";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function queryPag(a:number){
|
function queryPag(a:number){
|
||||||
p.pag = a;
|
p.pag = a;
|
||||||
@@ -107,7 +92,7 @@
|
|||||||
<AdminPropiedad prop={p} modal={(a:string)=> modaldata = a} />
|
<AdminPropiedad prop={p} modal={(a:string)=> modaldata = a} />
|
||||||
<br>
|
<br>
|
||||||
{/each}
|
{/each}
|
||||||
<PaginacionStepper currentPag={p.pag} {queryPag}/>
|
<PaginacionStepper currentPag={p.pag} {queryPag} {cantpag}/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-md-4 order-1">
|
<div class="col col-md-4 order-1">
|
||||||
<PanelBusqueda Params={querybusc} />
|
<PanelBusqueda Params={querybusc} />
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IQueryable<PropiedadesAdmin>? ObtenerPropiedesPorHabitacionesPaginado(int cantidadHabitaciones, int pag) {
|
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorHabitacionesPaginado(int cantidadHabitaciones, int pag) {
|
||||||
FormattableString sqlq = $"""
|
FormattableString sqlq = $"""
|
||||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
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
|
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||||
@@ -409,7 +409,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IQueryable<PropiedadesAdmin>? ObtenerPropiedesPorTipoPaginado(int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorTipoPaginado(int tipoPropiedad, int pag) {
|
||||||
FormattableString sqlq = $"""
|
FormattableString sqlq = $"""
|
||||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
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
|
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||||
@@ -427,7 +427,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IQueryable<PropiedadesAdmin>? ObtenerPropiedesPorHabitaciones_TipoPaginado(int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorHabitaciones_TipoPaginado(int cantidadHabitaciones, int tipoPropiedad, int pag) {
|
||||||
FormattableString sqlq = $"""
|
FormattableString sqlq = $"""
|
||||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
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
|
GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado
|
||||||
@@ -445,7 +445,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IQueryable<PropiedadesAdmin>? ObtenerPropiedesPorServiciosPaginado(string servicios, int pag) {
|
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorServiciosPaginado(string servicios, int pag) {
|
||||||
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
||||||
|
|
||||||
FormattableString sqlq = $"""
|
FormattableString sqlq = $"""
|
||||||
@@ -471,7 +471,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IQueryable<PropiedadesAdmin>? ObtenerPropiedesPorHabitaciones_Servicios_Paginado(int cantidadHabitaciones, string servicios, int pag) {
|
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorHabitaciones_Servicios_Paginado(int cantidadHabitaciones, string servicios, int pag) {
|
||||||
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
||||||
FormattableString sqlq = $"""
|
FormattableString sqlq = $"""
|
||||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||||
@@ -497,7 +497,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IQueryable<PropiedadesAdmin>? ObtenerPropiedesPorTipo_Servicios_Paginado(int tipoPropiedad, string servicios, int pag) {
|
public IQueryable<PropiedadesAdmin> ObtenerPropiedesPorTipo_Servicios_Paginado(int tipoPropiedad, string servicios, int pag) {
|
||||||
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
||||||
FormattableString sqlq = $"""
|
FormattableString sqlq = $"""
|
||||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||||
@@ -523,7 +523,7 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IQueryable<PropiedadesAdmin>? ObtenerPropiedesPorHabitaciones_Tipo_Servicios_Paginado(int habitaciones, int tipo, string servicios, int pag) {
|
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()));
|
string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim()));
|
||||||
FormattableString sqlq = $"""
|
FormattableString sqlq = $"""
|
||||||
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo,
|
||||||
@@ -564,4 +564,33 @@ public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int CuantasPaginasBusqueda(int habitaciones, string servicios, int tipoPropiedad) {
|
||||||
|
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 (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