public ActionResult DeleteConfirmed(int id) { BonoContrato bonoContrato = db.BonoContrato.Find(id); db.BonoContrato.Remove(bonoContrato); db.SaveChanges(); return(RedirectToAction("Index")); }
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); }
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)); }
// 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)); }
// 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)); }
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); }
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); }