using Entidades; using Entidades.Admin; using Entidades.Dto; using Microsoft.EntityFrameworkCore; namespace Modelo; public class RepositorioGrupos : RepositorioBase { 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 ListarTodosLosGrupos() { var con = Context; var grupos = con.Grupos.Include(x => x.IdGrupoHijos).ThenInclude(x => x.Idpermisos).Include(x => x.Idpermisos); return grupos; } public IQueryable 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().AsQueryable(); var permisos = new HashSet(); var visitados = new HashSet(); g.ObtenerPermisos(permisos, visitados); return permisos.AsQueryable(); } public List 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; } }