public ActionResult Create() { ViewBag.Empresas = _Empresas; var viewModel = new BOAccountCreateViewModel { Ativo = true }; return(View(viewModel)); }
public async Task <ActionResult> Create(BOAccountCreateViewModel model) { ViewBag.Empresas = _Empresas; for (int i = 0; i < model.EmpresasGrupos.Count; i++) { model.EmpresasGrupos[i].PerfilImpressora = PerfilImpressorasList(model.EmpresasGrupos[i].IdEmpresa, idPerfilImpressora: model.EmpresasGrupos[i].IdPerfilImpressoraPadrao); } Func <string, ViewResult> errorView = (error) => { if (error != null) { Notify.Error(Resources.CommonStrings.RequestUnexpectedErrorMessage); } return(View(model)); }; if (!ModelState.IsValid) { return(errorView(null)); } if (model.EmpresasGrupos.Any(x => x.IdPerfilImpressoraPadrao == null)) { ModelState.AddModelError(nameof(model.EmpresasGrupos), "Selecione um Perfil de Impressão Padrão em todas as empresas."); } var existingUserByName = await UserManager.FindByNameAsync(model.UserName).ConfigureAwait(false); if (existingUserByName != null) { ModelState.AddModelError(nameof(model.UserName), "O código de usuário informado já existe"); } var existsUserByEmail = await UserManager.FindByEmailAsync(model.Email).ConfigureAwait(false); if (existsUserByEmail != null) { ModelState.AddModelError(nameof(model.Email), "E-mail informado já utilizado por outro usuário"); } if (model.EmpresasGrupos.NullOrEmpty()) { ModelState.AddModelError(nameof(model.EmpresasGrupos), Res.RequiredOnlyCompany); return(errorView(null)); } if (!model.EmpresasGrupos.All(w => w.Grupos.Any(a => a.IsSelected))) { ModelState.AddModelError(nameof(model.EmpresasGrupos), Res.RequiredOnlyGroup); return(errorView(null)); } if (!model.EmpresasGrupos.Where(w => w.IsEmpresaPrincipal).Any()) { ModelState.AddModelError(nameof(model.EmpresasGrupos), "Selecione a empresa principal do usuário"); return(errorView(null)); } for (int i = 0; i < model.EmpresasGrupos.Count; i++) { if (model.EmpresasGrupos[0].CorredorEstoqueInicio == null && model.EmpresasGrupos[0].CorredorEstoqueFim != null) { ModelState.AddModelError($"[{i}].CorredorEstoque", "Preencha o valor inicial do Corredor Estoque"); } if (model.EmpresasGrupos[0].CorredorEstoqueInicio != null && model.EmpresasGrupos[0].CorredorEstoqueFim == null) { ModelState.AddModelError($"[{i}].CorredorEstoque", "Preencha o valor final do Corredor Estoque"); } if (model.EmpresasGrupos[0].CorredorEstoqueInicio.HasValue && model.EmpresasGrupos[0].CorredorEstoqueFim.HasValue) { if (model.EmpresasGrupos[0].CorredorEstoqueInicio.Value > model.EmpresasGrupos[0].CorredorEstoqueFim.Value) { ModelState.AddModelError($"[{i}].CorredorEstoque", "O valor inicial do Corredor Estoque não pode ser maior do que o final"); } } if (model.EmpresasGrupos[0].CorredorSeparacaoInicio == null && model.EmpresasGrupos[0].CorredorSeparacaoFim != null) { ModelState.AddModelError($"[{i}].CorredorSeparacao", "Preencha o valor inicial do Corredor Separação"); } if (model.EmpresasGrupos[0].CorredorSeparacaoInicio != null && model.EmpresasGrupos[0].CorredorSeparacaoFim == null) { ModelState.AddModelError($"[{i}].CorredorSeparacao", "Preencha o valor final do Corredor Separação"); } if (model.EmpresasGrupos[0].CorredorSeparacaoInicio.HasValue && model.EmpresasGrupos[0].CorredorSeparacaoFim.HasValue) { if (model.EmpresasGrupos[0].CorredorSeparacaoInicio.Value > model.EmpresasGrupos[0].CorredorSeparacaoFim.Value) { ModelState.AddModelError($"[{i}].CorredorSeparacao", "O valor inicial do Corredor Separação não pode ser maior do que o final"); } } } if (!ModelState.IsValid) { return(errorView(null)); } var user = new ApplicationUser { UserName = model.UserName, Email = model.Email }; user.Id = Guid.NewGuid().ToString(); var result = await UserManager.CreateAsync(user, model.Password).ConfigureAwait(false); if (!result.Succeeded) { throw new InvalidOperationException(Resources.CommonStrings.RequestUnexpectedErrorMessage); } var perfilUsuario = new PerfilUsuario { Ativo = model.Ativo, Cargo = model.Cargo, DataNascimento = model.DataNascimento, Departamento = model.Departamento, Nome = model.Nome, UsuarioId = user.Id, EmpresaId = model.EmpresasGrupos.Where(w => w.IsEmpresaPrincipal).First().IdEmpresa }; _unitOfWork.PerfilUsuarioRepository.Add(perfilUsuario); _unitOfWork.SaveChanges(); foreach (var f in model.EmpresasGrupos) { var newUsuarioEmpresa = new UsuarioEmpresa { UserId = user.Id, IdEmpresa = f.IdEmpresa, PerfilUsuarioId = perfilUsuario.PerfilUsuarioId, IdPerfilImpressoraPadrao = f.IdPerfilImpressoraPadrao, CorredorEstoqueInicio = f.CorredorEstoqueInicio, CorredorEstoqueFim = f.CorredorEstoqueFim, CorredorSeparacaoInicio = f.CorredorSeparacaoInicio, CorredorSeparacaoFim = f.CorredorSeparacaoFim, }; _unitOfWork.UsuarioEmpresaRepository.Add(newUsuarioEmpresa); } _unitOfWork.SaveChanges(); var empresasGruposNew = new StringBuilder(); foreach (var item in model.EmpresasGrupos.Where(x => x.Grupos.Any(y => y.IsSelected))) { IEnumerable <string> selectedRoles = item.Grupos.Where(x => x.IsSelected).Select(x => x.Name); empresasGruposNew.AppendLine(string.Format("{0}: {1}", item.Nome, string.Join(", ", selectedRoles.ToArray()))); empresasGruposNew.AppendLine(" || "); result = UserManager.AddToRolesByEmpresa(user, selectedRoles.ToArray(), item.IdEmpresa); if (!result.Succeeded) { Notify.Error(Resources.CommonStrings.RequestUnexpectedErrorMessage); return(View(model)); } } var userInfo = new BackOfficeUserInfo(); Notify.Success(Resources.CommonStrings.RegisterCreatedSuccessMessage); return(RedirectToAction("Index")); }