public IHttpActionResult CalculateNPV(NpvRequest request) { NpvResponse response = new NpvResponse(); List <NPVRecord> npvRecords = new List <NPVRecord>(); npvRecords = CalculatePV(request.LowerBoundDiscountRate, request.UpperBoundDiscountRate, request.DiscountRateIncrement, request.InitialValue, request.CashFlows); response.NPVs = npvRecords; return(Ok(response)); }
public void CalculatingNpvReturnsNpvResponse() { NpvController npvc = new NpvController(); List <decimal> cashFlows = new List <decimal>() { 1000, 1500, 2000 }; var request = new NpvRequest { InitialValue = 10000m, DiscountRateIncrement = 0.25m, LowerBoundDiscountRate = 1.00m, UpperBoundDiscountRate = 1.5m, CashFlows = cashFlows }; var httpResponse = npvc.CalculateNPV(request); var npvResponse = (OkNegotiatedContentResult <NpvResponse>)httpResponse; List <NPVRecord> npvRecords = npvResponse.Content.NPVs; Assert.IsTrue(npvResponse.GetType() == typeof(OkNegotiatedContentResult <NpvResponse>)); }
public NpvResponse GetChartData(NpvRequest request) { IList <double> npvList = new List <double>(); IList <string> npvLabelList = new List <string>(); if (request.IsChecked) { var i = request.LowerBound; do { var val = this.CalculateNPV(Math.Round(i, 2), request.InitialInvestment, request.CashFlows); npvList.Add(val); npvLabelList.Add("NPV for " + i); i += request.DiscountRateIncrement; } while (Math.Round(i, 2) <= request.UpperBound); } var result = this.BuildNpvResponse(npvLabelList, npvList); return(result); }
//public Task<double> CalculateNpv(IList<Cashflow> npvData, double rate, RolloverType rolloverType, bool useXnpvFormula) //{ // // Would be good to use a ServiceResolver<> here to get an INpvService. This allow service changes without having to Update Service Reference... // var th = new TaskHelper<NpvServiceClient, double>(new NpvServiceClient()); // return th.GetTask<double>(new object[] { npvData, rate, rolloverType, useXnpvFormula }); //} public Task<NpvResponse> CalculateNpvForNpvRequest(NpvRequest request, bool useXnpvFormula) { var th = new TaskHelper<NpvServiceClient, double>(new NpvServiceClient()); return th.GetTask<NpvResponse>(new object[] { request, useXnpvFormula }); }
/// <summary> /// Calculate the NPV based on the currently entered values /// </summary> public async void CalculateNpv() { var results = Validate(); if (results.Any()) { var message = string.Join(Environment.NewLine, results.Select(x => x)); MessageBox.Show(message); return; } var roll = (NpvServiceReference.RolloverType)Enum.Parse(typeof(NpvServiceReference.RolloverType), SelectedRoll.Value, true); var npvRequest = new NpvRequest { Cashflows = this.Cashflows, Increment = this.Increment, InitialInvestment = this.InitialInvestment, LowerRate = this.LowerRate, UpperRate = this.UpperRate, RollType = roll }; var values = await _npvService.CalculateNpvForNpvRequest(npvRequest, UseXnpv); NpvList.Clear(); HasNpvValues = true; // Display values 'progressively'... values.NetPresentValues.ToObservable() .Zip(Observable.Interval(TimeSpan.FromMilliseconds(15)), (npvData, time) => npvData) .ObserveOnDispatcher() .Subscribe(x => NpvList.Add(new Npv { Rate = x.Rate, Value = x.Value })); }
public IActionResult GetChartdata(NpvRequest item) { var result = this.service.GetChartData(item); return(Ok(result)); }