/// <summary>
        /// Faz as validações do ModelState
        /// </summary>
        /// <param name="parametros">The parametros.</param>
        /// <returns></returns>
        private bool SimulacaoValidate(ParametrosDaSimulacao parametros)
        {
            if (!ModelState.IsValid)
            {
                return(false);
            }
            if (parametros.FormulaBase != null && parametros.FormulaSimulacao != null)
            {
                var formulaBase = produtoDAO.GetFormula(parametros.CodigoDoProduto.Substring(0, 15),
                                                        parametros.Filial,
                                                        parametros.FormulaBase);

                var formulaSimulacao = produtoDAO.GetFormula(parametros.CodigoDoProduto.Substring(0, 15),
                                                             parametros.Filial,
                                                             parametros.FormulaSimulacao);

                if (formulaBase.Count == 0)
                {
                    ModelState.AddModelError("FORMULA", "Essa fórmula BASE não foi encontrada.");
                    return(false);
                }
                if (formulaSimulacao.Count == 0)
                {
                    ModelState.AddModelError("FORMULA", "Essa fórmula SIMULACAO não foi encontrada.");
                    return(false);
                }
            }
            return(true);
        }
        public async Task <ActionResult> Simulacao(ParametrosDaSimulacao parametros)
        {
            Response.Cache.SetCacheability(HttpCacheability.NoCache); // HTTP 1.1.
            Response.Cache.AppendCacheExtension("no-store, must-revalidate");
            Response.AppendHeader("Pragma", "no-cache");              // HTTP 1.0.
            Response.AppendHeader("Expires", "0");                    // Proxies.

            if (!SimulacaoValidate(parametros))
            {
                ViewBag.Filial = new SelectList(filiaisDAO.Get(),
                                                "codigo",
                                                "descricaoResumida");
                return(View("Parametros", parametros));
            }
            ///Permissões
            Usuario usuario = (Usuario)Session["usuario"];
            Role    role    = roleDAO.GetById((int)Session["role"]);
            PermissoesDaSimulacao permissoes = permissaoDAO.GetByRole(role);

            /* Produto Simulacao*/
            Produto produtoSimulacao = await produtoDAO.GetByCodigoAsync(parametros.CodigoDoProduto.Substring(0, 15),
                                                                         parametros.Filial,
                                                                         parametros.FormulaSimulacao,
                                                                         permissoes.TipoDeCalculo.Id);

            ViewBag.ProdutoSimulacao = produtoSimulacao;

            /*Produto Base*/
            Produto produtoBase = await produtoDAO.GetByCodigoAsync(parametros.CodigoDoProduto.Substring(0, 15),
                                                                    parametros.Filial,
                                                                    parametros.FormulaBase,
                                                                    permissoes.TipoDeCalculo.Id);

            ViewBag.ProdutoBase = produtoBase;


            //
            ViewBag.FormulaSimulacao = parametros.FormulaSimulacao ?? produtoSimulacao.Formula;
            ViewBag.FormulaBase      = parametros.FormulaBase ?? produtoBase.Formula;

            ViewBag.RendimentoEscolhido = produtoDAO.GetRendimentoLast(parametros.CodigoDoProduto,
                                                                       parametros.Filial);

            //Permissões
            ViewBag.Permissoes = permissoes;

            if (!permissoes.DiscoverColunasDeCusto)
            {
                ViewBag.HiddenCol = "hidden";
            }
            else
            {
                ViewBag.HiddenCol = "";
            }


            //Simulação
            var EstruturaDoProduto = (from estrutura in produtoSimulacao.Estrutura
                                      where estrutura.Nivel <= permissoes.NivelMaximo
                                      select estrutura).ToList();

            //Base
            ViewBag.EstruturaBase = (from estrutura in produtoBase.Estrutura
                                     where estrutura.Nivel <= permissoes.NivelMaximo
                                     select estrutura).ToList();


            return(View(EstruturaDoProduto));
        }