feat: terminado tema desabilitacion cliente

This commit is contained in:
2024-12-31 20:24:08 -03:00
parent f1c9632855
commit 872415cdde
19 changed files with 320 additions and 48 deletions

View File

@@ -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<GrupoAdmin> 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<PropiedadesDto> 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<PropiedadesDto> 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);
}
}

View File

@@ -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;
}

View File

@@ -0,0 +1,2 @@
namespace Entidades.Admin;
public record EmailGrupo(string email, string grupo);

View File

@@ -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");

View File

@@ -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; }
}

View File

@@ -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<string> Servicios);
public record PatchPropiedadDto(int id, string Ubicacion, int Canthabitaciones, int? Piso, string? Letra, string Email, int tipo, List<string> Servicios, int Monto);

View File

@@ -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; }
}

View File

@@ -21,6 +21,8 @@ public partial class Propiedade
public int? Idestado { get; set; }
public decimal Monto { get; set; }
public virtual ICollection<Contrato> Contratos { get; set; } = new List<Contrato>();
public virtual Cliente? DnipropietarioNavigation { get; set; }

View File

@@ -17,6 +17,7 @@
<strong>Piso:</strong> {prop.piso || "N/A"}<br>
<strong>Letra:</strong> {prop.letra || "N/A"}<br>
<strong>Servicios:</strong> {prop.servicios || "Sin servicios especificados"}
<strong>Monto:</strong> {prop.monto}<br>
</p>
<button class="btn btn-primary">Consultar</button>
</div>

View File

@@ -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 @@
<td>{piso}</td>
<td>{tipo}</td>
<td>{servicios}</td>
<td>{monto}</td>
<td class="text-end">
<button class="btn btn-outline-secondary" onclick={()=> setmod()}>Modificar</button>
<button class="btn btn-outline-danger" onclick={() => BajaPropiedad()}>{btnbaja}</button>
@@ -56,7 +57,7 @@
{#if modificar}
<tr transition:fade={{duration:100}}>
<td colspan="8">
<ModificarPropiedadForm {id} {ubicacion} {canthabitaciones} {letra} {piso} {tipo} {servicios}/>
<ModificarPropiedadForm {id} {ubicacion} {canthabitaciones} {letra} {piso} {tipo} {servicios} {monto}/>
</td>
</tr>
{/if}

View File

@@ -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 @@
/>
<label for="piso">Piso</label>
</div>
<div class="form-floating mb-3">
<input
type="number"
id="monto"
class="form-control"
bind:value={monto}
min="1"
placeholder={monto}
/>
<label for="monto">Monto</label>
</div>
<div class="form-floating mb-3">
<input
type="text"

View File

@@ -11,7 +11,10 @@
let Grupos:any[] = $state([]);
let modaldata = $state();
let token = sessionStorage.getItem("token");
let showAddmenu: boolean = $state(false)
let showAddmenu: boolean = $state(false);
let grupo:string;
let SelCliente: Cliente = $state();
onMount(async () => {
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";
}
}
</script>
<NavBarAutocompletable/>
@@ -99,7 +164,7 @@
</thead>
<tbody>
{#each Clientes as cli}
<tr onclick={() => cargaGrupos(cli.dni)} in:fade>
<tr onclick={() => cargaGrupos(cli)} in:fade>
<td>{cli.dni}</td>
<td>{cli.nombre}</td>
<td>{cli.email}</td>
@@ -131,13 +196,24 @@
</tr>
</thead>
<tbody>
{#if Grupos.length>0}
{#each Grupos as g}
<tr in:fade>
<td>{g.id}</td>
<td>{g.descripcion}</td>
<td><button class="btn btn-outline-danger" onclick={()=>modaldata = "Hi babe"}>Baja</button></td>
<td><button class="btn btn-outline-danger" onclick={(e)=>BajaGrupo(e, SelCliente, g.descripcion)}>Baja</button></td>
</tr>
{/each}
{:else if SelCliente != null}
<tr>
<td colspan="2">Este Cliente no tiene Grupos</td>
</tr>
{:else}
<tr>
<td colspan="2">Seleccione un cliente para ver sus grupos</td>
</tr>
{/if}
</tbody>
</table>
@@ -145,14 +221,14 @@
<div in:fade>
<BarraHorizontalConTexto text="Añadir Grupos al Usuario"/>
<form class="card card-body">
<form class="card card-body" onsubmit={(e) => añadirGrupo(e,SelCliente, grupo)}>
<div class="mb-3">
<label for="userRole" class="form-label">Seleccionar Grupo</label>
<select id="userRole" class="form-select">
<option value="1">Propietario</option>
<option value="2">Inquilino</option>
<option value="3">Admin</option>
<option value="4">Informes</option>
<select id="userRole" class="form-select" bind:value={grupo}>
<option value="Propietario">Propietario</option>
<option value="Inquilino">Inquilino</option>
<option value="Admin">Admin</option>
<option value="Informes">Informes</option>
</select>
</div>
<button class="btn btn-primary" type="submit">Añadir</button>

View File

@@ -52,12 +52,13 @@
<th>Piso</th>
<th>Tipo</th>
<th>Servicios</th>
<th>Monto</th>
<th></th>
</tr>
</thead>
<tbody>
{#each $propiedades as propiedad}
<RowPropiedad id={propiedad.id} ubicacion={propiedad.ubicacion} letra={propiedad.letra} piso={propiedad.piso} tipo={propiedad.tipo} canthabitaciones={propiedad.canthabitaciones} servicios={propiedad.servicios} />
<RowPropiedad id={propiedad.id} ubicacion={propiedad.ubicacion} letra={propiedad.letra} piso={propiedad.piso} tipo={propiedad.tipo} canthabitaciones={propiedad.canthabitaciones} servicios={propiedad.servicios} monto={propiedad.monto} />
{/each}
</tbody>
</table>

View File

@@ -53,12 +53,13 @@
<th>Piso</th>
<th>Tipo</th>
<th>Servicios</th>
<th>Monto</th>
<th></th>
</tr>
</thead>
<tbody>
{#each $propiedades as propiedad}
<RowPropiedad id={propiedad.id} ubicacion={propiedad.ubicacion} letra={propiedad.letra} piso={propiedad.piso} tipo={propiedad.tipo} canthabitaciones={propiedad.canthabitaciones} servicios={propiedad.servicios} btnbaja={"Alta"}/>
<RowPropiedad id={propiedad.id} ubicacion={propiedad.ubicacion} letra={propiedad.letra} piso={propiedad.piso} tipo={propiedad.tipo} canthabitaciones={propiedad.canthabitaciones} servicios={propiedad.servicios} btnbaja={"Alta"} monto={propiedad.monto}/>
{/each}
</tbody>
</table>

View File

@@ -12,6 +12,7 @@
letra: "",
email: localStorage.getItem("email") || "",
idtipropiedad: 1,
monto: 1,
};
let token = sessionStorage.getItem("token");
@@ -93,6 +94,17 @@
/>
<label for="piso">Piso</label>
</div>
<div class="form-floating mb-3">
<input
type="number"
id="monto"
class="form-control"
bind:value={propiedad.monto}
min="1"
placeholder="1"
/>
<label for="monto">Monto</label>
</div>
<div class="form-floating mb-3">
<input
type="text"

View File

@@ -5,7 +5,8 @@ export type PropiedadDto = {
piso: string | null,
letra: string | null,
canthabitaciones: number,
servicios: string
servicios: string,
monto: number
}
export type Permiso = {
id: number;
@@ -32,4 +33,5 @@ export type Propiedad = {
letra: string,
email: string,
idtipropiedad: number,
monto: number
};

View File

@@ -0,0 +1,15 @@
using Entidades;
using Microsoft.EntityFrameworkCore;
namespace Modelo;
public class RepositorioContratos: RepositorioBase<RepositorioContratos> {
public IQueryable<Contrato>? ObtenerContratosPorEmailInquilino(string email){
var con = Context;
try{
var listcont = con.Contratos.Where(x=>x.DniinquilinoNavigation.Email == email);
return listcont;
} catch {
return null;
}
}
}

View File

@@ -12,7 +12,7 @@ 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
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<RepositorioPropiedades> {
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<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
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<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
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<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);
}
}

View File

@@ -129,4 +129,48 @@ public class RepositorioUsuarios: RepositorioBase<RepositorioUsuarios> {
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;
}
}