Exemple #1
0
        public async Task <IActionResult> PostNpvTbl([FromBody] NpvTbl npvTbl)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.NpvTbl.Add(npvTbl);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetNpvTbl", new { id = npvTbl.Id }, npvTbl));
        }
Exemple #2
0
        public async Task <IActionResult> CalculateNPV(NPVCalculationInfo input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (input.CashFlow.Count == 0 || input.InitialValue == 0)
            {
                return(BadRequest());
            }

            var           cId            = DateTime.Now.ToString("yyyyMMddHHmmss");
            var           cfStr          = string.Join(",", input.CashFlow);
            List <NpvTbl> computedValues = new List <NpvTbl>();
            var           rates          = new List <double>();
            double        templb         = input.LowerBound;

            while (templb < input.UpperBound)
            {
                rates.Add(Math.Round(templb, 2));
                templb += input.Increment;
                if (templb >= input.UpperBound)
                {
                    rates.Add(Math.Round(input.UpperBound, 2));
                }
            }
            foreach (var rt in rates)
            {
                var compInfo = new NpvTbl();
                compInfo.CalculationId = cId;
                compInfo.ComputedValue = GetNPV(rt, input.InitialValue, input.CashFlow);
                compInfo.Rate          = rt;
                _context.NpvTbl.Add(compInfo);
            }

            var cf = new CashflowTbl();

            cf.CalculationId = cId;
            cf.CashFlow      = cfStr;
            _context.CashflowTbl.Add(cf);

            await _context.SaveChangesAsync();

            return(Ok(cId));
        }