private void TransferePropriedades( PropostaViewModel origem, Proposta destino)
 {
     destino.Id = origem.Id;
     destino.IdUsuario = origem.IdUsuario;
     destino.DataEntrada = origem.DataEntrada;
     destino.Nome = origem.Nome;
     destino.CPF = origem.CPF;
     destino.DataNascimento = origem.DataNascimento;
     destino.Matricula = origem.Matricula;
     destino.SenhaConvenio = origem.SenhaConvenio;
     destino.IdBancoConta = origem.IdBancoConta;
     destino.Agencia = origem.Agencia;
     destino.ContaCorrente = origem.ContaCorrente;
     destino.IdTipoConta = origem.IdTipoConta;
     destino.IdUsuarioDigitacao = origem.IdUsuarioDigitacao;
     destino.DataDigitacao = origem.DataDigitacao;
     destino.IdBanco = origem.IdBanco;
     destino.IdConvenio = origem.IdConvenio;
     destino.ValorParcela = origem.ValorParcela;
     destino.MargemLivre = origem.MargemLivre;
     destino.MargemUtilizada = origem.MargemUtilizada;
     destino.Coeficiente = origem.Coeficiente;
     destino.QtdeParcelas = origem.QtdeParcelas;
     destino.ValorContrato = origem.ValorContrato;
     destino.Tabela = origem.Tabela;
     destino.DataCoeficiente = origem.DataCoeficiente;
     destino.Observacao = origem.Observacao;
     destino.Endereco = origem.Endereco;
     destino.NumeroEndereco = origem.NumeroEndereco;
     destino.Bairro = origem.Bairro;
     destino.Cidade = origem.Cidade;
     destino.Uf = origem.Uf;
     destino.Cep = origem.Cep;
     destino.Complemento = origem.Complemento;
 }
        public ActionResult Edit([Bind(Include="Id,IdUsuario,DataEntrada,Nome,CPF,DataNascimento,Matricula,SenhaConvenio,IdBancoConta,Agencia,ContaCorrente,IdTipoConta,IdUsuarioDigitacao,DataDigitacao,IdBanco,IdConvenio,ValorParcela,MargemLivre,MargemUtilizada,Coeficiente,QtdeParcelas,ValorContrato,Tabela,DataCoeficiente,Observacao,Endereco,NumeroEndereco,Bairro,Cidade,Uf,Cep,Complemento")] PropostaViewModel propostaVM)
        {
            Seguranca.ValidaAcesso(7);
            MontaListaTelefones(Request, propostaVM);
            MontaListaDividas(Request, propostaVM);

            if (ModelState.IsValid)
            {
                propostaVM.CPF = propostaVM.CPF.Replace(".","").Replace("-","");
                if (propostaVM.Cep != null)
                    propostaVM.Cep = propostaVM.Cep.Replace("-","");

                var proposta = new Proposta();
                TransferePropriedades(propostaVM, proposta);

                if (UsuarioLogado.LimitaProposta)
                {
                    proposta.IdUsuario = UsuarioLogado.IdUsuario;
                }

                db.Entry(proposta).State = EntityState.Modified;

                try
                {
                    db.SaveChanges();

                    int? sequencia = db.ObtemSequencia().FirstOrDefault();

                    foreach (var item in propostaVM.Telefones)
                    {
                        db.Database.ExecuteSqlCommand("insert into AuxTelefoneProposta (Seq, IdProposta, IdTipoTelefone, Telefone) values({0}, {1}, {2}, {3})",
                            sequencia, proposta.Id, item.IdTipoTelefone, item.Telefone);
                    }
                    db.GravaTelefonesProposta(sequencia, proposta.Id);

                    foreach (var item in propostaVM.Dividas)
                    {
                        db.Database.ExecuteSqlCommand("insert into AuxDividaProposta (Seq, IdProposta, IdBanco, SaldoDevedor, ValorParcela) values({0}, {1}, {2}, {3}, {4})",
                            sequencia, proposta.Id, item.IdBanco, item.SaldoDevedor, item.ValorParcela);
                    }
                    db.GravaDividasProposta(sequencia, proposta.Id);
                }
                catch (DbEntityValidationException e)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        sb.AppendLine(string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                                        eve.Entry.Entity.GetType().Name,
                                                        eve.Entry.State));
                        foreach (var ve in eve.ValidationErrors)
                        {
                            sb.AppendLine(string.Format("- Property: \"{0}\", Error: \"{1}\"",
                                                        ve.PropertyName,
                                                        ve.ErrorMessage));
                        }
                    }
                    throw new DbEntityValidationException(sb.ToString(), e);
                }

                return RedirectToAction("Index");
            }
            ViewBag.IdBancoConta = new SelectList(db.Bancos, "Id", "Nome", propostaVM.IdBancoConta);
            ViewBag.IdConvenio = new SelectList(db.Convenios, "Id", "Nome", propostaVM.IdConvenio);
            ViewBag.IdBanco = new SelectList(db.Bancos, "Id", "Nome", propostaVM.IdBanco);
            ViewBag.IdTipoConta = new SelectList(db.TiposConta, "Id", "Nome", propostaVM.IdTipoConta);
            ViewBag.IdUsuario = new SelectList(db.Usuarios, "Id", "Login", propostaVM.IdUsuario);
            ViewBag.IdUsuarioDigitacao = new SelectList(db.Usuarios, "Id", "Login", propostaVM.IdUsuarioDigitacao);
            ViewBag.IdTipoTelefone = new SelectList(db.TiposTelefone, "Id", "Nome");
            ViewBag.TiposTelefone = db.TiposTelefone;
            ViewBag.Bancos = db.Bancos;
            return View(propostaVM);
        }