Exemple #1
0
        public async Task <AddResult <NpvVariable> > AddNpvVariable(NpvVariable data)
        {
            var addResult = new AddResult <NpvVariable>();

            try
            {
                var entry = new NpvVariableEntity
                {
                    InitialValue     = data.InitialValue,
                    LowerBoundRate   = data.LowerBoundRate,
                    UpperBoundRate   = data.UpperBoundRate,
                    Increment        = data.Increment,
                    CashflowEntities = new List <NpvVariableCashflowEntity>()
                };

                var order = 1;
                data.Cashflows?.ForEach(x =>
                {
                    entry.CashflowEntities.Add(new NpvVariableCashflowEntity
                    {
                        Cashflow = x.Cashflow,
                        Order    = order++
                    });
                });

                _appDbContext.NpvVariables.Add(entry);
                var saveResult = await _appDbContext.SaveChangesAsync();

                if (saveResult == 0)
                {
                    addResult.Errors.Add(new Error(ErrorCodes.NpvVariableServiceError001));
                }
                else
                {
                    addResult.Result = await _appDbContext.NpvVariables.GetNpvVariableById(entry.Id);
                }
            }
            catch (Exception ex)
            {
                // do logging here
                addResult.Errors.Add(new Error(ErrorCodes.NpvVariableServiceError002));
            }

            return(addResult);
        }
        public async Task <IActionResult> CalculateAsync([FromQuery] NpvCalculateModel npvCalculateModel)
        {
            var computeResult = _npvService.ComputeNPVs(
                npvCalculateModel.InitialValue,
                npvCalculateModel.LowerBoundRate,
                npvCalculateModel.UpperBoundRate,
                npvCalculateModel.Increment,
                npvCalculateModel.Cashflows
                );

            if (!computeResult.HasErrors)
            {
                var npvVariable = new NpvVariable
                {
                    InitialValue   = npvCalculateModel.InitialValue,
                    LowerBoundRate = npvCalculateModel.LowerBoundRate,
                    UpperBoundRate = npvCalculateModel.UpperBoundRate,
                    Increment      = npvCalculateModel.Increment,
                    Cashflows      = new List <NpvVariableCashflow>()
                };

                for (int ctr = 0; ctr < npvCalculateModel.Cashflows.Count; ctr++)
                {
                    npvVariable.Cashflows.Add(new NpvVariableCashflow
                    {
                        Cashflow = npvCalculateModel.Cashflows[ctr],
                        Order    = ctr
                    });
                }

                var addResult = await _npvVariableService.AddNpvVariable(npvVariable);

                if (addResult.HasErrors)
                {
                    computeResult.Errors.AddRange(addResult.Errors);
                }
            }

            if (computeResult.HasErrors)
            {
                return(BadRequest(computeResult));
            }

            return(Ok(computeResult));
        }