Ejemplo n.º 1
0
        public ActionResult DeleteConfirmed(int id)
        {
            FlujoPeriodico flujoPeriodico = db.FlujoPeriodico.Find(id);

            db.FlujoPeriodico.Remove(flujoPeriodico);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Ejemplo n.º 2
0
 public ActionResult Edit([Bind(Include = "IDFlujoPeriodico,Bono,BonoIndexado,Cupon,Cuota,Amortizacion,Prima,Escudo,FlujoEmisor,FlujoEmisorEscudo,FlujoBonista,ValorBonoDCP,FK_IDBonoContrato")] FlujoPeriodico flujoPeriodico)
 {
     if (ModelState.IsValid)
     {
         db.Entry(flujoPeriodico).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.FK_IDBonoContrato = new SelectList(db.BonoContrato, "IDBonoContrato", "FrecuenciaPago", flujoPeriodico.FK_IDBonoContrato);
     return(View(flujoPeriodico));
 }
Ejemplo n.º 3
0
        // GET: FlujoPeriodicoes/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            FlujoPeriodico flujoPeriodico = db.FlujoPeriodico.Find(id);

            if (flujoPeriodico == null)
            {
                return(HttpNotFound());
            }
            return(View(flujoPeriodico));
        }
Ejemplo n.º 4
0
        // GET: FlujoPeriodicoes/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            FlujoPeriodico flujoPeriodico = db.FlujoPeriodico.Find(id);

            if (flujoPeriodico == null)
            {
                return(HttpNotFound());
            }
            ViewBag.FK_IDBonoContrato = new SelectList(db.BonoContrato, "IDBonoContrato", "FrecuenciaPago", flujoPeriodico.FK_IDBonoContrato);
            return(View(flujoPeriodico));
        }
Ejemplo n.º 5
0
        public List <FlujoPeriodico> CalcularFlujosTotales(BonoContrato bonoContrato, CostesIniciales costesIniciales, int periodosTotales, string planPago, string tipoMoneda)
        {
            List <FlujoPeriodico> objLista = new List <FlujoPeriodico>();
            FlujoPeriodico        flujoPeriodico;
            List <decimal>        listBono_Indexado     = new List <decimal>();
            List <decimal>        listCupon             = new List <decimal>();
            List <decimal>        listCuota             = new List <decimal>();
            List <decimal>        listAmortizacion      = new List <decimal>();
            List <decimal>        listEscudo            = new List <decimal>();
            List <decimal>        listFlujoEmisor       = new List <decimal>();
            List <decimal>        listFlujoEmisorEscudo = new List <decimal>();
            List <decimal>        listFlujoBonista      = new List <decimal>();
            List <decimal>        listValorDelBono      = new List <decimal>();

            Results results = new Results();

            //Calculo de la TEP
            double TEP = 0.00;
            double TEA = bonoContrato.TasaInteresAnual;

            TEA = TEA / 100;
            int    nTEP           = 0;
            string frecuenciaPago = bonoContrato.FrecuenciaPago;

            switch (frecuenciaPago)
            {
            case "Diaria":
                nTEP = 1;
                break;

            case "Mensual":
                nTEP = 30;
                break;

            case "Bimestral":
                nTEP = 60;
                break;

            case "Trimestral":
                nTEP = 90;
                break;

            case "Cuatrimestral":
                nTEP = 120;
                break;

            case "Semestral":
                nTEP = 180;
                break;

            case "Anual":
                nTEP = 360;
                break;
            }

            TEP = Math.Pow(TEA + 1, (nTEP * 1.0) / (360 * 1.0)) - 1;
            TEP = Math.Round(TEP, 8);

            //Calculo del C*K del periodo
            double COKP = 0.00;
            double C*K  = bonoContrato.TasaDescuentoAnual;

            C*K = C*K / 100;

            COKP = Math.Pow(C*K + 1, (nTEP * 1.0) / (360 * 1.0)) - 1;
            COKP = Math.Round(COKP, 8);

            double IR = bonoContrato.ImpuestoRenta;

            IR = IR / 100;
            double prima = costesIniciales.PorcPrima;

            prima = prima / 100;
            decimal valorNominal = bonoContrato.ValorNominal;
            //METODO ALEMÁN

            decimal amortizacion = 0M;
            decimal valorPrima   = 0M;

            //Calculo de la Amortización
            if (planPago == "Método Alemán")
            {
                amortizacion = valorNominal / periodosTotales;
                amortizacion = amortizacion * (-1);
                for (int i = 0; i < periodosTotales; i++)
                {
                    if (i == 0)
                    {
                        listBono_Indexado.Add(valorNominal);
                        listCupon.Add((-1) * (decimal)TEP * listBono_Indexado[i]);
                        listAmortizacion.Add(amortizacion);
                        listCuota.Add(listCupon[i] + listAmortizacion[i]);
                        listEscudo.Add((-1) * (decimal)IR * listCupon[i]);
                        listFlujoEmisor.Add(listCuota[i] + valorPrima);
                        listFlujoEmisorEscudo.Add(listEscudo[i] + listFlujoEmisor[i]);
                        listFlujoBonista.Add((-1) * listFlujoEmisor[i]);
                    }
                    else if (i > 0 && i < periodosTotales - 1)
                    {
                        listBono_Indexado.Add(listBono_Indexado[i - 1] + listAmortizacion[i - 1]);
                        listCupon.Add((-1) * (decimal)TEP * listBono_Indexado[i]);
                        listAmortizacion.Add(amortizacion);
                        listCuota.Add(listCupon[i] + amortizacion);
                        listEscudo.Add((-1) * (decimal)IR * listCupon[i]);
                        listFlujoEmisor.Add(listCuota[i] + valorPrima);
                        listFlujoEmisorEscudo.Add(listEscudo[i] + listFlujoEmisor[i]);
                        listFlujoBonista.Add((-1) * listFlujoEmisor[i]);
                    }
                    else
                    {
                        listBono_Indexado.Add(listBono_Indexado[i - 1] + listAmortizacion[i - 1]);
                        listCupon.Add((-1) * (decimal)TEP * listBono_Indexado[i]);
                        listAmortizacion.Add(amortizacion);
                        listCuota.Add(listCupon[i] + amortizacion);
                        valorPrima = (-1) * (decimal)prima * listBono_Indexado[i];
                        listEscudo.Add((-1) * (decimal)IR * listCupon[i]);
                        listFlujoEmisor.Add(listCuota[i] + valorPrima);
                        listFlujoEmisorEscudo.Add(listEscudo[i] + listFlujoEmisor[i]);
                        listFlujoBonista.Add((-1) * listFlujoEmisor[i]);
                    }
                }
            }
            else if (planPago == "Método Americano") //METODO AMERICANO
            {
                CalcularFlujosTotalesAmericano(ref listBono_Indexado, ref listCupon, ref listCuota, ref listAmortizacion,
                                               ref listEscudo, ref listFlujoEmisor, ref listFlujoEmisorEscudo, ref listFlujoBonista,
                                               periodosTotales, valorNominal, IR, prima, TEP, ref valorPrima);
            }
            else //METODO FRANCÉS
            {
                CalcularFlujosTotalesFrances(ref listBono_Indexado, ref listCupon, ref listCuota, ref listAmortizacion,
                                             ref listEscudo, ref listFlujoEmisor, ref listFlujoEmisorEscudo, ref listFlujoBonista,
                                             periodosTotales, valorNominal, IR, prima, TEP, ref valorPrima);
            }

            for (int i = 0; i < periodosTotales; i++)
            {
                flujoPeriodico              = new FlujoPeriodico();
                flujoPeriodico.Bono         = listBono_Indexado[i];
                flujoPeriodico.BonoIndexado = listBono_Indexado[i];
                flujoPeriodico.Cupon        = listCupon[i];
                flujoPeriodico.Cuota        = listCuota[i];
                flujoPeriodico.Amortizacion = listAmortizacion[i];
                if (i == periodosTotales - 1)
                {
                    flujoPeriodico.Prima = valorPrima;
                }
                else
                {
                    flujoPeriodico.Prima = 0M;
                }

                flujoPeriodico.Escudo            = listEscudo[i];
                flujoPeriodico.FlujoEmisor       = listFlujoEmisor[i];
                flujoPeriodico.FlujoEmisorEscudo = listFlujoEmisorEscudo[i];
                flujoPeriodico.FlujoBonista      = listFlujoBonista[i];
                flujoPeriodico.FK_IDBonoContrato = 0;

                objLista.Add(flujoPeriodico);

                flujoPeriodico = null;
            }

            //Conversion de decimal a double
            List <double> listFlujoBonistaDouble      = listFlujoBonista.ConvertAll(x => (double)x);
            List <double> listFlujoEmisorDouble       = listFlujoEmisor.ConvertAll(x => (double)x);
            List <double> listFlujoEmisorEscudoDouble = listFlujoEmisorEscudo.ConvertAll(x => (double)x);

            //Calculo del Valor Actual del Bono
            decimal valorActualBono = (decimal)Excel.FinancialFunctions.Financial.Npv(COKP, listFlujoBonistaDouble);

            //Calculo del Valor Actual del Bono en cada periodo
            listValorDelBono = calcularValorBono(listFlujoBonistaDouble, COKP, periodosTotales);

            //Calculo resultados de la operación
            results = calcularResultados(bonoContrato, costesIniciales, listFlujoEmisorDouble, listFlujoEmisorEscudoDouble, listFlujoBonista, valorActualBono);

            //Redondear resultados de flujos periodicos
            for (int i = 0; i < listValorDelBono.Count; i++)
            {
                listValorDelBono[i]           = Math.Round(listValorDelBono[i], 2);
                objLista[i].Bono              = Math.Round(objLista[i].Bono, 2);
                objLista[i].BonoIndexado      = Math.Round(objLista[i].BonoIndexado, 2);
                objLista[i].Cupon             = Math.Round(objLista[i].Cupon, 2);
                objLista[i].Cuota             = Math.Round(objLista[i].Cuota, 2);
                objLista[i].Amortizacion      = Math.Round(objLista[i].Amortizacion, 2);
                objLista[i].Prima             = Math.Round(objLista[i].Prima, 2);
                objLista[i].Escudo            = Math.Round(objLista[i].Escudo, 2);
                objLista[i].FlujoEmisor       = Math.Round(objLista[i].FlujoEmisor, 2);
                objLista[i].FlujoEmisorEscudo = Math.Round(objLista[i].FlujoEmisorEscudo, 2);
                objLista[i].FlujoBonista      = Math.Round(objLista[i].FlujoBonista, 2);
                objLista[i].ValorBonoDCP      = listValorDelBono[i];
            }

            results.COKP            = COKP * 100;
            results.periodosTotales = periodosTotales;
            results.TEP             = TEP * 100;
            results.planPago        = planPago;
            results.tipoMoneda      = tipoMoneda;

            Session[SessionName.Resultados] = results;
            //Session[SessionName.Amortizacion] = amortizacion;

            return(objLista);
        }