public async Task <ActionResult> AdicionarEmpresa(long id)
        {
            List <GroupItemViewModel> gruposPermissoesUsuario = (await UserManager.GetUserRolesByIdEmpresa(User.Identity.GetUserId(), id).ConfigureAwait(false))
                                                                .OrderBy(x => x).Select(x => new GroupItemViewModel {
                IsSelected = false, Name = x
            }).ToList();

            if (gruposPermissoesUsuario.Any(x => x.Name == "Administrador"))
            {
                gruposPermissoesUsuario = RoleManager.Roles.OrderBy(x => x.Name).Select(x => new GroupItemViewModel {
                    IsSelected = false, Name = x.Name
                }).ToList();
            }

            var perfilImpressoras = PerfilImpressorasList(id);

            var empresasGrupos = new EmpresaGrupoViewModel
            {
                IdEmpresa        = id,
                Nome             = Empresas.First(f => f.IdEmpresa == id).Nome,
                Grupos           = gruposPermissoesUsuario,
                PerfilImpressora = perfilImpressoras
            };

            var list = new List <EmpresaGrupoViewModel>
            {
                empresasGrupos
            };

            return(PartialView("_EmpresaGrupo", list));
        }
        public async Task <ActionResult> Edit(string id)
        {
            ViewBag.Empresas = _Empresas;

            ApplicationUser user = await UserManager.FindByNameAsync(id).ConfigureAwait(false);

            if (user == null)
            {
                throw new HttpException(404, "Not found");
            }

            var empresas = _unitOfWork.UsuarioEmpresaRepository.GetAllEmpresasByUserId(user.Id);

            empresas = Empresas.Where(w => empresas.Contains(w.IdEmpresa)).Select(s => s.IdEmpresa).ToList();

            var usuarioEmpresas = _unitOfWork.UsuarioEmpresaRepository.Tabela().Where(x => x.UserId == user.Id).ToList();

            var perfil = _unitOfWork.PerfilUsuarioRepository.GetByUserId(user.Id);

            var model = new BOAccountEditViewModel
            {
                Ativo           = perfil.Ativo,
                Cargo           = perfil.Cargo,
                DataNascimento  = perfil.DataNascimento,
                Departamento    = perfil.Departamento,
                PerfilUsuarioId = perfil.PerfilUsuarioId,
                Nome            = perfil.Nome,
                Email           = user.Email,
                UserName        = user.UserName
            };

            foreach (long empresa in empresas)
            {
                var usuarioEmpresa = usuarioEmpresas.FirstOrDefault(x => x.IdEmpresa == empresa);

                var empGrupos = new EmpresaGrupoViewModel
                {
                    IdEmpresa                = empresa,
                    Nome                     = Empresas.First(f => f.IdEmpresa == empresa).Nome,
                    IsEmpresaPrincipal       = perfil.EmpresaId == empresa ? true : false,
                    IdPerfilImpressoraPadrao = usuarioEmpresa?.IdPerfilImpressoraPadrao,
                    PerfilImpressora         = PerfilImpressorasList(empresa, usuarioEmpresa?.IdPerfilImpressoraPadrao),
                    CorredorEstoqueInicio    = usuarioEmpresa?.CorredorEstoqueInicio,
                    CorredorEstoqueFim       = usuarioEmpresa?.CorredorEstoqueFim,
                    CorredorSeparacaoInicio  = usuarioEmpresa?.CorredorSeparacaoInicio,
                    CorredorSeparacaoFim     = usuarioEmpresa?.CorredorSeparacaoFim,
                };

                List <string> gruposPermissoesUsuarioEdicao = (await UserManager.GetUserRolesByIdEmpresa(user.Id, empresa).ConfigureAwait(false)).OrderBy(x => x).ToList();
                List <string> gruposPermissoesUsuarioLogado = (await UserManager.GetUserRolesByIdEmpresa(User.Identity.GetUserId(), empresa).ConfigureAwait(false)).OrderBy(x => x).ToList();

                if (gruposPermissoesUsuarioLogado.Contains("Administrador"))
                {
                    List <string> todosGrupos = RoleManager.Roles.OrderBy(x => x.Name).Select(x => x.Name).ToList();

                    foreach (var grupoPermissaoUsuario in todosGrupos)
                    {
                        var groupItemViewModel = new GroupItemViewModel
                        {
                            IsSelected = gruposPermissoesUsuarioEdicao.Any(x => x == grupoPermissaoUsuario),
                            Name       = grupoPermissaoUsuario
                        };

                        empGrupos.Grupos.Add(groupItemViewModel);
                    }
                }
                else
                {
                    var gruposPermissoesSemelhantes = gruposPermissoesUsuarioEdicao.Where(x => gruposPermissoesUsuarioLogado.Contains(x)).ToList();

                    foreach (var grupoPermissaoUsuario in gruposPermissoesSemelhantes)
                    {
                        var groupItemViewModel = new GroupItemViewModel
                        {
                            IsSelected = true,
                            Name       = grupoPermissaoUsuario
                        };

                        empGrupos.Grupos.Add(groupItemViewModel);
                    }
                }

                empGrupos.Grupos.OrderBy(x => x.Name);

                model.EmpresasGrupos.Add(empGrupos);
            }

            return(View(model));
        }