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