112 lines
3.4 KiB
C#
112 lines
3.4 KiB
C#
using Entidades;
|
|
using Entidades.Admin;
|
|
using Entidades.Dto;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Modelo;
|
|
public class RepositorioGrupos : RepositorioBase<RepositorioGrupos>
|
|
{
|
|
public bool AddGrupo(GrupoDto grupo, Cliente cli)
|
|
{
|
|
var con = Context;
|
|
|
|
var g = new Grupo
|
|
{
|
|
Id = con.Grupos.Max(x => x.Id) + 1,
|
|
Nombre = grupo.Nombre,
|
|
IdGrupoHijos = con.Grupos.Where(x => grupo.GruposIncluidos.Contains(x.Nombre)).ToList(),
|
|
Idpermisos = con.Permisos.Where(x => grupo.Permisos.Select(x => x.Id).Contains(x.Id)).ToList(),
|
|
};
|
|
con.Grupos.Add(g);
|
|
GenerarLog(con, cli.Dni, $"Alta Grupo: {g.Nombre}");
|
|
return Guardar(con);
|
|
}
|
|
public bool PatchGrupo(GrupoDto grupo, Cliente cli)
|
|
{
|
|
var con = Context;
|
|
var g = con.Grupos
|
|
.Include(x => x.IdGrupoHijos)
|
|
.Include(x => x.Idpermisos).FirstOrDefault(x => x.Id == grupo.idgrupo);
|
|
|
|
if (g == null)
|
|
{
|
|
return false;
|
|
}
|
|
var listg = grupo.GruposIncluidos.ToList();
|
|
if (grupo.GruposIncluidos != null)
|
|
{
|
|
g.IdGrupoHijos = con.Grupos.Where(x => listg.Contains(x.Nombre)).ToList();
|
|
|
|
}
|
|
|
|
if (grupo.Permisos != null)
|
|
{
|
|
g.Idpermisos = con.Permisos.Where(x => grupo.Permisos.Select(p => p.Id).Contains(x.Id)).ToList();
|
|
}
|
|
|
|
GenerarLog(con, cli.Dni, "Patch Grupo");
|
|
return Guardar(con);
|
|
|
|
}
|
|
|
|
public (bool, bool) ToggleGrupo(int id, Cliente cli)
|
|
{
|
|
var con = Context;
|
|
var grupo = con.Grupos.FirstOrDefault(x => x.Id == id);
|
|
if (grupo == null) return (false, false);
|
|
if (grupo.Habilitado == null) grupo.Habilitado = false;
|
|
|
|
grupo.Habilitado = !grupo.Habilitado;
|
|
|
|
GenerarLog(con, cli.Dni, $"Se dio de {(grupo.Habilitado == true ? "alta" : "baja")} el grupo: {id}");
|
|
return (Guardar(con), grupo.Habilitado ?? false);
|
|
}
|
|
|
|
public IQueryable<Grupo> ListarTodosLosGrupos()
|
|
{
|
|
var con = Context;
|
|
var grupos = con.Grupos.Include(x => x.IdGrupoHijos).ThenInclude(x => x.Idpermisos).Include(x => x.Idpermisos);
|
|
return grupos;
|
|
}
|
|
|
|
public IQueryable<Permiso> ListarPermisosDeGrupo(string grupo)
|
|
{
|
|
var con = Context;
|
|
var listg = con.Grupos
|
|
.Where(x => x.Habilitado == true)
|
|
.Include(x => x.Idpermisos)
|
|
.Include(x => x.IdGrupoHijos)
|
|
.ThenInclude(x => x.Idpermisos).ToList();
|
|
var g = listg.FirstOrDefault(x => x.Nombre == grupo);
|
|
if (g == null) return Enumerable.Empty<Permiso>().AsQueryable();
|
|
|
|
var permisos = new HashSet<Permiso>();
|
|
var visitados = new HashSet<int>();
|
|
g.ObtenerPermisos(permisos, visitados);
|
|
|
|
return permisos.AsQueryable();
|
|
}
|
|
|
|
public List<Grupo> ObtenerGruposPorDni(long Dni)
|
|
{
|
|
var con = Context;
|
|
var grupos = con.Clientes.Where(x => x.Dni == Dni).SelectMany(x => x.Idgrupos).ToList();
|
|
return grupos;
|
|
}
|
|
|
|
public bool CheckGrupos(string token, string grupo)
|
|
{
|
|
var con = Context;
|
|
Cliente? cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Token == token);
|
|
if (cli == null) return false;
|
|
|
|
Grupo? gru = con.Grupos.FirstOrDefault(x => x.Nombre == grupo);
|
|
if (gru == null) return false;
|
|
|
|
if (cli.Idgrupos.Contains(gru)) return true;
|
|
|
|
return false;
|
|
|
|
}
|
|
}
|