// GET: Calculadora/Details/5
        public async Task <IActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            var calculadora = await _context.Calculadora
                              .Include(c => c.Capitalizacion)
                              .Include(c => c.FrecuenciaPago)
                              .Include(c => c.MetodoPago)
                              .Include(c => c.TasaInteres)
                              .FirstOrDefaultAsync(m => m.CalculadoraId == id);

            if (calculadora == null)
            {
                return(NotFound());
            }

            //Para resultados de Estruct. del Bono
            int    frec = Formulas.DevolverFrecuenciaPago(calculadora.FrecuenciaPago.Tipofrecuencia);
            int    dc   = Formulas.DevolverDiasCapitalizacion(calculadora.Capitalizacion.TipoCapitalizacion);
            int    ctp  = Formulas.CalcularPeriodosporAño(calculadora.DiasAño, frec);
            int    tp   = Formulas.CalcularTotalPeriodos(calculadora.NAños, ctp);
            double efa  = Formulas.CalcularTasaEfectivaAnual(calculadora.TasaInteres.TipoTasa, Double.Parse(calculadora.TasaDeInteres), calculadora.DiasAño, dc);
            double efp  = Formulas.CalcularTasaEfectivaDelPeriodo(efa, frec, calculadora.DiasAño);
            double ck   = Formulas.CalcularCokPeriodo(Double.Parse(calculadora.C*k), frec, calculadora.DiasAño);
            double cie  = Formulas.CalcularCostesInicialesEmisor(Double.Parse(calculadora.Estructuración), Double.Parse(calculadora.Colocación)
                                                                 , Double.Parse(calculadora.Flotacion), Double.Parse(calculadora.Cavali), Double.Parse(calculadora.Vcomercial));
            double cib = Formulas.CalcularCostesInicalesBonista(Double.Parse(calculadora.Flotacion), Double.Parse(calculadora.Cavali), Double.Parse(calculadora.Vcomercial));

            ViewBag.Capi  = dc;
            ViewBag.Peri  = ctp;
            ViewBag.Frec  = frec;
            ViewBag.PeriT = tp;
            ViewBag.Tasa  = efa;
            ViewBag.TasaP = efp;
            ViewBag.CokP  = Round(ck, 5);
            ViewBag.Cie   = cie;
            ViewBag.Cib   = cib;
            //variables
            double        vnom     = Double.Parse(calculadora.Vnominal);
            double        fbonista = 0;
            List <Objeto> hi       = new List <Objeto>();

            double[] arraytiremi     = new double[tp + 1];
            double[] arraytiremiescu = new double[tp + 1];
            double[] arraytirbon     = new double[tp + 1];
            double[] arrayvan        = new double[tp + 1];

            if (calculadora.MetodoPago.TipoMetodo == "Americano")
            {
                aux = 0;

                for (int i = 0; i <= tp; i++)
                {
                    Objeto ob = new Objeto();
                    ob.numero     = i;
                    ob.infanual   = 0;
                    ob.infperiodo = 0;

                    ob.bono         = Formulas.Bono(i, tp, Double.Parse(calculadora.Vnominal));
                    ob.bonoindexado = Formulas.BonoIndexado(i, tp, ob.bono, ob.infperiodo);
                    ob.interes      = Formulas.CalcularInteres(i, tp, ob.bonoindexado, efp);
                    ob.cuota        = Formulas.CuotaAmericano(ob.bono, i, tp, ob.interes, ob.amort);
                    ob.amort        = Formulas.AmortizacionAmericano(i, tp, ob.bono);
                    ob.prima        = Formulas.Prima(i, tp, Double.Parse(calculadora.Prima), vnom);
                    ob.escudo       = Formulas.Escudo(i, tp, ob.interes);
                    ob.femisor      = Formulas.FEmisor(i, tp, ob.cuota, ob.prima, Double.Parse(calculadora.Vcomercial), cie);
                    ob.femiescu     = Formulas.FEmisorEscudo(i, tp, ob.escudo, ob.femisor);
                    ob.fbonista     = Formulas.FBonista(i, tp, Double.Parse(calculadora.Vcomercial), cib, ob.femisor);
                    if (i == 0)
                    {
                        fbonista = ob.fbonista;
                    }
                    arraytiremi[i]     = ob.femisor;
                    arraytirbon[i]     = ob.fbonista;
                    arraytiremiescu[i] = ob.femiescu;
                    arrayvan[i]        = ob.fbonista;
                    hi.Add(ob);
                }
                double tirboni    = Formulas.calculartir(arraytirbon);
                double tiremi     = Formulas.calculartir(arraytiremi);
                double tiremiescu = Formulas.calculartir(arraytiremiescu);

                double[] arrayvanreducido = Formulas.ReduceTamaño(arrayvan);
                double   van           = Round(Formulas.CalcularVAN(ck, arrayvanreducido), 2);
                double   fb            = Round(fbonista + van, 2);
                double   tcabonista    = Formulas.CalcularTCEA(tirboni, calculadora.DiasAño, frec);
                double   tcaemisor     = Formulas.CalcularTCEA(tiremi, calculadora.DiasAño, frec);
                double   tcaemisorescu = Formulas.CalcularTCEA(tiremiescu, calculadora.DiasAño, frec);

                ViewBag.vna       = van;
                ViewBag.fbon      = fb;
                ViewBag.tcboni    = tcabonista;
                ViewBag.tcemi     = tcaemisor;
                ViewBag.tcemiescu = tcaemisorescu;
            }
            else if (calculadora.MetodoPago.TipoMetodo == "Aleman")
            {
                //para calcular la bajada del saldo inicial del bono
                aux = vnom;
                for (int i = 0; i <= tp; i++)
                {
                    Objeto ob = new Objeto();
                    ob.numero     = i;
                    ob.infanual   = 0;
                    ob.infperiodo = 0;
                    if (i == 0)
                    {
                        ob.bono = 0;
                    }
                    else
                    {
                        ob.bono = Round(aux, 2);
                    }
                    ob.bonoindexado = Formulas.BonoIndexado(i, tp, ob.bono, ob.infperiodo);
                    ob.interes      = Formulas.CalcularInteres(i, tp, ob.bonoindexado, efp);
                    ob.amort        = Formulas.AmortizacionAleman(i, tp, vnom);
                    ob.cuota        = Formulas.CuotaAleman(i, tp, ob.interes, ob.amort);
                    ob.prima        = Formulas.Prima(i, tp, Double.Parse(calculadora.Prima), vnom);
                    ob.escudo       = Formulas.Escudo(i, tp, ob.interes);
                    ob.femisor      = Formulas.FEmisor(i, tp, ob.cuota, ob.prima, Double.Parse(calculadora.Vcomercial), cie);
                    ob.femiescu     = Formulas.FEmisorEscudo(i, tp, ob.escudo, ob.femisor);
                    ob.fbonista     = Formulas.FBonista(i, tp, Double.Parse(calculadora.Vcomercial), cib, ob.femisor);
                    if (i == 0)
                    {
                        fbonista = ob.fbonista;
                    }
                    //es + porque la amort esta en negativo
                    aux               += ob.amort;
                    arraytiremi[i]     = ob.femisor;
                    arraytirbon[i]     = ob.fbonista;
                    arraytiremiescu[i] = ob.femiescu;
                    arrayvan[i]        = ob.fbonista;
                    hi.Add(ob);
                }
                double tirboni    = Formulas.calculartir(arraytirbon);
                double tiremi     = Formulas.calculartir(arraytiremi);
                double tiremiescu = Formulas.calculartir(arraytiremiescu);

                double[] arrayvanreducido = Formulas.ReduceTamaño(arrayvan);
                double   van           = Round(Formulas.CalcularVAN(ck, arrayvanreducido), 2);
                double   fb            = Round(fbonista + van, 2);
                double   tcabonista    = Formulas.CalcularTCEA(tirboni, calculadora.DiasAño, frec);
                double   tcaemisor     = Formulas.CalcularTCEA(tiremi, calculadora.DiasAño, frec);
                double   tcaemisorescu = Formulas.CalcularTCEA(tiremiescu, calculadora.DiasAño, frec);

                ViewBag.vna       = van;
                ViewBag.fbon      = fb;
                ViewBag.tcboni    = tcabonista;
                ViewBag.tcemi     = tcaemisor;
                ViewBag.tcemiescu = tcaemisorescu;
            }
            else if (calculadora.MetodoPago.TipoMetodo == "Frances")
            {
                aux = vnom;
                for (int i = 0; i <= tp; i++)
                {
                    Objeto ob = new Objeto();

                    ob.numero     = i;
                    ob.infanual   = 0;
                    ob.infperiodo = 0;
                    if (i == 0)
                    {
                        ob.bono = 0;
                    }
                    else
                    {
                        ob.bono = Round(aux, 2);
                    }
                    ob.bonoindexado = Formulas.BonoIndexado(i, tp, ob.bono, ob.infperiodo);
                    ob.interes      = Formulas.CalcularInteres(i, tp, ob.bonoindexado, efp);
                    ob.cuota        = Formulas.cuotaFrances(i, tp, vnom, efp, tp);;
                    ob.amort        = Formulas.AmortizacionFrances(i, tp, ob.cuota, ob.interes);
                    ob.prima        = Formulas.Prima(i, tp, Double.Parse(calculadora.Prima), vnom);
                    ob.escudo       = Formulas.Escudo(i, tp, ob.interes);
                    ob.femisor      = Formulas.FEmisor(i, tp, ob.cuota, ob.prima, Double.Parse(calculadora.Vcomercial), cie);
                    ob.femiescu     = Formulas.FEmisorEscudo(i, tp, ob.escudo, ob.femisor);
                    ob.fbonista     = Formulas.FBonista(i, tp, Double.Parse(calculadora.Vcomercial), cib, ob.femisor);
                    if (i == 0)
                    {
                        fbonista = ob.fbonista;
                    }
                    aux               += ob.amort;
                    arraytiremi[i]     = ob.femisor;
                    arraytirbon[i]     = ob.fbonista;
                    arraytiremiescu[i] = ob.femiescu;
                    arrayvan[i]        = ob.fbonista;

                    hi.Add(ob);
                }

                double tirboni    = Formulas.calculartir(arraytirbon);
                double tiremi     = Formulas.calculartir(arraytiremi);
                double tiremiescu = Formulas.calculartir(arraytiremiescu);

                double[] arrayvanreducido = Formulas.ReduceTamaño(arrayvan);
                double   van           = Round(Formulas.CalcularVAN(ck, arrayvanreducido), 2);
                double   fb            = Round(fbonista + van, 2);
                double   tcabonista    = Formulas.CalcularTCEA(tirboni, calculadora.DiasAño, frec);
                double   tcaemisor     = Formulas.CalcularTCEA(tiremi, calculadora.DiasAño, frec);
                double   tcaemisorescu = Formulas.CalcularTCEA(tiremiescu, calculadora.DiasAño, frec);

                ViewBag.vna       = van;
                ViewBag.fbon      = fb;
                ViewBag.tcboni    = tcabonista;
                ViewBag.tcemi     = tcaemisor;
                ViewBag.tcemiescu = tcaemisorescu;
            }
            ViewBag.listahi = hi;
            return(View(calculadora));
        }