Esempio n. 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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        public async Task <IHttpActionResult> Calculate([FromBody] NpvModel model)
        {
            var result = await new NpvHelper().GetNpvResultAsync(model);

            return(Ok(result));
        }
Esempio n. 7
0
 public ActionResult CalculateNpv(NpvModel model)
 {
     return(View(model));
 }