diff --git a/Aspnet/AlquilaFacil.csproj b/Aspnet/AlquilaFacil.csproj
index 842f7c7..a513915 100644
--- a/Aspnet/AlquilaFacil.csproj
+++ b/Aspnet/AlquilaFacil.csproj
@@ -9,6 +9,7 @@
+
diff --git a/Aspnet/Aspnet.sln b/Aspnet/Aspnet.sln
new file mode 100644
index 0000000..baec485
--- /dev/null
+++ b/Aspnet/Aspnet.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.002.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AlquilaFacil", "AlquilaFacil.csproj", "{76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {CF93AFAC-32EF-4993-84A2-CA2EB32F58FF}
+ EndGlobalSection
+EndGlobal
diff --git a/Aspnet/Controllers/AccionesController.cs b/Aspnet/Controllers/AccionesController.cs
index 240f30c..4772e51 100644
--- a/Aspnet/Controllers/AccionesController.cs
+++ b/Aspnet/Controllers/AccionesController.cs
@@ -7,10 +7,10 @@ namespace AlquilaFacil.Controllers;
[ApiController]
public class AccionesController: ControllerBase {
+ //Reutilizo el loginDto pero no lleno el campo de contraseña
[HttpPost("api/acciones")]
public IActionResult ListarAccionesPorUsuario([FromBody] LoginDto email, [FromHeader(Name = "Auth")] string Auth) {
if (email.Email == "" || email.Email == null) return BadRequest();
-
if (Auth == "") return Unauthorized(new { esValido = false});
diff --git a/Aspnet/Controllers/GruposController.cs b/Aspnet/Controllers/GruposController.cs
index dd8f26b..31f8ffa 100644
--- a/Aspnet/Controllers/GruposController.cs
+++ b/Aspnet/Controllers/GruposController.cs
@@ -6,7 +6,11 @@ namespace AlquilaFacil.Controllers;
[ApiController]
public class GruposController: ControllerBase {
[HttpPost("api/admin/grupos")]
- public IActionResult CrearGrupo([FromBody] AdminGrupo grupo) {
+ public IActionResult CrearGrupo([FromBody] AdminGrupo grupo, [FromHeader(Name = "Auth")] string Auth) {
+ if (!string.IsNullOrEmpty(Auth)) return BadRequest();
+ var ret2 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 10);
+ if (ret2 == false) return BadRequest(ret2);
+
if (String.IsNullOrEmpty(grupo.descripcion)) return BadRequest();
bool ret = RepositorioGrupos.Singleton.CrearGrupo(grupo.descripcion);
diff --git a/Aspnet/Controllers/InquilinoController.cs b/Aspnet/Controllers/InquilinoController.cs
index 255ae7e..ef55739 100644
--- a/Aspnet/Controllers/InquilinoController.cs
+++ b/Aspnet/Controllers/InquilinoController.cs
@@ -15,9 +15,8 @@ public class InquilinoController: ControllerBase
[HttpGet("api/inquilino")]
public IActionResult Get([FromHeader(Name = "Auth")] string Auth) {
if (!string.IsNullOrEmpty(Auth)) return BadRequest();
- string path = Request.Path;
+ var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
- var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, path);
if (ret == false) return BadRequest(ret);
var list = RepositorioInquilinos.Singleton.GetInquilinos();
@@ -26,7 +25,11 @@ public class InquilinoController: ControllerBase
}
[HttpPost("api/inquilino")]
- public IActionResult Post([FromBody] CrearClienteDto cid) {
+ public IActionResult Post([FromBody] CrearClienteDto cid, [FromHeader(Name = "Auth")] string Auth) {
+ if (!string.IsNullOrEmpty(Auth)) return BadRequest();
+ var ret3 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 4);
+ if (ret3 == false) return BadRequest(ret3);
+
var ret = verificarCrearUsuario(cid);
if (ret != "") return BadRequest(ret);
diff --git a/Aspnet/Controllers/LoginController.cs b/Aspnet/Controllers/LoginController.cs
index 2667370..b4efd38 100644
--- a/Aspnet/Controllers/LoginController.cs
+++ b/Aspnet/Controllers/LoginController.cs
@@ -53,7 +53,6 @@ public class LoginController: ControllerBase
}
-
private string GenerarToken(LoginDto loginDto){
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes("ffb2cdc15d472e41a5b626e294c45020");
diff --git a/Aspnet/Controllers/PermisosController.cs b/Aspnet/Controllers/PermisosController.cs
index 3ec45df..a63f9a1 100644
--- a/Aspnet/Controllers/PermisosController.cs
+++ b/Aspnet/Controllers/PermisosController.cs
@@ -7,7 +7,11 @@ namespace AlquilaFacil.Controllers;
[ApiController]
public class PermisosController: ControllerBase {
[HttpPost("api/admin/permisos")]
- public IActionResult CrearPermisos([FromBody] AdminPermiso permiso) {
+ public IActionResult CrearPermisos([FromBody] AdminPermiso permiso, [FromHeader(Name = "Auth")] string Auth) {
+ if (!string.IsNullOrEmpty(Auth)) return BadRequest();
+ var ret2 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 11);
+ if (ret2 == false) return BadRequest(ret2);
+
if (String.IsNullOrEmpty(permiso.descripcion)) return BadRequest();
bool ret = RepositorioPermisos.Singleton.CrearPermiso(permiso.descripcion);
diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs
index b81634e..8f62418 100644
--- a/Aspnet/Controllers/PropiedadesController.cs
+++ b/Aspnet/Controllers/PropiedadesController.cs
@@ -1,8 +1,150 @@
+using Entidades;
+using Entidades.Dto;
+using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
+using Modelo;
namespace AlquilaFacil.Controllers;
[ApiController]
public class PropiedadesController: ControllerBase {
+ [HttpGet("api/propiedades")]
+ public IActionResult ListarPropiedades([FromHeader(Name = "Auth")] string Auth) {
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12);
+ if (validacion1 == false) return Unauthorized();
+ var ret = RepositorioPropiedades.Singleton.ListarPropiedades();
+ return Ok(ret);
+ }
+
+ [HttpGet("api/propiedad")]
+ public IActionResult ObtenerPropiedadPorId(int Id, [FromHeader(Name = "Auth")] string Auth) {
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12);
+ if (validacion1 == false) return Unauthorized();
+
+ if (Id < 0) return BadRequest("la id de propiedad no puede ser negativa");
+
+ var ret = RepositorioPropiedades.Singleton.ObtenerPropiedadPorId(Id);
+ if (ret == null) return BadRequest("No existe la propiedad");
+ return Ok(ret);
+ }
+
+ [HttpGet("api/propiedades/Propietario")]
+ public IActionResult ObtenerPropiedadesPorPropietario (
+ [FromBody] string email,
+ [FromHeader(Name = "Auth")] string Auth) {
+
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12);
+ if (validacion1 == false) return Unauthorized();
+
+ email = email.Trim();
+ if (String.IsNullOrEmpty(email)) return BadRequest("falta campo email");
+
+ var ret = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(email);
+
+ return Ok(ret);
+ }
+
+ [HttpPost("api/propiedad")]
+ public IActionResult AltaPropiedad([FromBody] AltaPropiedadDto propiedad, [FromHeader(Name = "Auth")] string Auth) {
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 1);
+ if (validacion1 == false) return Unauthorized();
+
+ string validacion2 = ValidarPropiedad(propiedad);
+ if (validacion2 != "") return BadRequest(new { message = validacion2 });
+
+ Cliente? cli = RepositorioPropietario.Singleton.ObtenerPropietarioPorEmail(propiedad.Email);
+ if (cli == null) return BadRequest("El email no corresponde a un propietario");
+
+ Propiedade Prop = new Propiedade{
+ Canthabitaciones = propiedad.Canthabitaciones,
+ Dnipropietario = cli.Dni,
+ Idtipropiedad = propiedad.Idtipropiedad,
+ Ubicacion = propiedad.Ubicacion,
+ Letra = propiedad.Letra != null ? propiedad.Letra : null,
+ Piso = propiedad.Piso != null ? propiedad.Piso : null,
+ };
+
+ var ret = RepositorioPropiedades.Singleton.AñadirPropiedad(Prop);
+ return (ret)?
+ Ok("Fue Cargado Correctamente") :
+ BadRequest("Fallo al momento de añadir la propiedad a la base de datos");
+ }
+
+ [HttpDelete("api/propiedad")]
+ public IActionResult BajaPropiedad(int id, [FromHeader(Name = "Auth")] string Auth){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2);
+ if (validacion1 == false) return Unauthorized();
+
+ if (id <= 0) return BadRequest("No es una id valida");
+
+ var ret = RepositorioPropiedades.Singleton.BajaPropiedad(id);
+
+ return ret ?
+ Ok(new {message = $"la propiedad con id {id} fue dada de baja"}):
+ BadRequest("Fallo al dar de baja la propiedad");
+ }
+
+ [HttpPut("api/propiedades/addServicio")]
+ public IActionResult AñadirServicio([FromBody] ServicioAPropiedadDto Servicios, [FromHeader(Name = "Auth")] string Auth) {
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 8);
+ if (validacion1 == false) return Unauthorized();
+
+ if (Servicios.propiedadid <= 0) return BadRequest("No puede tener una id negativa o cero");
+ if (Servicios.idServicios.Count() < 1) return BadRequest("Falta añadir servicios");
+ if (Servicios.idServicios.Any(x => x<= 0)) return BadRequest("No tienen haber ids negativas o cero de servicio");
+
+ var serv = RepositorioServicios.Singleton.ObtenerServiciosPorPropiedad(Servicios.propiedadid);
+
+ bool validacion2 = Servicios.idServicios.Any(x => serv.Contains(x));
+
+ if (validacion2 == true) return BadRequest("Hay elementos repetidos");
+
+ bool ret = RepositorioPropiedades.
+ Singleton.AñadirServicioAPropiedad(Servicios.propiedadid, Servicios.idServicios);
+
+ return ret ?
+ Ok("Los Servicios Se Cargaron correctamente a la propiedad") : BadRequest("No se pudo Cargar los Servicios a la propiedad");
+
+ }
+
+ [HttpPut("api/propiedades/RmServicio")]
+ public IActionResult EliminarServicio([FromBody] ServicioAPropiedadDto servicio, [FromHeader(Name = "Auth")] string Auth) {
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 13);
+ if (validacion1 == false) return Unauthorized();
+
+ if (servicio.propiedadid <= 0) return BadRequest("No puede tener una id negativa o cero");
+ if (servicio.idServicios.Count() < 1) return BadRequest("Falta añadir servicios");
+ if (servicio.idServicios.Any(x => x<= 0)) return BadRequest("No tienen haber ids negativas o cero de servicio");
+
+ var serv = RepositorioServicios.Singleton.ObtenerServiciosPorPropiedad(servicio.propiedadid);
+
+ var repetidos = serv.Intersect(servicio.idServicios);
+
+ bool ret = RepositorioPropiedades.Singleton.BajaServiciosAPropiedad(servicio.propiedadid, servicio.idServicios);
+
+ return ret ?
+ Ok("Se Eliminaron los servicios seleccionados de la propiedad") : BadRequest("Fallo al eliminarse los servicios de la propiedad");
+
+ }
+
+ private string ValidarPropiedad(AltaPropiedadDto prop) {
+ if (prop == null) return "Esta mal formado el body de la request";
+
+ string ret = "";
+ if (String.IsNullOrEmpty(prop.Email)) ret += "Falta Definir un email de propietario\n";
+ if (prop.Canthabitaciones < 0) ret += "No se puede tener una cantidad de habitaciones negativa\n";
+ if (prop.Idtipropiedad <= 0) ret += "No tiene un tipo de propiedad asociada";
+ if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n";
+
+ return ret;
+
+ }
}
\ No newline at end of file
diff --git a/Aspnet/Controllers/PropietarioController.cs b/Aspnet/Controllers/PropietarioController.cs
index 6b0d395..9291d41 100644
--- a/Aspnet/Controllers/PropietarioController.cs
+++ b/Aspnet/Controllers/PropietarioController.cs
@@ -2,6 +2,7 @@ using System.Security.Cryptography;
using System.Text;
using Entidades;
using Entidades.Dto;
+using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Modelo;
@@ -11,14 +12,20 @@ namespace AlquilaFacil.Controllers;
public class PropietarioController: ControllerBase {
[HttpGet("api/propietario")]
- public IActionResult ListarPropietarios([FromHeader(Name = "Auth")] string Auth) {
- return Ok();
+ public IActionResult ObtenerPropietarioPorDni(long Dni, [FromHeader(Name ="Auth")] string Auth) {
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 14);
+ if (validacion1 == false) return Unauthorized();
+
+ var ret = RepositorioPropietario.Singleton.ObtenerPropietarioPorDni(Dni);
+ return Ok(ret);
}
[HttpPost("api/propietarios")]
- public IActionResult AltaPropietario([FromBody]CrearClienteDto Propietario,[FromHeader(Name = "Auth")] string Auth) {
+ public IActionResult AltaPropietario([FromBody]CrearClienteDto Propietario,
+ [FromHeader(Name = "Auth")] string Auth) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
- var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, Request.Path);
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 5);
if (validacion1 == false) return Unauthorized();
string validacion2 = verificarCrearUsuario(Propietario);
@@ -38,6 +45,30 @@ public class PropietarioController: ControllerBase {
return ret ?
Ok(new {message = "Se añadio el propietario exitosamente"}) : BadRequest();
}
+
+ [HttpPatch("api/propietarios")]
+ public IActionResult PatchPropietario([FromBody]CrearClienteDto Propietario, [FromHeader(Name = "Auth")] string Auth){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 5);
+ if (validacion1 == false) return Unauthorized();
+
+ string validacion2 = verificarCrearUsuario(Propietario);
+ if (validacion2 != "") return BadRequest(validacion2);
+
+ var cli = new Cliente {
+ Dni = Propietario.dni,
+ Nombre = Propietario.nombre,
+ Domicilio = Propietario.domicilio,
+ Apellido = Propietario.apellido,
+ Celular = Propietario.celular,
+ Email = Propietario.email,
+ Contraseña = Encoding.UTF8.GetBytes(HacerHash(Propietario.contraseña))
+ };
+ var ret = RepositorioUsuarios.Singleton.ActualizarPropietario(cli);
+ return ret ?
+ Ok(new {message = "Se Modifico el propietario exitosamente"}) : BadRequest();
+ }
+
private string verificarCrearUsuario(CrearClienteDto cid) {
string msg = "";
diff --git a/Aspnet/Controllers/ServiciosController.cs b/Aspnet/Controllers/ServiciosController.cs
new file mode 100644
index 0000000..fea5d8b
--- /dev/null
+++ b/Aspnet/Controllers/ServiciosController.cs
@@ -0,0 +1,12 @@
+using Entidades;
+using Entidades.Dto;
+using Microsoft.AspNetCore.Http.HttpResults;
+using Microsoft.AspNetCore.Mvc;
+using Modelo;
+
+namespace AlquilaFacil.Controllers;
+
+[ApiController]
+public class ServiciosController: ControllerBase {
+
+}
\ No newline at end of file
diff --git a/Aspnet/makefile b/Aspnet/makefile
index 46aa736..e528264 100644
--- a/Aspnet/makefile
+++ b/Aspnet/makefile
@@ -1,2 +1,2 @@
run:
- dotnet watch run
+ dotnet watch run --project AlquilaFacil.csproj
diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs
index a422bc2..9aa070d 100644
--- a/Entidades/Alquilafacilcontext.cs
+++ b/Entidades/Alquilafacilcontext.cs
@@ -23,6 +23,8 @@ public partial class AlquilaFacilContext : DbContext
public virtual DbSet Defectos { get; set; }
+ public virtual DbSet EstadoPropiedads { get; set; }
+
public virtual DbSet Estadodefectos { get; set; }
public virtual DbSet Estadoventas { get; set; }
@@ -37,6 +39,8 @@ public partial class AlquilaFacilContext : DbContext
public virtual DbSet Recibos { get; set; }
+ public virtual DbSet Servicios { get; set; }
+
public virtual DbSet TipoPropiedads { get; set; }
public virtual DbSet Ventas { get; set; }
@@ -99,6 +103,10 @@ public partial class AlquilaFacilContext : DbContext
entity.Property(e => e.Email)
.HasMaxLength(50)
.HasColumnName("email");
+ entity.Property(e => e.Habilitado)
+ .HasDefaultValueSql("b'1'")
+ .HasColumnType("bit(1)")
+ .HasColumnName("habilitado");
entity.Property(e => e.Nombre)
.HasMaxLength(20)
.HasColumnName("nombre");
@@ -158,6 +166,9 @@ public partial class AlquilaFacilContext : DbContext
entity.Property(e => e.Fechainicio)
.HasColumnType("date")
.HasColumnName("fechainicio");
+ entity.Property(e => e.Habilitado)
+ .HasColumnType("bit(1)")
+ .HasColumnName("habilitado");
entity.Property(e => e.Idpropiedad)
.HasColumnType("int(11)")
.HasColumnName("idpropiedad");
@@ -259,6 +270,20 @@ public partial class AlquilaFacilContext : DbContext
.HasConstraintName("FK_DEF_EST");
});
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity.ToTable("EstadoPropiedad");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("id");
+ entity.Property(e => e.Descripcion)
+ .HasMaxLength(11)
+ .HasColumnName("descripcion");
+ });
+
modelBuilder.Entity(entity =>
{
entity.HasKey(e => e.Id).HasName("PRIMARY");
@@ -385,6 +410,8 @@ public partial class AlquilaFacilContext : DbContext
{
entity.HasKey(e => e.Id).HasName("PRIMARY");
+ entity.HasIndex(e => e.Idestado, "FK_PROP_EST");
+
entity.HasIndex(e => e.Dnipropietario, "FK_PROP_PROPI");
entity.HasIndex(e => e.Idtipropiedad, "FK_PROP_TIPO");
@@ -398,6 +425,9 @@ public partial class AlquilaFacilContext : DbContext
entity.Property(e => e.Dnipropietario)
.HasColumnType("bigint(20)")
.HasColumnName("dnipropietario");
+ entity.Property(e => e.Idestado)
+ .HasColumnType("int(11)")
+ .HasColumnName("idestado");
entity.Property(e => e.Idtipropiedad)
.HasColumnType("int(11)")
.HasColumnName("idtipropiedad");
@@ -417,6 +447,11 @@ public partial class AlquilaFacilContext : DbContext
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("FK_PROP_PROPI");
+ entity.HasOne(d => d.IdestadoNavigation).WithMany(p => p.Propiedades)
+ .HasForeignKey(d => d.Idestado)
+ .OnDelete(DeleteBehavior.Restrict)
+ .HasConstraintName("FK_PROP_EST");
+
entity.HasOne(d => d.IdtipropiedadNavigation).WithMany(p => p.Propiedades)
.HasForeignKey(d => d.Idtipropiedad)
.OnDelete(DeleteBehavior.Restrict)
@@ -440,6 +475,42 @@ public partial class AlquilaFacilContext : DbContext
.HasColumnName("monto");
});
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PRIMARY");
+
+ entity.Property(e => e.Id)
+ .HasColumnType("int(11)")
+ .HasColumnName("id");
+ entity.Property(e => e.Descripcion)
+ .HasMaxLength(20)
+ .HasColumnName("descripcion");
+
+ entity.HasMany(d => d.IdPropiedads).WithMany(p => p.IdServicios)
+ .UsingEntity>(
+ "ServicioPropiedad",
+ r => r.HasOne().WithMany()
+ .HasForeignKey("IdPropiedad")
+ .OnDelete(DeleteBehavior.Restrict)
+ .HasConstraintName("Servicio_Propiedad_ibfk_2"),
+ l => l.HasOne().WithMany()
+ .HasForeignKey("IdServicio")
+ .OnDelete(DeleteBehavior.Restrict)
+ .HasConstraintName("Servicio_Propiedad_ibfk_1"),
+ j =>
+ {
+ j.HasKey("IdServicio", "IdPropiedad").HasName("PRIMARY");
+ j.ToTable("Servicio_Propiedad");
+ j.HasIndex(new[] { "IdPropiedad" }, "idPropiedad");
+ j.IndexerProperty("IdServicio")
+ .HasColumnType("int(11)")
+ .HasColumnName("idServicio");
+ j.IndexerProperty("IdPropiedad")
+ .HasColumnType("int(11)")
+ .HasColumnName("idPropiedad");
+ });
+ });
+
modelBuilder.Entity(entity =>
{
entity.HasKey(e => e.Id).HasName("PRIMARY");
diff --git a/Entidades/Cliente.cs b/Entidades/Cliente.cs
index e4a2b2d..ef52593 100644
--- a/Entidades/Cliente.cs
+++ b/Entidades/Cliente.cs
@@ -21,6 +21,8 @@ public partial class Cliente
public string? Token { get; set; }
+ public ulong Habilitado { get; set; }
+
public virtual ICollection ContratoDniinquilinoNavigations { get; set; } = new List();
public virtual ICollection ContratoDnipropietarioNavigations { get; set; } = new List();
diff --git a/Entidades/Contrato.cs b/Entidades/Contrato.cs
index c7fd30f..2f0fdbc 100644
--- a/Entidades/Contrato.cs
+++ b/Entidades/Contrato.cs
@@ -25,6 +25,8 @@ public partial class Contrato
public long? Idventa { get; set; }
+ public ulong Habilitado { get; set; }
+
public virtual ICollection Defectos { get; set; } = new List();
public virtual Cliente? DniinquilinoNavigation { get; set; }
diff --git a/Entidades/Dto/AltaPropiedadDto.cs b/Entidades/Dto/AltaPropiedadDto.cs
new file mode 100644
index 0000000..86865ce
--- /dev/null
+++ b/Entidades/Dto/AltaPropiedadDto.cs
@@ -0,0 +1,9 @@
+namespace Entidades.Dto;
+public class AltaPropiedadDto {
+ public string Ubicacion { get; set; } = null!;
+ public int Canthabitaciones { get; set; }
+ public int? Piso { get; set; } = null;
+ public string? Letra { get; set; } = null;
+ public string Email { get; set; } = string.Empty;
+ public int Idtipropiedad { get; set; }
+}
\ No newline at end of file
diff --git a/Entidades/Dto/PropiedadesDto.cs b/Entidades/Dto/PropiedadesDto.cs
new file mode 100644
index 0000000..d63e3a9
--- /dev/null
+++ b/Entidades/Dto/PropiedadesDto.cs
@@ -0,0 +1,9 @@
+namespace Entidades.Dto;
+public class PropiedadesDto {
+ public int id { get; set; }
+ public string Ubicacion { get; set; } = "";
+ public int canthabitaciones { get; set; }
+ public string piso { get; set; } = "";
+ public string letra { get; set; } = "";
+ public string TipoPropiedad { get; set; } = "";
+}
\ No newline at end of file
diff --git a/Entidades/Dto/ServicioAPropiedadDto.cs b/Entidades/Dto/ServicioAPropiedadDto.cs
new file mode 100644
index 0000000..79cd5ab
--- /dev/null
+++ b/Entidades/Dto/ServicioAPropiedadDto.cs
@@ -0,0 +1,2 @@
+namespace Entidades.Dto;
+public record ServicioAPropiedadDto(int propiedadid, List idServicios);
\ No newline at end of file
diff --git a/Entidades/Estadopropiedad.cs b/Entidades/Estadopropiedad.cs
new file mode 100644
index 0000000..a220579
--- /dev/null
+++ b/Entidades/Estadopropiedad.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+
+namespace Entidades;
+
+public partial class EstadoPropiedad
+{
+ public int Id { get; set; }
+
+ public string Descripcion { get; set; } = null!;
+
+ public virtual ICollection Propiedades { get; set; } = new List();
+}
diff --git a/Entidades/Propiedade.cs b/Entidades/Propiedade.cs
index d0abc4f..8d47663 100644
--- a/Entidades/Propiedade.cs
+++ b/Entidades/Propiedade.cs
@@ -19,11 +19,17 @@ public partial class Propiedade
public int Idtipropiedad { get; set; }
+ public int? Idestado { get; set; }
+
public virtual ICollection Contratos { get; set; } = new List();
public virtual Cliente? DnipropietarioNavigation { get; set; }
+ public virtual EstadoPropiedad? IdestadoNavigation { get; set; }
+
public virtual TipoPropiedad IdtipropiedadNavigation { get; set; } = null!;
public virtual ICollection Venta { get; set; } = new List();
+
+ public virtual ICollection IdServicios { get; set; } = new List();
}
diff --git a/Entidades/Servicio.cs b/Entidades/Servicio.cs
new file mode 100644
index 0000000..b0246e0
--- /dev/null
+++ b/Entidades/Servicio.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+namespace Entidades;
+
+public partial class Servicio
+{
+ public int Id { get; set; }
+
+ public string Descripcion { get; set; } = null!;
+
+ [JsonIgnore]
+ public virtual ICollection IdPropiedads { get; set; } = new List();
+}
diff --git a/Modelo/RepositorioBase.cs b/Modelo/RepositorioBase.cs
index 2315c13..6454fa3 100644
--- a/Modelo/RepositorioBase.cs
+++ b/Modelo/RepositorioBase.cs
@@ -7,11 +7,11 @@ namespace Modelo;
public abstract class RepositorioBase
where S : new()
{
- protected AlquilaFacilContext Context { get{ return new AlquilaFacilContext();}}
+ protected AlquilaFacilContext Context { get { return new AlquilaFacilContext(); }}
private static readonly S instance = new();
- public static S Singleton { get{return instance;}}
+ public static S Singleton { get { return instance; }}
- public bool Guardar(AlquilaFacilContext context){
+ public bool Guardar(AlquilaFacilContext context) {
bool ret = false;
try
{
diff --git a/Modelo/RepositorioInquilinos.cs b/Modelo/RepositorioInquilinos.cs
index 809b15e..48de959 100644
--- a/Modelo/RepositorioInquilinos.cs
+++ b/Modelo/RepositorioInquilinos.cs
@@ -8,7 +8,9 @@ public class RepositorioInquilinos: RepositorioBase {
{
FormattableString sqlq =
$"""
- SELECT I.Dni, I.Nombre, I.Apellido FROM Inquilinos
+ SELECT I.Dni, I.Nombre, I.Apellido FROM Clientes I
+ JOIN cliente_Grupos cg on cg.idcliente = I.Dni
+ WHERE cg.idgrupo = 2;
""";
return Context.Database.SqlQuery(sqlq);
}
diff --git a/Modelo/RepositorioPermisos.cs b/Modelo/RepositorioPermisos.cs
index d07b1ec..06b51a1 100644
--- a/Modelo/RepositorioPermisos.cs
+++ b/Modelo/RepositorioPermisos.cs
@@ -17,8 +17,10 @@ public class RepositorioPermisos: RepositorioBase {
return list;
}
- public bool CheckPermisos(string token, string path){
+ public bool CheckPermisos(string token, int idpermiso){
var con = Context;
+ bool tienePermiso = false;
+
//checkeo que el token corresponda a un usuario
Cliente? cli = con.Clientes.FirstOrDefault(x => x.Token == token);
if (cli == null || cli.Dni == 0) return false;
@@ -30,10 +32,13 @@ public class RepositorioPermisos: RepositorioBase {
.SelectMany(x => x.Idpermisos)
.Distinct();
+ /////////////////////////////////////////////////////////////////
+ //Esto esta comentado porque antes pasaba el string del path de la url, es una mala idea a muchos niveles
+ /////////////////////////////////////////////////////////////////
//me inspiré y hice un regex pero si eliminaba los primeros 8(?) caracteres del string era lo mismo
- Match match = Regex.Match(path, @"^/accion/(\d+)$");
- int.TryParse(match.Groups[1].Value, out int idpermiso);
- bool tienePermiso = false;
+ //Match match = Regex.Match(path, @"^/accion/(\d+)$");
+ //int.TryParse(match.Groups[1].Value, out int idpermiso);
+ /////////////////////////////////////////////////////////////////
Parallel.ForEach(permisos, (x, i) =>{
if (x.Id == idpermiso) {
diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs
index b911e46..ea3f720 100644
--- a/Modelo/RepositorioPropiedades.cs
+++ b/Modelo/RepositorioPropiedades.cs
@@ -1,9 +1,104 @@
+using System;
+using System.Reflection.Metadata.Ecma335;
+using Entidades;
+using Entidades.Dto;
+using Microsoft.EntityFrameworkCore;
using Modelo;
public class RepositorioPropiedades: RepositorioBase
{
- public bool AñadirPropiedad(){
- return false;
+ 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;
+
+ int count = con.Propiedades.Count()+1;
+
+ prop.Id = count;
+ prop.Idestado = 1;
+ con.Propiedades.Add(prop);
+ return Guardar(con);
+ }
+
+ public IQueryable ObtenerPropiedadesPorEmail(string email) {
+ FormattableString sqlq = $"""
+ SELECT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as TipoPropiedad From Propiedades p
+ JOIN Clientes c ON c.dni = p.dnipropietario
+ JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad
+ WHERE c.email = {email}
+ """;
+ 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) {
+ var con = Context;
+ Propiedade prop = con.Propiedades.Find(id);
+ 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);
+ }
}
\ No newline at end of file
diff --git a/Modelo/RepositorioPropietario.cs b/Modelo/RepositorioPropietario.cs
new file mode 100644
index 0000000..e50df24
--- /dev/null
+++ b/Modelo/RepositorioPropietario.cs
@@ -0,0 +1,40 @@
+using System;
+using Entidades;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
+using Modelo;
+
+public class RepositorioPropietario: RepositorioBase {
+ public Cliente? ObtenerPropietarioPorDni(long Dni){
+
+ if (Dni < 1) return null;
+
+ FormattableString sqlq = $"""
+ SELECT * FROM Clientes c
+ JOIN cliente_Grupos cg ON cg.idgrupo = 1
+ WHERE c.dni = {Dni}
+ LIMIT 1
+ """;
+
+ Cliente? cli = Context.Database.SqlQuery(sqlq).First();
+ if (cli == null|| cli.Dni == 0) return null;
+ if (cli.Dni == 0 || cli == null) return null;
+ return cli;
+
+ }
+
+ public Cliente? ObtenerPropietarioPorEmail(string email){
+
+ FormattableString sqlq = $"""
+ SELECT * FROM Clientes c
+ JOIN cliente_Grupos cg ON cg.idgrupo = 1
+ WHERE c.email = {email}
+ LIMIT 1
+ """;
+
+ Cliente? cli = Context.Database.SqlQuery(sqlq).First();
+ if (cli == null|| cli.Dni == 0) return null;
+ if (cli.Dni == 0 || cli == null) return null;
+ return cli;
+ }
+}
diff --git a/Modelo/RepositorioServicios.cs b/Modelo/RepositorioServicios.cs
new file mode 100644
index 0000000..8f1c799
--- /dev/null
+++ b/Modelo/RepositorioServicios.cs
@@ -0,0 +1,11 @@
+using Modelo;
+using Entidades;
+public class RepositorioServicios: RepositorioBase {
+ public IQueryable ObtenerServiciosPorPropiedad(int idpropiedad){
+ var con = Context;
+ return con.Propiedades
+ .Where(x => x.Id == idpropiedad)
+ .SelectMany(x => x.IdServicios)
+ .Select(x=>x.Id);
+ }
+}
diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs
index b139d04..9ec7cd3 100644
--- a/Modelo/RepositorioUsuarios.cs
+++ b/Modelo/RepositorioUsuarios.cs
@@ -1,15 +1,12 @@
-using System.Collections.ObjectModel;
using System.Security.Cryptography;
using System.Text;
using Entidades.Dto;
using Entidades;
-using System.Reflection.Metadata.Ecma335;
-
+
namespace Modelo;
-public class RepositorioUsuarios: RepositorioBase
-{
- public bool AltaInquilino(Cliente cli){
+public class RepositorioUsuarios: RepositorioBase {
+ public bool AltaInquilino(Cliente cli) {
var con = Context;
//check por si la cuenta ya existe (puede ser propietario)
@@ -34,8 +31,7 @@ public class RepositorioUsuarios: RepositorioBase
}
- public bool AltaPropietario(Cliente cli)
- {
+ public bool AltaPropietario(Cliente cli) {
var con = Context;
//check por si la cuenta ya existe (puede ser propietario)
@@ -58,6 +54,17 @@ public class RepositorioUsuarios: RepositorioBase
return Guardar(con);
}
+ public bool ActualizarPropietario(Cliente cli) {
+ var con = Context;
+ Cliente? cliOld = con.Clientes.Find(cli.Dni);
+ if (cliOld == null) return false;
+ if (cli.Dni != cliOld.Dni) return false;
+
+ cliOld = cli;
+ return Guardar(con);
+ }
+
+
public bool CheckUsuario(LoginDto logindto) {
string Contraseña = HacerHash(logindto.Contraseña);
@@ -71,12 +78,12 @@ public class RepositorioUsuarios: RepositorioBase
return false;
}
- private string HacerHash(string pass){
+ private string HacerHash(string pass) {
var buf = SHA256.HashData(Encoding.UTF8.GetBytes(pass));
return BitConverter.ToString(buf).Replace("-","");
}
- public bool CheckToken(string email, string token){
+ public bool CheckToken(string email, string token) {
var usu = Context.Clientes.FirstOrDefault(x => x.Email == email);
if (usu == null) return false;
@@ -87,8 +94,7 @@ public class RepositorioUsuarios: RepositorioBase
return usu.Token == token;
}
- public void GuardarToken(LoginDto login, string tokenString)
- {
+ public void GuardarToken(LoginDto login, string tokenString) {
var con = Context;
var usu = con.Clientes.FirstOrDefault(x => x.Email == login.Email);
if (usu == null) return;