public ActionResult Calcular(PropostaViewModel propostaView) { var calculo = new CalculoPrevidencia(); var db = new SimuladorPrevidenciaDB(); var proposta = db.Propostas.FirstOrDefault(c => c.Id == propostaView.Id); if (proposta == null) { proposta = GravarProposta(propostaView, new RetornoCalculo()); } // Realiza o cálculo da proposta informada: var retornoCalculo = calculo.Calcular(proposta); if (retornoCalculo.ExecutadoSucesso) { TempData["Sucesso"] = retornoCalculo.Mensagem; //ViewBag utilizadas para armazenar os dados do gráfico ViewBag.TotalInvestido = retornoCalculo.InvestidoGrafico; ViewBag.MontanteAcumulado = retornoCalculo.MontanteGrafico; ViewBag.Mes = retornoCalculo.Mes; } else { TempData["Erro"] = retornoCalculo.Mensagem; return RedirectToAction("Create", "Proposta", new { id = propostaView.IdCliente }); } // Grava a proposta no banco: //Esta linha esta duplicando o registro. // var p = GravarProposta(propostaView, retornoCalculo); // Dados do model: var resultado = new ResultadoCalculoViewModel { Id = proposta.Id, Cliente = propostaView.Cliente, Cpf = propostaView.CPF, InvestimentoInicial = propostaView.InvestimentoIncial, InvestimentoMensal = propostaView.InvestimentoMensal, Prazo = propostaView.TempoInvestimento, TotalInvestido = retornoCalculo.TotalInvestido, MontanteFinal = retornoCalculo.MontanteFinal, RendaFinal = retornoCalculo.RendaMensal, TempoRecebimento = retornoCalculo.TotalMeses, TipoRetorno = proposta.TipoRetornoEsperado, DadosProposta = propostaView }; return View(resultado); }
private Proposta NovaProposta(PropostaViewModel prop, RetornoCalculo calculo, SimuladorPrevidenciaDB contexto) { var cliente = contexto.Clientes.Find(prop.IdCliente); var perfil = contexto.Perfis.Find(prop.Perfil); var proposta = new Proposta{ Aprovada = false, Cliente = cliente, InvestimentoInicial = prop.InvestimentoIncial, InvestimentoMensal = prop.InvestimentoMensal, Perfil = perfil, RendaEsperadaMes = prop.RendaEsperadaMes, TempoInvestimento = prop.TempoInvestimento, PrazoRecebimento = calculo.TotalMeses, TempoRecebimento = prop.TempoRecebimento, TipoRetornoEsperado = prop.TipoRetornoEsperado }; contexto.Propostas.Add(proposta); contexto.SaveChanges(); return proposta; }
/// <summary> /// Exibe a tela de edição de uma proposta. /// </summary> /// <param name="id">ID da proposta</param> /// <returns></returns> public ActionResult Edit(int id = 0) { PropostaViewModel proposta = new PropostaViewModel(id); if (proposta == null) { return HttpNotFound(); } return View(proposta); }
private Proposta GravarProposta(PropostaViewModel prop, RetornoCalculo calculo) { var contexto = new SimuladorPrevidenciaDB(); var proposta = contexto.Propostas.Find(prop.Id); if (proposta == null) { return NovaProposta(prop, calculo, contexto); } var perfil = contexto.Perfis.Find(prop.Perfil); proposta.Aprovada = false; proposta.InvestimentoInicial = prop.InvestimentoIncial; proposta.InvestimentoMensal = prop.InvestimentoMensal; proposta.Perfil = perfil; proposta.RendaEsperadaMes = prop.RendaEsperadaMes; proposta.TempoInvestimento = prop.TempoInvestimento; proposta.PrazoRecebimento = calculo.TotalMeses; proposta.TempoRecebimento = prop.TempoRecebimento; proposta.TipoRetornoEsperado = prop.TipoRetornoEsperado; db.Entry(proposta).State = EntityState.Modified; contexto.SaveChanges(); return proposta; }
/// <summary> /// Tela inicial com formulário para criação da proposta /// </summary> /// <param name="id">ID do cliente</param> /// <returns></returns> public ActionResult Create(int id=0) { PropostaViewModel proposta = new PropostaViewModel(); var cliente = db.Clientes.Find(id); if (cliente == null) return HttpNotFound(); proposta.IdCliente = id; proposta.Cliente = cliente.Nome; proposta.CPF = cliente.Cpf; proposta.RendaFamiliar = cliente.RendaFamiliar; return View(proposta); }