private void Fill(SolicitacaoCreateModel model)
        {
            model.Areas = new SelectList(db.Areas, "Id", "Nome", 1);

            var itemsCodificacoes = db.CodificacoesAtivas
                .OrderBy(c => c.CentroDeCusto)
                .ThenBy(c => c.ContaMemo)
                .AsEnumerable()
                .Select(c => new
                {
                    Nome = string.Format("{2} - {3} : {0} - {1}",
                        c.DescricaoCentroDeCusto,
                        c.DescricaoContaMemo,
                        c.CentroDeCusto,
                        c.ContaMemo),
                    Id = c.Id
                });
            model.Codificacoes = new SelectList(itemsCodificacoes,
                "Id", "Nome", SolicitacaoBL.CODIFICACAO_DEFAULT_ID);

            model.Fornecedores = new SelectList(db.Fornecedores, "Id", "Nome", 1);
            model.Solicitacao = SolicitacaoBL.CriarSolicitacao();
        }
        public ActionResult Create(SolicitacaoCreateModel data)
        {
            StatusCriacaoSolicitacao statusUsuario = SolicitacaoBL.PodeCriarSolicitacao(User.Identity.Name);
            if (!ModelState.IsValid ||
                statusUsuario != StatusCriacaoSolicitacao.Permitido) //Inválido
            {
                if (!ModelState.IsValid)
                    ViewBag.error = "Dados inválidos";
                else
                    switch (statusUsuario)
                    {
                        case StatusCriacaoSolicitacao.AvaliacaoPendente:
                            ViewBag.error = "Usuário possui avaliações pendentes!";
                            break;
                        default:
                            ViewBag.error = "Erro na autenticação do usuário";
                            break;
                    }
                Fill(data);
                return View(data);
            }

            try
            {
                var user = db.Users.Find(User.Identity.Name);
                Solicitacao target = SolicitacaoBL.CriarSolicitacao(data.Solicitacao);
                target.Itens = data.Itens;
                target.User = user;

                db.Solicitacoes.Add(target);

                var avaliacao = AvaliacaoBL.CriarAvaliacao(target);

                db.Avaliacoes.Add(avaliacao);

                target.Avaliacao = avaliacao;

                db.SaveChanges();
            }
            catch (BusinessLogicException ex)
            {
                switch (ex.Razao)
                {
                    case StatusCriacaoSolicitacao.AvaliacaoPendente:
                        TempData.Add("ErrorMessage", "Usuário possui avaliações pendentes");
                        break;
                }
            }
            return RedirectToAction("Details", new { id = data.Solicitacao.Id });
        }
 public ActionResult Create()
 {
     var model = new SolicitacaoCreateModel();
     Fill(model);
     return View(model);
 }