public ActionResult UpdateRol(int IdRol, long IdModulo, bool Active) { try { using (SeguricelEntities db = new SeguricelEntities()) { Modulo modulo = db.Modulo.Where(x => x.IdModulo == IdModulo).FirstOrDefault(); if (Active) { Modulo_TipoUsuario moduloUsuario = new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdModulo, IdTipoUsuario = IdRol }; db.Modulo_TipoUsuario.Add(moduloUsuario); var chdQry1 = db.Modulo.Where(x => x.IdModuloPadre == IdModulo).Select(x => x.IdModulo); var chdQry2 = from m in db.Modulo where chdQry1.Contains((long)m.IdModuloPadre) select m.IdModulo; var chdQry3 = from m in db.Modulo where chdQry2.Contains((long)m.IdModuloPadre) select m.IdModulo; var chdQry4 = from m in db.Modulo where chdQry3.Contains((long)m.IdModuloPadre) select m.IdModulo; List<Modulo_TipoUsuario> Modulos = new List<Modulo_TipoUsuario>(); foreach (int IdNewModulo in chdQry1) { if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdNewModulo && x.IdTipoUsuario == IdRol).Count() == 0) Modulos.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdNewModulo, IdTipoUsuario = IdRol }); } if (chdQry2 != null && chdQry2.Count() > 0) { foreach (int IdNewModulo in chdQry2) { if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdNewModulo && x.IdTipoUsuario == IdRol).Count() == 0) Modulos.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdNewModulo, IdTipoUsuario = IdRol }); } } if (chdQry3 != null && chdQry3.Count() > 0) { foreach (int IdNewModulo in chdQry3) { if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdNewModulo && x.IdTipoUsuario == IdRol).Count() == 0) Modulos.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdNewModulo, IdTipoUsuario = IdRol }); } } if (chdQry4 != null && chdQry4.Count() > 0) { foreach (int IdNewModulo in chdQry4) { if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdNewModulo && x.IdTipoUsuario == IdRol).Count() == 0) Modulos.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdNewModulo, IdTipoUsuario = IdRol }); } } db.Modulo_TipoUsuario.AddRange(Modulos); while (modulo.IdModuloPadre != null) { long idModuloPadre = (long)modulo.IdModuloPadre; if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == idModuloPadre && x.IdTipoUsuario == IdRol).Count() == 0) db.Modulo_TipoUsuario.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = idModuloPadre, IdTipoUsuario = IdRol }); modulo = db.Modulo.Where(x => x.IdModulo == idModuloPadre).FirstOrDefault(); } } else { Modulo_TipoUsuario moduloUsuario = db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdModulo && x.IdTipoUsuario == IdRol).FirstOrDefault(); db.Modulo_TipoUsuario.Remove(moduloUsuario); var inQry1 = db.Modulo.Where(x => x.IdModuloPadre == IdModulo).Select(x => x.IdModulo); var inQry2 = from m in db.Modulo where inQry1.Contains((long)m.IdModuloPadre) select m.IdModulo; var inQry3 = from m in db.Modulo where inQry2.Contains((long)m.IdModuloPadre) select m.IdModulo; var inQry4 = from m in db.Modulo where inQry3.Contains((long)m.IdModuloPadre) select m.IdModulo; var data = from m in db.Modulo_TipoUsuario where (inQry1.Contains(m.IdModulo) || inQry2.Contains(m.IdModulo) || inQry3.Contains(m.IdModulo) || inQry4.Contains(m.IdModulo)) && m.IdTipoUsuario == IdRol select m; db.Modulo_TipoUsuario.RemoveRange(data); List<Modulo_TipoUsuario> forDelete = new List<Modulo_TipoUsuario>(); long IdModuloSelected = modulo.IdModulo; while (modulo.IdModuloPadre != null) { long IdModuloPadreDelete = (long)modulo.IdModuloPadre; long Childs = db.Modulo_TipoUsuario.Where(x => x.Modulo.IdModuloPadre == IdModuloPadreDelete && x.IdTipoUsuario == IdRol && x.IdModulo != IdModuloSelected).Count(); if (Childs == 0) { Modulo_TipoUsuario DeleteModulo = db.Modulo_TipoUsuario.Where(x => x.IdModulo == modulo.IdModuloPadre && x.IdTipoUsuario == IdRol).FirstOrDefault(); if (DeleteModulo != null) forDelete.Add(DeleteModulo); } else if (Childs == 1) { Modulo_TipoUsuario ChildModulo = db.Modulo_TipoUsuario.Where(x => x.Modulo.IdModuloPadre == IdModuloPadreDelete && x.IdTipoUsuario == IdRol && x.IdModulo != IdModuloSelected).FirstOrDefault(); if (forDelete.Contains(ChildModulo)) { Modulo_TipoUsuario DeleteModulo = db.Modulo_TipoUsuario.Where(x => x.IdModulo == modulo.IdModuloPadre && x.IdTipoUsuario == IdRol).FirstOrDefault(); forDelete.Add(DeleteModulo); } } modulo = db.Modulo.Where(x => x.IdModulo == IdModuloPadreDelete).FirstOrDefault(); } db.Modulo_TipoUsuario.RemoveRange(forDelete); } db.SaveChanges(); } } catch (Exception ex) { throw ex; } string returnURL = Url.Action("Roles", "Seguridad", new { Id = IdRol }).ToString(); return Json(returnURL); }
public ActionResult UpdateRol(int IdRol, long IdModulo, bool Active) { try { using (SeguricelEntities db = new SeguricelEntities()) { Modulo modulo = db.Modulo.Where(x => x.IdModulo == IdModulo).FirstOrDefault(); if (Active) { Modulo_TipoUsuario moduloUsuario = new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdModulo, IdTipoUsuario = IdRol }; db.Modulo_TipoUsuario.Add(moduloUsuario); var chdQry1 = db.Modulo.Where(x => x.IdModuloPadre == IdModulo).Select(x => x.IdModulo); var chdQry2 = from m in db.Modulo where chdQry1.Contains((long)m.IdModuloPadre) select m.IdModulo; var chdQry3 = from m in db.Modulo where chdQry2.Contains((long)m.IdModuloPadre) select m.IdModulo; var chdQry4 = from m in db.Modulo where chdQry3.Contains((long)m.IdModuloPadre) select m.IdModulo; List <Modulo_TipoUsuario> Modulos = new List <Modulo_TipoUsuario>(); foreach (int IdNewModulo in chdQry1) { if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdNewModulo && x.IdTipoUsuario == IdRol).Count() == 0) { Modulos.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdNewModulo, IdTipoUsuario = IdRol }); } } if (chdQry2 != null && chdQry2.Count() > 0) { foreach (int IdNewModulo in chdQry2) { if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdNewModulo && x.IdTipoUsuario == IdRol).Count() == 0) { Modulos.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdNewModulo, IdTipoUsuario = IdRol }); } } } if (chdQry3 != null && chdQry3.Count() > 0) { foreach (int IdNewModulo in chdQry3) { if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdNewModulo && x.IdTipoUsuario == IdRol).Count() == 0) { Modulos.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdNewModulo, IdTipoUsuario = IdRol }); } } } if (chdQry4 != null && chdQry4.Count() > 0) { foreach (int IdNewModulo in chdQry4) { if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdNewModulo && x.IdTipoUsuario == IdRol).Count() == 0) { Modulos.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = IdNewModulo, IdTipoUsuario = IdRol }); } } } db.Modulo_TipoUsuario.AddRange(Modulos); while (modulo.IdModuloPadre != null) { long idModuloPadre = (long)modulo.IdModuloPadre; if (db.Modulo_TipoUsuario.Where(x => x.IdModulo == idModuloPadre && x.IdTipoUsuario == IdRol).Count() == 0) { db.Modulo_TipoUsuario.Add(new Modulo_TipoUsuario { FechaAsignacion = DateTime.UtcNow, IdModulo = idModuloPadre, IdTipoUsuario = IdRol }); } modulo = db.Modulo.Where(x => x.IdModulo == idModuloPadre).FirstOrDefault(); } } else { Modulo_TipoUsuario moduloUsuario = db.Modulo_TipoUsuario.Where(x => x.IdModulo == IdModulo && x.IdTipoUsuario == IdRol).FirstOrDefault(); db.Modulo_TipoUsuario.Remove(moduloUsuario); var inQry1 = db.Modulo.Where(x => x.IdModuloPadre == IdModulo).Select(x => x.IdModulo); var inQry2 = from m in db.Modulo where inQry1.Contains((long)m.IdModuloPadre) select m.IdModulo; var inQry3 = from m in db.Modulo where inQry2.Contains((long)m.IdModuloPadre) select m.IdModulo; var inQry4 = from m in db.Modulo where inQry3.Contains((long)m.IdModuloPadre) select m.IdModulo; var data = from m in db.Modulo_TipoUsuario where (inQry1.Contains(m.IdModulo) || inQry2.Contains(m.IdModulo) || inQry3.Contains(m.IdModulo) || inQry4.Contains(m.IdModulo)) && m.IdTipoUsuario == IdRol select m; db.Modulo_TipoUsuario.RemoveRange(data); List <Modulo_TipoUsuario> forDelete = new List <Modulo_TipoUsuario>(); long IdModuloSelected = modulo.IdModulo; while (modulo.IdModuloPadre != null) { long IdModuloPadreDelete = (long)modulo.IdModuloPadre; long Childs = db.Modulo_TipoUsuario.Where(x => x.Modulo.IdModuloPadre == IdModuloPadreDelete && x.IdTipoUsuario == IdRol && x.IdModulo != IdModuloSelected).Count(); if (Childs == 0) { Modulo_TipoUsuario DeleteModulo = db.Modulo_TipoUsuario.Where(x => x.IdModulo == modulo.IdModuloPadre && x.IdTipoUsuario == IdRol).FirstOrDefault(); if (DeleteModulo != null) { forDelete.Add(DeleteModulo); } } else if (Childs == 1) { Modulo_TipoUsuario ChildModulo = db.Modulo_TipoUsuario.Where(x => x.Modulo.IdModuloPadre == IdModuloPadreDelete && x.IdTipoUsuario == IdRol && x.IdModulo != IdModuloSelected).FirstOrDefault(); if (forDelete.Contains(ChildModulo)) { Modulo_TipoUsuario DeleteModulo = db.Modulo_TipoUsuario.Where(x => x.IdModulo == modulo.IdModuloPadre && x.IdTipoUsuario == IdRol).FirstOrDefault(); forDelete.Add(DeleteModulo); } } modulo = db.Modulo.Where(x => x.IdModulo == IdModuloPadreDelete).FirstOrDefault(); } db.Modulo_TipoUsuario.RemoveRange(forDelete); } db.SaveChanges(); } } catch (Exception ex) { throw ex; } string returnURL = Url.Action("Roles", "Seguridad", new { Id = IdRol }).ToString(); return(Json(returnURL)); }