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>
        ///  Realiza o cálculo de uma proposta
        /// </summary>
        /// <param name="proposta"></param>
        /// <returns>Retorno Calculo</returns>
        public RetornoCalculo Calcular(Proposta proposta)
        {
            //Dictonary usadas para implementação do gráfico

            Dictionary<int, decimal> montantesMensais = new Dictionary<int, decimal>();
            Dictionary<int, decimal> investimentoMensais = new Dictionary<int, decimal>();

            //instanciado para receber os valores daqui para RetornoCalculo
            RetornoCalculo r = new RetornoCalculo();

            //inicio do calculo da previdencia
            decimal MontanteAcumulado = proposta.InvestimentoInicial;
            decimal Rendimento = 0;

            for (int i = 1; i < (proposta.TempoInvestimento * 12) ; i++)
            {
                Rendimento = MontanteAcumulado * (proposta.Perfil.TaxaRendimento/100);
                MontanteAcumulado = MontanteAcumulado + proposta.InvestimentoMensal + Rendimento;

                Rendimento = Math.Round(Rendimento, 2);
                MontanteAcumulado = Math.Round(MontanteAcumulado, 2);

                investimentoMensais.Add(i, Rendimento);
                montantesMensais.Add(i, MontanteAcumulado);
            }

            if (proposta.TipoRetornoEsperado == TipoRetorno.TempoDeRecebimento)
            {
                r.TotalMeses = proposta.TempoRecebimento * 12;
                r.RendaMensal = MontanteAcumulado / (proposta.TempoRecebimento * 12);

            }
            else if (proposta.TipoRetornoEsperado == TipoRetorno.RendaEsperadaPorMes)
            {
                r.TotalMeses = MontanteAcumulado / proposta.RendaEsperadaMes;
                r.RendaMensal = proposta.RendaEsperadaMes;
            }

            //Listas para armazenar os dados do Dictonary necessários para o gráfico
            List<int> meses = montantesMensais.Keys.ToList();
            List<decimal> Montante = montantesMensais.Values.ToList();
            List<decimal> Investido = investimentoMensais.Values.ToList();

            //var criadas para levar os dados das Lists pro RetornoCalculo e ser possível criar o gráfico com os dados
            //Os Replaces são necessários para deixar os dados úteis pro modelo do gráfico

            var mesesGrafico = string.Join(", ", meses);
            var montanteGrafico = string.Join("/ ", Montante).Replace(",", ".").Replace("/", ", ");
            var investidoGrafico = string.Join("/ ", Investido).Replace(",", ".").Replace("/", ", ");

            //as variaveis de RetornoCalculo recebem os valores aqui decididos
            r.Mes = mesesGrafico;
            r.MontanteGrafico = montanteGrafico;
            r.InvestidoGrafico = investidoGrafico;

            r.MontanteFinal = MontanteAcumulado;
            r.TotalInvestido = proposta.InvestimentoInicial + proposta.InvestimentoMensal * (proposta.TempoInvestimento * 12);

            r.ExecutadoSucesso = true;
            r.Mensagem = "Executado com sucesso!";

            return r;

                throw new NotImplementedException();
        }
        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;
        }