595 lines
24 KiB
C#
595 lines
24 KiB
C#
using System;
|
|
using System.Data;
|
|
using Entidades;
|
|
using Entidades.Admin;
|
|
using Entidades.Dto;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Identity.Client;
|
|
using Modelo;
|
|
using MySql.Data.MySqlClient;
|
|
|
|
public class RepositorioPropiedades: RepositorioBase<RepositorioPropiedades> {
|
|
|
|
public IQueryable<PropiedadesDto> ListarPropiedades(){
|
|
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
|
|
""";
|
|
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
return ret;
|
|
}
|
|
|
|
public Propiedade? ObtenerPropiedadPorId(int Id) {
|
|
var con = Context;
|
|
Propiedade? prop = con.Propiedades.Include(x=>x.DnipropietarioNavigation).FirstOrDefault(x=>x.Id == Id);
|
|
|
|
if (prop == null || prop.Id == 0) {
|
|
return null;
|
|
}
|
|
|
|
return prop;
|
|
}
|
|
|
|
public bool AñadirPropiedad(Propiedade? prop) {
|
|
if (prop == null) return false;
|
|
|
|
var con = Context;
|
|
|
|
if (string.IsNullOrEmpty(prop.Letra)) prop.Letra = "_";
|
|
|
|
var filasInsertadasParam = new MySqlParameter("@p_filas_insertadas", SqlDbType.Int)
|
|
{
|
|
Direction = ParameterDirection.Output
|
|
};
|
|
|
|
// Ejecutar el procedimiento almacenado
|
|
var row = con.Database.ExecuteSqlRaw(
|
|
$"""
|
|
CALL InsertarPropiedad(@p_ubicacion, @p_cant_habitaciones, @p_piso, @p_letra,
|
|
@p_dni_propietario, @p_id_tipo_propiedad, @p_monto, @p_filas_insertadas)
|
|
""",
|
|
new MySqlParameter("@p_ubicacion", prop.Ubicacion),
|
|
new MySqlParameter("@p_cant_habitaciones", prop.Canthabitaciones),
|
|
new MySqlParameter("@p_piso", prop.Piso),
|
|
new MySqlParameter("@p_letra", prop.Letra),
|
|
new MySqlParameter("@p_dni_propietario", prop.Dnipropietario),
|
|
new MySqlParameter("@p_id_tipo_propiedad", prop.Idtipropiedad),
|
|
new MySqlParameter("@p_monto",prop.Monto),
|
|
filasInsertadasParam
|
|
);
|
|
|
|
return (int)filasInsertadasParam.Value == 1? true: false;
|
|
}
|
|
|
|
public bool PatchPropiedad(Propiedade prop) {
|
|
var con = Context;
|
|
Propiedade? propi = con.Propiedades.Include(x=>x.IdServicios).FirstOrDefault(x=>x.Id == prop.Id);
|
|
|
|
if (propi == null) return false;
|
|
|
|
propi.Canthabitaciones = prop.Canthabitaciones;
|
|
propi.Idtipropiedad = prop.Idtipropiedad;
|
|
propi.Ubicacion = prop.Ubicacion;
|
|
propi.Piso = prop.Piso;
|
|
propi.Letra = prop.Letra;
|
|
propi.Monto = prop.Monto;
|
|
|
|
propi.IdServicios.Clear();
|
|
foreach(Servicio ser in prop.IdServicios) {
|
|
var servi = con.Servicios.FirstOrDefault(x=>x.Id == ser.Id);
|
|
if (servi == null) return false;
|
|
propi.IdServicios.Add(servi);
|
|
}
|
|
|
|
return Guardar(con);
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedadesPorEmail(string email) {
|
|
FormattableString sqlq = $"""
|
|
SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo, GROUP_CONCAT(IFNULL(s.descripcion, '') SEPARATOR ', ') AS Servicios, p.monto as Monto
|
|
FROM Propiedades p
|
|
JOIN Clientes c ON c.dni = p.dnipropietario
|
|
JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad
|
|
LEFT JOIN Servicio_Propiedad ps ON ps.idPropiedad = p.id
|
|
LEFT JOIN Servicios s ON s.Id = ps.idServicio
|
|
WHERE c.email = {email} AND p.idestado = 1
|
|
GROUP BY p.id
|
|
""";
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
|
|
return ret;
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedadesDeBajaPorEmail(string email) {
|
|
FormattableString sqlq = $"""
|
|
SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo, GROUP_CONCAT(IFNULL(s.descripcion, '') SEPARATOR ', ') AS Servicios, p.monto as Monto
|
|
FROM Propiedades p
|
|
JOIN Clientes c ON c.dni = p.dnipropietario
|
|
JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad
|
|
LEFT JOIN Servicio_Propiedad ps ON ps.idPropiedad = p.id
|
|
LEFT JOIN Servicios s ON s.Id = ps.idServicio
|
|
WHERE c.email = {email} AND p.idestado = 3
|
|
GROUP BY p.id
|
|
""";
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
|
|
return ret;
|
|
}
|
|
|
|
public bool AñadirServicioAPropiedad(int idprop, List<int> idserv){
|
|
var con = Context;
|
|
Propiedade? prop = con.Propiedades.Find(idprop);
|
|
if (prop == null) return false;
|
|
|
|
foreach (int id in idserv) {
|
|
Servicio? servicio = con.Servicios.Find(id);
|
|
if (servicio == null) return false;
|
|
|
|
prop.IdServicios.Add(servicio);
|
|
}
|
|
|
|
return Guardar(con);
|
|
}
|
|
|
|
public bool BajaPropiedad(int id, Cliente? cli) {
|
|
if (cli == null) return false;
|
|
|
|
var con = Context;
|
|
Propiedade? prop = con.Propiedades.FirstOrDefault(x=>x.Id == id);
|
|
if (prop == null) return false;
|
|
if (prop.Dnipropietario != cli.Dni) return false;
|
|
|
|
if(prop.Idestado == 1){
|
|
prop.Idestado = 3;
|
|
}else{
|
|
prop.Idestado = 1;
|
|
}
|
|
|
|
return Guardar(con);
|
|
|
|
}
|
|
|
|
public bool BajaPropiedad(int id) {
|
|
var con = Context;
|
|
Propiedade? prop = con.Propiedades.FirstOrDefault(x=>x.Id == id);
|
|
|
|
if (prop == null||prop.Dnipropietario == 0) return false;
|
|
|
|
if (prop.Idestado == 2) return false;
|
|
//las alquiladas no se pueden dar de baja claramente
|
|
prop.Idestado = prop.Idestado == 1 ? 3 : 1;
|
|
|
|
return Guardar(con);
|
|
}
|
|
|
|
public bool BajaServiciosAPropiedad(int idprop, List<int> idserv) {
|
|
var con = Context;
|
|
Propiedade? prop = con.Propiedades.Include(x=>x.IdServicios).FirstOrDefault(x => x.Id == idprop);
|
|
if (prop == null) return false;
|
|
|
|
|
|
foreach (int id in idserv) {
|
|
Servicio? servicio = con.Servicios.Find(id);
|
|
if (servicio == null) return false;
|
|
|
|
if (prop.IdServicios.Contains(servicio)){
|
|
prop.IdServicios.Remove(servicio);
|
|
}
|
|
}
|
|
|
|
return Guardar(con);
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedesPorHabitaciones_Tipo_Servicios(int habitaciones, int tipo, string servicios) {
|
|
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
|
|
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
|
|
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
|
|
""";
|
|
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
return ret;
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedesPorHabitaciones_Tipo(int cantidadHabitaciones, int tipoPropiedad) {
|
|
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
|
|
WHERE p.canthabitaciones = {cantidadHabitaciones} AND p.idtipropiedad = {tipoPropiedad}
|
|
GROUP BY p.id
|
|
""";
|
|
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
return ret;
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedesPorServicios(string servicios) {
|
|
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
|
|
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
|
|
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
|
|
""";
|
|
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
return ret;
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedesPorHabitaciones(int cantidadHabitaciones) {
|
|
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
|
|
WHERE p.canthabitaciones = {cantidadHabitaciones}
|
|
GROUP BY p.id
|
|
""";
|
|
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
return ret;
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedesPorTipo(int tipoPropiedad) {
|
|
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
|
|
WHERE p.idtipropiedad = {tipoPropiedad}
|
|
GROUP BY p.id
|
|
""";
|
|
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
return ret;
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedesPorHabitaciones_Servicios(int cantidadHabitaciones, string servicios) {
|
|
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
|
|
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
|
|
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
|
|
""";
|
|
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
return ret;
|
|
}
|
|
|
|
public IQueryable<PropiedadesDto> ObtenerPropiedesPorTipo_Servicios(int tipoPropiedad, string servicios) {
|
|
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
|
|
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
|
|
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
|
|
""";
|
|
|
|
var ret = Context.Database.SqlQuery<PropiedadesDto>(sqlq);
|
|
return ret;
|
|
}
|
|
|
|
public bool BajaPropiedades(string email) {
|
|
var con = Context;
|
|
try {
|
|
IQueryable<Propiedade> listprop = con.Propiedades.Where(x=>x.DnipropietarioNavigation.Email == email);
|
|
foreach (var item in listprop) {
|
|
item.Idestado = 3;
|
|
}
|
|
} catch {
|
|
return false;
|
|
}
|
|
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);
|
|
}
|
|
} |