Exemplo n.º 1
0
        public ActionResult DeleteConfirmed(int id)
        {
            BonoContrato bonoContrato = db.BonoContrato.Find(id);

            db.BonoContrato.Remove(bonoContrato);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Exemplo n.º 2
0
        public List <FlujoPeriodico> GenerarFlujosTotales(FormCollection formCollection, int IDUsuarioBonista)
        {
            List <FlujoPeriodico> ListaPrincipalFlujosTotales = new List <FlujoPeriodico>();
            BonoContrato          bonoContrato = new BonoContrato();
            string tipoMoneda = formCollection["selectTipoMoneda"];

            bonoContrato.ValorNominal    = Convert.ToDecimal(formCollection["valorNominal"]);
            bonoContrato.ValorComercial  = Convert.ToDecimal(formCollection["valorComercial"]);
            bonoContrato.NroAños         = Convert.ToInt16(formCollection["tiempoTotal"]);
            bonoContrato.FrecuenciaPago  = formCollection["selectFrecuenciaPago"];
            bonoContrato.DiasPorAño      = Convert.ToInt16(formCollection["diasPorAño"]);
            bonoContrato.TipoTasaInteres = formCollection["selectTipoTasa"];
            int periodoTotal = Convert.ToInt16(formCollection["periodosTotales"]);

            if (bonoContrato.TipoTasaInteres == "Tasa Efectiva")
            {
                bonoContrato.Capitalizacion = "Ninguno";
            }
            else
            {
                bonoContrato.Capitalizacion = formCollection["selectCap"];
            }

            bonoContrato.TasaInteresAnual   = Convert.ToDouble(formCollection["TEA"]);
            bonoContrato.TasaDescuentoAnual = Convert.ToDouble(formCollection["C*K"]);
            bonoContrato.ImpuestoRenta      = Convert.ToDouble(formCollection["IR"]);
            bonoContrato.FechaEmision       = Convert.ToDateTime(formCollection["fechaActual"]);

            //-------//

            CostesIniciales objCostoInicial = new CostesIniciales();

            objCostoInicial.PorcPrima          = Convert.ToDouble(formCollection["prima"]);
            objCostoInicial.PorcEstructuracion = Convert.ToDouble(formCollection["estruct"]);
            objCostoInicial.PorcColocacion     = Convert.ToDouble(formCollection["col"]);
            objCostoInicial.PorcFlotacion      = Convert.ToDouble(formCollection["flot"]);
            objCostoInicial.PorcCAVALI         = Convert.ToDouble(formCollection["cav"]);
            db.CostesIniciales.Add(objCostoInicial);
            db.SaveChanges();

            //-------//

            bonoContrato.FK_IDBonista         = IDUsuarioBonista;
            bonoContrato.FK_IDCostesIniciales = 1;
            bonoContrato.FK_IDEmpresaEmisora  = 1;

            //--------//

            string planPago = formCollection["selectPlanPago"];

            ListaPrincipalFlujosTotales = CalcularFlujosTotales(bonoContrato, objCostoInicial, periodoTotal, planPago, tipoMoneda);
            Session[SessionName.Bono]   = bonoContrato;

            return(ListaPrincipalFlujosTotales);
        }
Exemplo n.º 3
0
 public ActionResult Edit([Bind(Include = "IDBonoContrato,ValorComercial,ValorNominal,NroAños,FrecuenciaPago,DiasPorAño,TipoTasaInteres,Capitalizacion,TasaInteresAnual,TasaDescuentoAnual,ImpuestoRenta,FechaEmision,FK_IDBonista,FK_IDCostesIniciales,FK_IDEmpresaEmisora")] BonoContrato bonoContrato)
 {
     if (ModelState.IsValid)
     {
         db.Entry(bonoContrato).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.FK_IDCostesIniciales = new SelectList(db.CostesIniciales, "IDCostesIniciales", "IDCostesIniciales", bonoContrato.FK_IDCostesIniciales);
     ViewBag.FK_IDEmpresaEmisora  = new SelectList(db.EmpresaEmisora, "IDEmpresaEmisora", "Nombre", bonoContrato.FK_IDEmpresaEmisora);
     ViewBag.FK_IDBonista         = new SelectList(db.UsuarioBonista, "IDUsuarioBonista", "Nombres", bonoContrato.FK_IDBonista);
     return(View(bonoContrato));
 }
Exemplo n.º 4
0
        // GET: BonoContratoes/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            BonoContrato bonoContrato = db.BonoContrato.Find(id);

            if (bonoContrato == null)
            {
                return(HttpNotFound());
            }
            return(View(bonoContrato));
        }
Exemplo n.º 5
0
        // GET: BonoContratoes/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            BonoContrato bonoContrato = db.BonoContrato.Find(id);

            if (bonoContrato == null)
            {
                return(HttpNotFound());
            }
            ViewBag.FK_IDCostesIniciales = new SelectList(db.CostesIniciales, "IDCostesIniciales", "IDCostesIniciales", bonoContrato.FK_IDCostesIniciales);
            ViewBag.FK_IDEmpresaEmisora  = new SelectList(db.EmpresaEmisora, "IDEmpresaEmisora", "Nombre", bonoContrato.FK_IDEmpresaEmisora);
            ViewBag.FK_IDBonista         = new SelectList(db.UsuarioBonista, "IDUsuarioBonista", "Nombres", bonoContrato.FK_IDBonista);
            return(View(bonoContrato));
        }
Exemplo n.º 6
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);
        }
Exemplo n.º 7
0
        public Results calcularResultados(BonoContrato bonoContrato, CostesIniciales costesIniciales, List <double> listFlujoEmisor,
                                          List <double> listFlujoEmisorEscudo, List <decimal> listFlujoBonista, decimal valorActualBono)
        {
            Results       results = new Results();
            List <double> listFlujoBonistaDouble = listFlujoBonista.ConvertAll(x => (double)x);
            decimal       CIEmisor         = 0M;
            decimal       CIBonista        = 0M;
            decimal       flujoEmisorCero  = 0M;
            decimal       flujoBonistaCero = 0M;
            decimal       utilidadPerdida  = 0M;
            double        TIRBonista       = 0.0;
            double        TIREmisor        = 0.00;
            double        TIREmisorEscudo  = 0.00;
            double        TREABonista      = 0.00;
            int           nroDiasPeriodo   = 0;
            double        TCEAEmisor       = 0.00;
            double        TCEAEmisorEscudo = 0.00;

            //Calcular CIEmisor
            CIEmisor = (decimal)((costesIniciales.PorcEstructuracion + costesIniciales.PorcColocacion + costesIniciales.PorcFlotacion +
                                  costesIniciales.PorcCAVALI) / 100) * bonoContrato.ValorComercial;

            //Calcular CIBonista
            CIBonista = (decimal)((costesIniciales.PorcFlotacion + costesIniciales.PorcCAVALI) / 100) * bonoContrato.ValorComercial;

            //Calcular flujoEmisorCero(Vcom-CIEmisor) flujoEmisorEscudoCero
            flujoEmisorCero = bonoContrato.ValorComercial - CIEmisor;

            //Calcular flujoBonistaCero(-Vcom-CIBonista)
            flujoBonistaCero = (-1) * bonoContrato.ValorComercial - CIBonista;

            //Calcular TIRBonista
            listFlujoBonistaDouble.Insert(0, (double)flujoBonistaCero);
            TIRBonista = Excel.FinancialFunctions.Financial.Irr(listFlujoBonistaDouble);

            //Calcular TREABonista
            switch (bonoContrato.FrecuenciaPago)
            {
            case "Diaria":
                nroDiasPeriodo = 1;
                break;

            case "Mensual":
                nroDiasPeriodo = 30;
                break;

            case "Bimestral":
                nroDiasPeriodo = 60;
                break;

            case "Trimestral":
                nroDiasPeriodo = 90;
                break;

            case "Cuatrimestral":
                nroDiasPeriodo = 120;
                break;

            case "Semestral":
                nroDiasPeriodo = 180;
                break;

            case "Anual":
                nroDiasPeriodo = 360;
                break;
            }
            TREABonista = Math.Pow(TIRBonista + 1, 360 * (1.0) / nroDiasPeriodo * (1.0)) - 1;

            //Calcular TIREmisor
            listFlujoEmisor.Insert(0, (double)flujoEmisorCero);
            TIREmisor = Excel.FinancialFunctions.Financial.Irr(listFlujoEmisor);

            //Calcular TIREmisorEscudo
            listFlujoEmisorEscudo.Insert(0, (double)flujoEmisorCero);
            TIREmisorEscudo = Excel.FinancialFunctions.Financial.Irr(listFlujoEmisorEscudo);

            //Calcular TCEAEmisor
            TCEAEmisor = Math.Pow(TIREmisor + 1, 360 * (1.0) / nroDiasPeriodo * (1.0)) - 1;

            //Calcular TCEAEmisorEscudo
            TCEAEmisorEscudo = Math.Pow(TIREmisorEscudo + 1, 360 * (1.0) / nroDiasPeriodo * (1.0)) - 1;

            //Calcular UtilidadPerdida
            utilidadPerdida = flujoBonistaCero + valorActualBono;

            results.CIEmisor              = Math.Round(CIEmisor, 2);
            results.CIBonista             = Math.Round(CIBonista, 2);
            results.flujoBonistaCero      = Math.Round(flujoBonistaCero, 2);
            results.flujoEmisorCero       = Math.Round(flujoEmisorCero, 2);
            results.flujoEmisorEscudoCero = Math.Round(flujoEmisorCero, 2);
            results.PrecioActualBono      = Math.Round(valorActualBono, 2);
            results.TCEAEmisor            = Math.Round(TCEAEmisor * 100, 6);
            results.TCEAEmisorEscudo      = Math.Round(TCEAEmisorEscudo * 100, 6);
            results.TIRBonista            = Math.Round(TIRBonista * 100, 6);
            results.TIREmisor             = Math.Round(TIREmisor * 100, 6);
            results.TIREmisorEscudo       = Math.Round(TIREmisorEscudo * 100, 6);
            results.TREABonista           = Math.Round(TREABonista * 100, 6);
            results.UtilidadPerdida       = Math.Round(utilidadPerdida, 2);


            return(results);
        }