public List <MenuDTO> ListarMenuPrincipalAccesos(string idTipoUsuario)
        {
            List <MenuDTO>       menuReturn = new List <MenuDTO>();
            List <MenuPrincipal> menu       = this.ObtenerMenuPrincipal();

            TipoUsuario tipoUsuario = this.TipoUsuarioObtener(idTipoUsuario.ConvertirInt());

            TipoUsuarioAcceso tipoUsuarioAcceso = null;
            NivelAcceso       permiso           = null;

            menu.ForEach(delegate(MenuPrincipal menuPrincipal)
            {
                List <MenuSecundario> items = menuPrincipal.Items.ToList <MenuSecundario>()
                                              .OrderBy(item => item.Orden)
                                              .ToList <MenuSecundario>();

                if (items == null || items.Count == 0)
                {
                    tipoUsuarioAcceso = tipoUsuario.Permisos.ToList <TipoUsuarioAcceso>().Find(delegate(TipoUsuarioAcceso acceso) { return(acceso.IdMenuPrincipal == menuPrincipal.Id); });
                    if (tipoUsuarioAcceso != null)
                    {
                        permiso = tipoUsuarioAcceso.NivelAcceso;
                    }
                    else
                    {
                        permiso = new NivelAcceso((int)NIVEL_ACCESO.SIN_ACCESO, "SIN ACCESO");
                    }
                }
                else
                {
                    permiso = new NivelAcceso(0, string.Empty);
                }

                menuReturn.Add(new MenuDTO(menuPrincipal.Id, menuPrincipal.Descripcion, -1, string.Empty, permiso.Id, permiso.Descripcion));

                items.ForEach(delegate(MenuSecundario menuSecundario)
                {
                    tipoUsuarioAcceso = tipoUsuario.Permisos.ToList <TipoUsuarioAcceso>().Find(delegate(TipoUsuarioAcceso acceso) { return(acceso.IdMenuSecundario == menuSecundario.Id); });
                    if (tipoUsuarioAcceso != null)
                    {
                        permiso = tipoUsuarioAcceso.NivelAcceso;
                    }
                    else
                    {
                        permiso = new NivelAcceso((int)NIVEL_ACCESO.SIN_ACCESO, "SIN ACCESO");
                    }

                    menuReturn.Add(new MenuDTO(menuPrincipal.Id, string.Empty, menuSecundario.Id, menuSecundario.Descripcion, permiso.Id, permiso.Descripcion));
                });
            });

            return(menuReturn);
        }
        public void TipoUsuarioGrabar(string id, string descripcion, string permisos)
        {
            ServicioParametricas servParametricas = new ServicioParametricas();
            TipoUsuario          tipoUSR          = null;

            int _id = -1;

            if (!int.TryParse(id, out _id))
            {
                _id = -1;
            }

            if (_id == -1)
            {
                tipoUSR = new TipoUsuario();
            }
            else
            {
                tipoUSR = this.TipoUsuarioObtener(_id);
            }

            tipoUSR.Descripcion = descripcion == null ? string.Empty : descripcion;
            tipoUSR.Vigente     = true;

            if (permisos.Trim().Length > 0)
            {
                TipoUsuarioAcceso tipoUsuarioAcceso     = null;
                string[]          permisosSeleccionados = permisos.Substring(1).Split(';');

                foreach (string permiso in permisosSeleccionados)
                {
                    tipoUsuarioAcceso = new TipoUsuarioAcceso();
                    string[] menuAccesos = permiso.Split(',');

                    tipoUsuarioAcceso.IdMenuPrincipal  = menuAccesos[0].ConvertirInt();
                    tipoUsuarioAcceso.IdMenuSecundario = menuAccesos[1].ConvertirInt();
                    tipoUsuarioAcceso.NivelAcceso      = servParametricas.ObtenerObjeto <NivelAcceso>(menuAccesos[2].ConvertirInt());

                    tipoUSR.AsignarPermiso(tipoUsuarioAcceso);
                }
            }

            RepositoryGenerico <TipoUsuario> repository = new RepositoryGenerico <TipoUsuario>();

            repository.Actualizar(tipoUSR);
        }