diff --git a/Aspnet/Controllers/AdminController.cs b/Aspnet/Controllers/AdminController.cs
index b3f4b6b..1941782 100644
--- a/Aspnet/Controllers/AdminController.cs
+++ b/Aspnet/Controllers/AdminController.cs
@@ -1,6 +1,8 @@
using Microsoft.AspNetCore.Mvc;
using Modelo;
using Entidades.Admin;
+using Entidades.Dto;
+using Entidades;
namespace AlquilaFacil.Controllers;
[ApiController]
@@ -26,6 +28,82 @@ public class AdminController: ControllerBase
IEnumerable list = RepositorioGrupos.Singleton.ObtenerGruposPorDni(Dni);
return Ok(list);
+ }
+ [HttpPatch("api/admin/cliente/addGrupo")]
+ public IActionResult AddGrupoACliente([FromHeader(Name = "Auth")]string Auth, [FromBody]EmailGrupo data){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
+ if (validacion1 == false) return Unauthorized();
+ if (data.email == "" || data.grupo == "") return BadRequest(new { message = "Faltan datos en la request" });
+
+ var ret = RepositorioUsuarios.Singleton.CheckGrupo(data.email, data.grupo);
+ if (ret) return BadRequest(new { message = $"El usuario ya pertenece al grupo {data.grupo}"});
+
+ var ret2 = RepositorioUsuarios.Singleton.AñadirClienteAGrupo(data.email, data.grupo);
+
+ return ret2 ? Ok(new {message = "Se Añadio al Grupo"}): BadRequest(new { message = "Fallo al añadirse al Grupo" });
+ }
+
+ [HttpPatch("api/admin/cliente/rmGrupo")]
+ public IActionResult RmGrupoACliente([FromHeader(Name = "Auth")]string Auth, [FromBody]EmailGrupo data){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
+ if (validacion1 == false) return Unauthorized();
+
+ if (data.email == "" || data.grupo == "") return BadRequest(new { message = "Faltan datos en la request" });
+
+ //una ward para que no me bloquee a mi mismo de tener acceso a admin
+ if (data.email == "celu@fedesrv.ddns.net" && data.grupo == "Admin") return BadRequest(new { message = "Si hago esto me estaria bloqueando la cuenta a mi mismo" });
+
+ var ret = RepositorioUsuarios.Singleton.CheckGrupo(data.email, data.grupo);
+ if (!ret) return BadRequest(new { message = $"El usuario no pertenece al grupo {data.grupo}"});
+
+ if (data.grupo == "Propietario") {
+ IQueryable ret3 = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(data.email);
+ if (ret3.Count() > 0){
+ bool ret4 = RepositorioPropiedades.Singleton.BajaPropiedades(data.email);
+ if (ret4 == false) return BadRequest(new { message = "No se pudo dar de baja las propiedades"});
+ }
+ }
+ if (data.grupo == "Inquilino") {
+ var ret5 = RepositorioContratos.Singleton.ObtenerContratosPorEmailInquilino(data.email);
+ if ( ret5 == null || ret5.Where(x=>x.Habilitado == 0).Count() > 0) return BadRequest(new { message = "Aun tenes alquileres pendientes o fallo al intentar obtener la lista de alquileres, no se puede dar de baja"});
+ }
+
+ var ret2 = RepositorioUsuarios.Singleton.EliminarClienteAGrupo(data.email, data.grupo);
+ return ret2 ? Ok(new {message = $"Se elimino del Grupo: {data.grupo}"}): BadRequest(new { message = "Fallo al añadirse al Grupo" });
+ }
+
+ [HttpDelete("api/admin/cliente")]
+ public IActionResult BajaCliente([FromHeader(Name ="Auth")]string Auth, long Dni){
+ if (String.IsNullOrEmpty(Auth)) return Unauthorized();
+ var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 9);
+ if (validacion1 == false) return Unauthorized();
+
+ if ( Dni <=0) return BadRequest(new {message = "No puede tener un Dni menor o igual a 0"});
+
+ Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorDni(Dni);
+
+ if (cli == null) return BadRequest(new {message = "No existe un cliente con ese numero de dni"});
+
+ bool esPropietario = RepositorioUsuarios.Singleton.CheckGrupo(cli.Email, "Propietario");
+ bool esInquilino = RepositorioUsuarios.Singleton.CheckGrupo(cli.Email, "Inquilino");
+
+ if (esPropietario) {
+ IQueryable ret3 = RepositorioPropiedades.Singleton.ObtenerPropiedadesPorEmail(cli.Email);
+ if (ret3.Count() > 0){
+ bool ret4 = RepositorioPropiedades.Singleton.BajaPropiedades(cli.Email);
+ if (ret4 == false) return BadRequest(new { message = "No se pudo dar de baja las propiedades"});
+ }
+ }
+
+ if (esInquilino) {
+ var ret5 = RepositorioContratos.Singleton.ObtenerContratosPorEmailInquilino(cli.Email);
+ if ( ret5 == null || ret5.Where(x=>x.Habilitado == 0).Count() > 0) return BadRequest(new { message = "Aun tenes alquileres pendientes o fallo al intentar obtener la lista de alquileres, no se puede dar de baja"});
+ }
+ // lo da de baja si no tiene el grupo propietario y no tiene alquileres pendientes
+ var ret = RepositorioUsuarios.Singleton.BajaCliente(Dni);
+ return Ok(ret);
}
}
\ No newline at end of file
diff --git a/Aspnet/Controllers/PropiedadesController.cs b/Aspnet/Controllers/PropiedadesController.cs
index 9acfe43..0a7a5c2 100644
--- a/Aspnet/Controllers/PropiedadesController.cs
+++ b/Aspnet/Controllers/PropiedadesController.cs
@@ -11,6 +11,7 @@ public class PropiedadesController: ControllerBase {
public IActionResult ListarPropiedades([FromHeader(Name = "Auth")] string Auth) {
if (String.IsNullOrEmpty(Auth)) return Unauthorized();
var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 12);
+ if (validacion1 == false) validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 2);
if (validacion1 == false) return Unauthorized();
var ret = RepositorioPropiedades.Singleton.ListarPropiedades();
@@ -81,6 +82,7 @@ public class PropiedadesController: ControllerBase {
Ubicacion = propiedad.Ubicacion,
Letra = propiedad.Letra ?? null,
Piso = propiedad.Piso ?? null,
+ Monto = propiedad.Monto,
};
var ret = RepositorioPropiedades.Singleton.AñadirPropiedad(Prop);
@@ -113,6 +115,7 @@ public class PropiedadesController: ControllerBase {
Letra = propiedad.Letra ?? null,
Piso = propiedad.Piso ?? null,
IdServicios = servs,
+ Monto = propiedad.Monto
};
bool ret = RepositorioPropiedades.Singleton.PatchPropiedad(Prop);
@@ -193,8 +196,9 @@ public class PropiedadesController: ControllerBase {
if (prop.Idtipropiedad <= 0) ret += "No tiene un tipo de propiedad asociada\n";
- if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad";
+ if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n";
+ if (prop.Monto<=1) ret += "El monto tiene que ser como minimo mayor a 0";
return ret;
}
@@ -211,8 +215,9 @@ public class PropiedadesController: ControllerBase {
if (prop.tipo <= 0) ret += "No tiene un tipo de propiedad asociada\n";
- if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad";
-
+ if (String.IsNullOrEmpty(prop.Ubicacion)) ret += "Tiene que definir la ubicacion de la propiedad\n";
+
+ if (prop.Monto<=1) ret += "El monto tiene que ser como minimo mayor a 0";
return ret;
}
diff --git a/Entidades/Admin/EmailGrupo.cs b/Entidades/Admin/EmailGrupo.cs
new file mode 100644
index 0000000..3db517c
--- /dev/null
+++ b/Entidades/Admin/EmailGrupo.cs
@@ -0,0 +1,2 @@
+namespace Entidades.Admin;
+public record EmailGrupo(string email, string grupo);
\ No newline at end of file
diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs
index 5191cf1..8f0a69a 100644
--- a/Entidades/Alquilafacilcontext.cs
+++ b/Entidades/Alquilafacilcontext.cs
@@ -436,6 +436,9 @@ public partial class AlquilaFacilContext : DbContext
.HasMaxLength(1)
.IsFixedLength()
.HasColumnName("letra");
+ entity.Property(e => e.Monto)
+ .HasPrecision(10)
+ .HasColumnName("monto");
entity.Property(e => e.Piso)
.HasColumnType("int(11)")
.HasColumnName("piso");
diff --git a/Entidades/Dto/AltaPropiedadDto.cs b/Entidades/Dto/AltaPropiedadDto.cs
index 86865ce..a549463 100644
--- a/Entidades/Dto/AltaPropiedadDto.cs
+++ b/Entidades/Dto/AltaPropiedadDto.cs
@@ -6,4 +6,5 @@ public class AltaPropiedadDto {
public string? Letra { get; set; } = null;
public string Email { get; set; } = string.Empty;
public int Idtipropiedad { get; set; }
+ public int Monto { get; set; }
}
\ No newline at end of file
diff --git a/Entidades/Dto/PatchPropiedadDto.cs b/Entidades/Dto/PatchPropiedadDto.cs
index e146ce7..f7a01d5 100644
--- a/Entidades/Dto/PatchPropiedadDto.cs
+++ b/Entidades/Dto/PatchPropiedadDto.cs
@@ -1,3 +1,3 @@
namespace Entidades.Dto;
-public record PatchPropiedadDto(int id, string Ubicacion, int Canthabitaciones, int? Piso, string? Letra, string Email, int tipo, List Servicios);
+public record PatchPropiedadDto(int id, string Ubicacion, int Canthabitaciones, int? Piso, string? Letra, string Email, int tipo, List Servicios, int Monto);
diff --git a/Entidades/Dto/PropiedadesDto.cs b/Entidades/Dto/PropiedadesDto.cs
index b4aa423..274206f 100644
--- a/Entidades/Dto/PropiedadesDto.cs
+++ b/Entidades/Dto/PropiedadesDto.cs
@@ -7,4 +7,5 @@ public class PropiedadesDto {
public string letra { get; set; } = "";
public string Tipo { get; set; } = "";
public string? Servicios {get;set;} = "";
+ public int Monto { get; set; }
}
diff --git a/Entidades/Propiedade.cs b/Entidades/Propiedade.cs
index 8d47663..c5ca2b2 100644
--- a/Entidades/Propiedade.cs
+++ b/Entidades/Propiedade.cs
@@ -21,6 +21,8 @@ public partial class Propiedade
public int? Idestado { get; set; }
+ public decimal Monto { get; set; }
+
public virtual ICollection Contratos { get; set; } = new List();
public virtual Cliente? DnipropietarioNavigation { get; set; }
diff --git a/Front/src/Componentes/PublicacionPropiedad.svelte b/Front/src/Componentes/PublicacionPropiedad.svelte
index 2d43cd4..d905ed9 100644
--- a/Front/src/Componentes/PublicacionPropiedad.svelte
+++ b/Front/src/Componentes/PublicacionPropiedad.svelte
@@ -17,6 +17,7 @@
Piso: {prop.piso || "N/A"} Letra: {prop.letra || "N/A"} Servicios: {prop.servicios || "Sin servicios especificados"}
+ Monto: {prop.monto}
diff --git a/Front/src/Componentes/RowPropiedad.svelte b/Front/src/Componentes/RowPropiedad.svelte
index 819efa9..c9cdb15 100644
--- a/Front/src/Componentes/RowPropiedad.svelte
+++ b/Front/src/Componentes/RowPropiedad.svelte
@@ -3,7 +3,7 @@
import ModalEstatico from "./ModalEstatico.svelte";
import ModificarPropiedadForm from "./modificarPropiedadForm.svelte";
- let { id, ubicacion, tipo, letra, piso,canthabitaciones, servicios, btnbaja = "Baja" } = $props();
+ let { id, ubicacion, tipo, letra, piso,canthabitaciones, servicios, btnbaja = "Baja", monto } = $props();
import { urlG } from "../stores/urlStore";
@@ -45,6 +45,7 @@
{piso}
{tipo}
{servicios}
+
{monto}
@@ -56,7 +57,7 @@
{#if modificar}
-
+
{/if}
diff --git a/Front/src/Componentes/modificarPropiedadForm.svelte b/Front/src/Componentes/modificarPropiedadForm.svelte
index 13d7bce..709ec9b 100644
--- a/Front/src/Componentes/modificarPropiedadForm.svelte
+++ b/Front/src/Componentes/modificarPropiedadForm.svelte
@@ -2,7 +2,7 @@
import { urlG } from "../stores/urlStore";
import { onMount } from "svelte";
- let { canthabitaciones, id, letra, piso, tipo, ubicacion, servicios } = $props();
+ let { canthabitaciones, id, letra, piso, tipo, ubicacion, servicios, monto } = $props();
let serviciosSeleccionados: string[] = $state([]);
const serviciosDisponibles = ["Gas", "Internet", "Telefono", "Luz"];
@@ -53,6 +53,7 @@
ubicacion,
email,
servicios: serviciosSeleccionados,
+ monto
}),
});
if (response.ok) {
@@ -116,6 +117,17 @@
/>
+
+
+
+
{
try{
@@ -33,9 +36,9 @@
});
- async function cargaGrupos(dni: number){
+ async function cargaGrupos(cli: Cliente){
try {
- const response = await fetch($urlG+"/api/admin/clientes/grupo?Dni="+dni, {
+ const response = await fetch($urlG+"/api/admin/clientes/grupo?Dni="+cli.dni, {
method: "GET",
headers: {
"Auth": String(token),
@@ -45,6 +48,7 @@
let data = await response.json();
Grupos = data;
showAddmenu = true;
+ SelCliente = cli;
return;
}
@@ -74,6 +78,67 @@
}
}
+ async function añadirGrupo(e:Event, cli: Cliente, grupo:string){
+ e.preventDefault();
+ if (cli.dni == 0 || cli.email == "" || grupo == ""){
+ modaldata = "No se selecciono un cliente o Grupo";
+ return;
+ }
+ const email = cli.email;
+ try {
+ const response = await fetch($urlG+"/api/admin/cliente/addGrupo", {
+ method: "PATCH",
+ headers: {
+ "Auth": String(token),
+ 'Content-Type' : 'application/json',
+ },
+ body: JSON.stringify({email, grupo})
+ });
+
+ if (response.ok){
+ let data = await response.json();
+ modaldata = data.message;
+ cargaGrupos(cli);
+ return;
+ }
+ let data = await response.json();
+ modaldata = data.message;
+ } catch {
+ modaldata = "Falla la conexion al servidor";
+ }
+ }
+ async function BajaGrupo(e:Event, cli: Cliente, grupo:string){
+ e.preventDefault();
+ if (cli.dni == 0 || cli.email == "" || grupo == ""){
+ modaldata = "No se selecciono un cliente o Grupo";
+ return;
+ }
+ const email = cli.email;
+ if (grupo === "Propietario"){
+ if (confirm("Sos propietario si te desactivas de ese rol tus propiedades se van a dar de baja, Estas seguro?") == false) return;
+ }
+ try {
+ const response = await fetch($urlG+"/api/admin/cliente/rmGrupo", {
+ method: "PATCH",
+ headers: {
+ "Auth": String(token),
+ 'Content-Type' : 'application/json',
+ },
+ body: JSON.stringify({email, grupo})
+ });
+
+ if (response.ok){
+ let data = await response.json();
+ modaldata = data.message;
+ cargaGrupos(cli);
+ return;
+ }
+ let data = await response.json();
+ modaldata = data.message;
+ } catch {
+ modaldata = "Falla la conexion al servidor";
+ }
+ }
@@ -99,7 +164,7 @@
{#each Clientes as cli}
-
cargaGrupos(cli.dni)} in:fade>
+
cargaGrupos(cli)} in:fade>
{cli.dni}
{cli.nombre}
{cli.email}
@@ -131,13 +196,24 @@
+ {#if Grupos.length>0}
+
{#each Grupos as g}
{g.id}
{g.descripcion}
-
+
{/each}
+ {:else if SelCliente != null}
+
+
Este Cliente no tiene Grupos
+
+ {:else}
+
+
Seleccione un cliente para ver sus grupos
+
+ {/if}
@@ -145,14 +221,14 @@
-
+
+
+
+
{
+ public IQueryable? ObtenerContratosPorEmailInquilino(string email){
+ var con = Context;
+ try{
+ var listcont = con.Contratos.Where(x=>x.DniinquilinoNavigation.Email == email);
+ return listcont;
+ } catch {
+ return null;
+ }
+ }
+}
diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs
index 6269fc2..7bc44de 100644
--- a/Modelo/RepositorioPropiedades.cs
+++ b/Modelo/RepositorioPropiedades.cs
@@ -12,7 +12,7 @@ public class RepositorioPropiedades: RepositorioBase {
public IQueryable 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
+ 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
@@ -41,35 +41,36 @@ public class RepositorioPropiedades: RepositorioBase {
return prop;
}
-public bool AñadirPropiedad(Propiedade? prop) {
- if (prop == null) return false;
+ public bool AñadirPropiedad(Propiedade? prop) {
+ if (prop == null) return false;
- var con = Context;
+ var con = Context;
- if (string.IsNullOrEmpty(prop.Letra)) prop.Letra = "_";
+ if (string.IsNullOrEmpty(prop.Letra)) prop.Letra = "_";
- var filasInsertadasParam = new MySqlParameter("@p_filas_insertadas", SqlDbType.Int)
- {
- Direction = ParameterDirection.Output
- };
+ 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
- );
+ // 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;
-}
+ return (int)filasInsertadasParam.Value == 1? true: false;
+ }
public bool PatchPropiedad(Propiedade prop) {
var con = Context;
@@ -82,6 +83,7 @@ public bool AñadirPropiedad(Propiedade? prop) {
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) {
@@ -95,7 +97,7 @@ public bool AñadirPropiedad(Propiedade? prop) {
public IQueryable 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
+ 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
@@ -111,7 +113,7 @@ public bool AñadirPropiedad(Propiedade? prop) {
public IQueryable 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
+ 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
@@ -326,4 +328,17 @@ public bool AñadirPropiedad(Propiedade? prop) {
var ret = Context.Database.SqlQuery(sqlq);
return ret;
}
+
+ public bool BajaPropiedades(string email) {
+ var con = Context;
+ try {
+ IQueryable listprop = con.Propiedades.Where(x=>x.DnipropietarioNavigation.Email == email);
+ foreach (var item in listprop) {
+ item.Idestado = 3;
+ }
+ } catch {
+ return false;
+ }
+ return Guardar(con);
+ }
}
\ No newline at end of file
diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs
index a2db2c0..c93c352 100644
--- a/Modelo/RepositorioUsuarios.cs
+++ b/Modelo/RepositorioUsuarios.cs
@@ -129,4 +129,48 @@ public class RepositorioUsuarios: RepositorioBase {
Habilitado = x.Habilitado});
return list;
}
+
+ public bool AñadirClienteAGrupo(string email, string grupo) {
+ var con = Context;
+
+ var cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email);
+ var gru = con.Grupos.FirstOrDefault(x => x.Nombre == grupo);
+
+ if (cli == null || gru == null) {
+ return false;
+ }
+
+ cli.Idgrupos.Add(gru);
+ return Guardar(con);
+ }
+
+ public bool EliminarClienteAGrupo(string email, string grupo) {
+ var con = Context;
+
+ var cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email);
+ var gru = con.Grupos.FirstOrDefault(x => x.Nombre == grupo);
+
+ if (cli == null || gru == null) {
+ return false;
+ }
+ cli.Idgrupos.Remove(gru);
+ return Guardar(con);
+ }
+
+ public bool BajaCliente(long dni) {
+ var con = Context;
+
+ Cliente? cli = con.Clientes.Include(x=>x.Idgrupos).FirstOrDefault(x=>x.Dni == dni);
+ if (cli == null) return false;
+
+ cli.Habilitado = 0;
+
+ return Guardar(con);
+ }
+
+ public Cliente? ObtenerClientePorDni(long dni) {
+ var con = Context;
+ Cliente? cli = con.Clientes.FirstOrDefault(x=>x.Dni == dni);
+ return cli;
+ }
}