public void PreencheDependencias(EnderecoEntregaClienteSolicitacao endEnt)
        {
            Task t2 = Task.Factory.StartNew(() =>
            {
                var rotaDAL = new RotaDAL();

                endEnt.Rotas = new List<Rota>();
                var rotas = from rota in rotaDAL.ListarTodos()
                            select rota;

                foreach (var r in rotas)
                {
                    endEnt.Rotas.Add(r);
                }
            });

            Task t3 = Task.Factory.StartNew(() =>
            {
                var subRotaDAL = new SubRotaDAL();

                endEnt.SubRotas = new List<SubRota>();
                var subrotas = from s in subRotaDAL.ListarTodos()
                               select s;

                foreach (var s in subrotas)
                {
                    endEnt.SubRotas.Add(s);
                }
                //endEnt.SubRotas = new List<SubRota>();
            });
            Task.WaitAll(t2, t3);
        }
        public ActionResult SalvarEnderecoEntrega(EnderecoEntregaClienteSolicitacao endEnt)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var s = Session["Solicitacao"] as Solicitacao;

                    using (var endEntBLL = new EnderecoEntregaClienteSolicitacaoBLL())
                    {
                        endEnt.Solicitacao = s;

                        if (endEnt.CodEnderecoEntregaClienteSolicitacao == 0)
                        {
                            endEntBLL.Salvar(endEnt);
                            s.EnderecosEntrega.Add(endEnt);
                        }
                        else
                        {
                            var ee = endEntBLL.ObterPorCodigo(endEnt.CodEnderecoEntregaClienteSolicitacao);

                            var objToRemove = s.EnderecosEntrega.Where(e => e.CodEnderecoEntregaClienteSolicitacao == endEnt.CodEnderecoEntregaClienteSolicitacao).FirstOrDefault();
                            var indice = s.EnderecosEntrega.IndexOf(objToRemove);

                            s.EnderecosEntrega.Remove(objToRemove);

                            ee.Bairro = endEnt.Bairro;
                            ee.Cep = endEnt.Cep;
                            ee.Cidade = endEnt.Cidade;
                            ee.CodRota = endEnt.CodRota;
                            ee.CodSubRota = Regex.Replace(endEnt.CodSubRota, @"(\s+)|(\\+)|(\.+)|(/+)|(\-+)", "");
                            ee.Complemento = endEnt.Complemento;
                            ee.Estado = endEnt.Estado;
                            ee.FaixaInicialCEP = endEnt.FaixaInicialCEP;
                            ee.Logradouro = endEnt.Logradouro;
                            ee.NomContato = endEnt.NomContato;
                            ee.Numero = endEnt.Numero;
                            ee.Proximidade = endEnt.Proximidade;
                            ee.Telefone1 = endEnt.Telefone1;
                            ee.Telefone2 = endEnt.Telefone2;
                            ee.CPFCNPJDeEntrega = endEnt.CPFCNPJDeEntrega;

                            endEntBLL.Atualizar(ee);
                            s.EnderecosEntrega.Insert(indice, ee);

                        }
                        Session["Solicitacao"] = s;
                    }

                    return Json(new { msg = "Endereço de entrega gravado com sucesso." }, JsonRequestBehavior.DenyGet);
                }

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