using System; using System.Data; using Entidades; using Entidades.Dto; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Modelo; using MySql.Data.MySqlClient; public class RepositorioPropiedades: RepositorioBase { public IQueryable ListarPropiedades(){ FormattableString sqlq = $""" SELECT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS TipoPropiedad FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public Propiedade? ObtenerPropiedadPorId(int Id) { FormattableString sqlq = $""" SELECT * FROM Propiedades p WHERE p.id = {Id} LIMIT 1 """; Propiedade? prop = Context.Database.SqlQuery(sqlq).First(); 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_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), filasInsertadasParam ); return (int)filasInsertadasParam.Value == 1? true: false; } public IQueryable ObtenerPropiedadesPorEmail(string email) { FormattableString sqlq = $""" SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo From Propiedades p JOIN Clientes c ON c.dni = p.dnipropietario JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad WHERE c.email = {email} AND p.idestado = 1 """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public bool AƱadirServicioAPropiedad(int idprop, List 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; Console.WriteLine("prop.dni: "+prop.Dnipropietario+", cli.dni: "+cli.Dni); if (prop.Dnipropietario != cli.Dni) return false; prop.Idestado = 3; return Guardar(con); } public bool BajaServiciosAPropiedad(int idprop, List 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); } }