public async Task <NpvChartModel> GetNpvResultAsync(NpvModel model) { var result = new NpvChartModel(); await Task.Run(() => { if (!model.CalculationID.HasValue) { var calculationModel = InsertCalculation(model); InsertCashFlows(calculationModel.CalculationID, model.CommaDelimetedCashFlows); } var cashFlows = model.CommaDelimetedCashFlows.Split(',').Select(Double.Parse).ToList(); cashFlows.Insert(0, model.InitialInvestment); var discountRate = model.LowerBoundDiscountRate; while (discountRate <= model.UpperBoundDiscountRate) { result.Labels.Add($"{discountRate}%"); result.Values.Add(CaculateNpv(cashFlows, discountRate)); discountRate = Math.Round(discountRate + model.DiscountRateIncrement, 2); } ; }); return(result); }
public async Task <IActionResult> CalculateNpv([FromBody] NpvModel model) { var npvResults = await _httpService.GetAsJson(_npvApiUrl, model); var cashFlows = model.CashFlows.Split(',').Select(double.Parse).ToList <double>(); var requestModel = new NPVRequestModel { CashFlow = cashFlows , Increment = model.Increment , InitialCost = model.InitialCost , LowerBoundDiscountRate = model.LowerBound , UpperBoundDiscountRate = model.UpperBound }; if (string.IsNullOrEmpty(npvResults)) { npvResults = await _httpService.PostAsyncReturnAsJson(_npvApiUrl, requestModel); } var npvs = JsonConvert.DeserializeObject <IList <NPVDetailModel> >(npvResults); return(Ok(npvs)); }
private NpvModel ConvertCalculationToVM(Calculation model) { var npvModel = new NpvModel(); npvModel.CalculationID = model.CalculationID; npvModel.LowerBoundDiscountRate = model.LowerBoundDiscountRate; npvModel.UpperBoundDiscountRate = model.UpperBoundDiscountRate; npvModel.DiscountRateIncrement = model.DiscountRateIncrement; npvModel.InitialInvestment = model.InitialInvestment; return(npvModel); }
private Calculation InsertCalculation(NpvModel model) { var calculation = new Calculation() { LowerBoundDiscountRate = model.LowerBoundDiscountRate, UpperBoundDiscountRate = model.UpperBoundDiscountRate, DiscountRateIncrement = model.DiscountRateIncrement, InitialInvestment = model.InitialInvestment }; _npvDBEntities.Calculations.Add(calculation); _npvDBEntities.SaveChanges(); return(calculation); }
private IOrderedQueryable <NpvModel> GetAllCalculationHistory() { var result = new List <NpvModel>(); var listOfCalculations = _npvDBEntities.Calculations.ToList(); foreach (var calculationItem in listOfCalculations) { var npvItem = new NpvModel(); npvItem.CalculationID = calculationItem.CalculationID; npvItem.LowerBoundDiscountRate = calculationItem.LowerBoundDiscountRate; npvItem.UpperBoundDiscountRate = calculationItem.UpperBoundDiscountRate; npvItem.DiscountRateIncrement = calculationItem.DiscountRateIncrement; npvItem.InitialInvestment = calculationItem.InitialInvestment; result.Add(npvItem); } return(result.AsQueryable().OrderByDescending(i => i.CalculationID)); }
public async Task <IHttpActionResult> Calculate([FromBody] NpvModel model) { var result = await new NpvHelper().GetNpvResultAsync(model); return(Ok(result)); }
public ActionResult CalculateNpv(NpvModel model) { return(View(model)); }