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);
        }
Beispiel #2
0
        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));
        }