/// <summary>
        /// Dados Default da definição.
        /// </summary>
        /// <param name="codFilial">a filial</param>
        /// <param name="dps"> os dados principais.</param>
        /// <param name="def">a definição.</param>
        protected void DadosAutomaticosDefinicao(int codFilial, DadoPrincipalSolicitacao dps, DefinicoesClienteSolicitacao def)
        {
            if (codFilial == 4)
            {//Filial São Paulo

                def.CodGrupoContasAReceber = "45";
                def.IndAceitaFaturamentoParcialPedido = "S";
                def.RecJurosMoraMes = "9,99";
                def.TipJuros = "S";
                def.IndCobrarTaxaBanco = "N";
                def.CodCategoria = "9";
            }
            else if (codFilial == 1)//Filial Rio
            {
                def.CodGrupoContasAReceber = "02";
                def.IndAceitaFaturamentoParcialPedido = "S";
                def.RecJurosMoraMes = "9,99";
                def.TipJuros = "S";
                def.IndCobrarTaxaBanco = "S";
                def.CodCategoria = "9";

            }
            else if (codFilial == 11)//Filial Minas
            {
                def.CodGrupoContasAReceber = "43";
                def.IndAceitaFaturamentoParcialPedido = "S";
                def.RecJurosMoraMes = "9,99";
                def.TipJuros = "S";
                def.IndCobrarTaxaBanco = "S";
                def.CodCategoria = "9";
            }
            else if (codFilial == 7)//Filial Recife
            {
                def.CodGrupoContasAReceber = "44";
                def.IndAceitaFaturamentoParcialPedido = "S";
                def.RecJurosMoraMes = "9,99";
                def.TipJuros = "S";
                def.IndCobrarTaxaBanco = "S";
                def.CodCategoria = "9";
            }
            else if (codFilial == 10)//Filial Curitiba
            {
                def.CodGrupoContasAReceber = "36";
                def.IndAceitaFaturamentoParcialPedido = "S";
                def.RecJurosMoraMes = "9,99";
                def.TipJuros = "S";
                def.IndCobrarTaxaBanco = "S";
                def.CodCategoria = "9";
            }
            else if (codFilial == 8)//Filial DF
            {
                def.CodGrupoContasAReceber = "42";
                def.IndAceitaFaturamentoParcialPedido = "S";
                def.RecJurosMoraMes = "9,99";
                def.TipJuros = "S";
                def.IndCobrarTaxaBanco = "S";
                def.CodCategoria = "9";
            }

            def.IndEmiteBoleto = def.CodFormaDePagamento == "5" ? "S" : "N";
            def.IndLimiteAprovado = "N";
            def.IndicativoPresencial = "9";

            def.CodRegiaoDeVendas = dps.UF;

            switch (dps.CodRamoAtividade)
            {
                case "001":
                case "003":
                case "006":
                case "007":
                case "011":
                case "012":
                    def.ConsumidorFinal = "S";
                    break;
                case "002":
                case "004":
                    def.ConsumidorFinal = "N";
                    break;
            }
        }
        public void PreencheDependencias(DefinicoesClienteSolicitacao d, int codCliente, int codFilial)
        {
            using (var categoriaDAL = new CategoriaClienteDAL())
            {
                Task t1 = Task.Factory.StartNew(() =>
                {

                    var categorias = from c in categoriaDAL.ListarTodos()
                                     select c;

                    d.CategoriasCliente = new List<CategoriaCliente>();
                    foreach (var cat in categorias)
                    {
                        d.CategoriasCliente.Add(cat);
                    }
                    categorias = null;
                });

                Task t2 = Task.Factory.StartNew(() =>
                {
                    var formaPagamentoDAL = new FormaPagamentoDAL();
                    var formasPagamento = from f in formaPagamentoDAL.ListarTodos()
                                          select f;

                    d.FormasPagamento = new List<FormaPagamento>();

                    foreach (var forma in formasPagamento)
                    {
                        d.FormasPagamento.Add(forma);
                    }

                    formasPagamento = null;
                });

                Task t3 = Task.Factory.StartNew(() =>
                {
                    var grupoContasAReceberDAL = new GrupoContasAReceberDAL();

                    var grupoContasReceber = from ct in grupoContasAReceberDAL.ListarTodos()
                                             select ct;

                    d.GruposContasReceber = new List<GrupoContasAReceber>();

                    foreach (var grupo in grupoContasReceber)
                    {
                        d.GruposContasReceber.Add(grupo);
                    }
                    grupoContasReceber = null;
                });

                Task t4 = Task.Factory.StartNew(() =>
                {

                    var representanteDAL = new RepresentanteDAL();

                    //var representantes = from rep in representanteDAL.ListarTodos().Where(r => r.usuCodfil == codFilial)
                    //                     select rep;

                    var representantes = from rep in representanteDAL.ListarTodos().Where(r => r.sitrep == "A")
                                         select rep;

                    d.Representantes = new List<Representante>();

                    foreach (var representante in representantes)
                    {
                        d.Representantes.Add(representante);
                    }

                    //representantes = null;
                }).ContinueWith( _ =>
                {
                 var repBLL = new RepresentanteBLL();
                    d.Vendedores = repBLL.ListarVendedores(0, d.Representantes);

                });

                Task t5 = Task.Factory.StartNew(() =>
                {
                    var regiaoVendasDAL = new RegiaoVendasDAL();

                    var regioesVendas = from reg in regiaoVendasDAL.ListarTodos()
                                        select reg;

                    d.RegioesVendas = new List<RegiaoVendas>();

                    foreach (var regiao in regioesVendas)
                    {
                        d.RegioesVendas.Add(regiao);
                    }

                    regioesVendas = null;
                });

                Task t6 = Task.Factory.StartNew(() => {

                    var prazoDAL = new CondicaoPagamentoDAL();
                    var prazos = prazoDAL.ListarTodos().Where(p => p.usuSitsicad == "A").ToList();
                    d.CondicoesPagamento = prazos;

                });

                //Task t7 = Task.Factory.StartNew();

                Task.WaitAll(t1, t2, t3, t4,t5, t6);
            }
        }
        public ActionResult SalvarDefinicoes(DefinicoesClienteSolicitacao def)
        {
            //Autentica
            if (Session["ConexaoSapiens"] == null)
            {
                return RedirectToAction("Login", "Home");
            }
            //Autoriza
            if (!AutorizaUsuario(Helpers.ControlAccessConfig.NovaSolicitacao))
            {
                return View("Erro", null, "Módulo não autorizado para este usuário. ");
            }

            if (Request.IsAjaxRequest())
            {
                try
                {
                    var s = Session["Solicitacao"] as Solicitacao;

                    if (!String.IsNullOrEmpty(def.VlrLimite))
                    {
                        if (def.VlrLimite.IndexOf("R$") == 0)
                        {
                            def.VlrLimite = def.VlrLimite.Substring(2);
                        }

                        def.VlrLimite = Regex.Replace(def.VlrLimite, @"(\s+)|(\\+)|(\.+)|(/+)|(\-+)|(\,+)", "");
                        def.VlrLimite = def.VlrLimite.Remove(def.VlrLimite.Length - 2, 2);
                    }
                    else
                    {
                        def.VlrLimite = "0";
                    }

                    if (!String.IsNullOrEmpty(def.VlrDescontoFinanceiro))
                    {
                        def.VlrDescontoFinanceiro = Regex.Replace(def.VlrDescontoFinanceiro, @"(\s+)|(\\+)|(\.+)|(/+)|(\-+)|(\,+)|(\%+)", "");
                    }
                    else
                    {
                        def.VlrDescontoFinanceiro = "0";
                    }

                    var codFilial = Convert.ToInt32(Session["CodigoFilial"]);

                    def.CodFilial = codFilial;

                    DadosAutomaticosDefinicao(codFilial, s.DadosPrincipaisSolicitacao.Last(), def);

                    using (DefinicoesClienteSolicitacaoBLL definicoesBLL = new DefinicoesClienteSolicitacaoBLL())
                    {
                        def.Solicitacao = s;
                        definicoesBLL.SalvarOuAtualizar(def);
                    }

                    s.Definicoes.Clear();
                    s.Definicoes.Add(def);

                    Session["Solicitacao"] = s;

                    return Json(new { msg = "Definição gravada com sucesso." }, JsonRequestBehavior.DenyGet);
                }

                catch (Exception ex)
                {
                    return Json(new { msg = "Erro ao tentar gravar Definição: " + ex.Message }, JsonRequestBehavior.DenyGet);
                }
            }
            else
            {
                return Json(new { msg = "Erro Interno de validação, Verificar o modelo de dados." }, JsonRequestBehavior.DenyGet);
            }
        }