Exemple #1
0
        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));
        }
Exemple #2
0
        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>));
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        //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 });
        }
Exemple #5
0
        /// <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 }));
        }
Exemple #6
0
        public IActionResult GetChartdata(NpvRequest item)
        {
            var result = this.service.GetChartData(item);

            return(Ok(result));
        }