예제 #1
0
        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);
        }
예제 #2
0
        public async Task <NpvChartModel> GetNpvByIDAsync(int id)
        {
            var result = new NpvChartModel();

            await Task.Run(() =>
            {
                var nvpModel  = GetCalculationByID(id);
                var cashFlows = nvpModel.ListOfCashFlows;
                cashFlows.Insert(0, nvpModel.InitialInvestment);

                var discountRate = nvpModel.LowerBoundDiscountRate;
                while (discountRate <= nvpModel.UpperBoundDiscountRate)
                {
                    result.Labels.Add($"{discountRate}%");
                    result.Values.Add(CaculateNpv(cashFlows, discountRate));

                    discountRate = Math.Round(discountRate + nvpModel.DiscountRateIncrement, 2);
                }
                ;
            });

            return(result);
        }