public async Task Calculate(ICreditRepository repository) { var credit = await repository.GetCreditAsync(); bool isFirst = true; decimal priorInterestToRepay = 0; var debt = credit.AmountOfCredit; var k = credit.AnnualLendingRate / 1200; var q = 1 + k; var qPowLol = q.Pow(credit.LifeOfLoan); int month = 1; var installment = debt * qPowLol * (q - 1) / (qPowLol - 1); // rata var results = new List <FinancialResult>(); while (debt > 1) { var result = new FinancialResult(); result.MonthNumber = month.ToString(); result.InterestPartOfInstallment = (debt * k).Stringify(); // odsetki będące częścią raty result.CapitalPartOfInstallment = (installment - debt * k).Stringify(); // kapitał do spłacenia będący częścią raty result.CapitalToRepay = (debt - installment + debt * k).Stringify(); priorInterestToRepay = isFirst ? installment * credit.LifeOfLoan - debt - debt * k : priorInterestToRepay - debt * k; result.InterestToRepay = priorInterestToRepay.Stringify(); // result.Installment = (debt*k).RoundTo2() + (installment - debt*k).RoundTo2() > installment.RoundTo2() // ? (installment.RoundTo2() + 0.01m).Stringify() // : installment.RoundTo2().Stringify(); debt = debt - installment + debt * k; isFirst = false; month++; await repository.AddFinancialResultAsync(result); } }
public async Task <ActionResult <CreditModel> > Get(int InvoiceId, int Id) { try { var result = await _repository.GetCreditAsync(InvoiceId, Id); if (result == null) { return(NotFound()); } return(_mapper.Map <CreditModel>(result)); } catch (Exception) { return(this.StatusCode(StatusCodes.Status500InternalServerError, "Database Failure")); } }
public async Task SetCreditAsync(decimal amountOfCredit, decimal annualLendingRate, int lifeOfLoan) { _newParams = true; var credit = await _repository.GetCreditAsync(); if (credit != null) { if (credit.AmountOfCredit == amountOfCredit && credit.AnnualLendingRate == annualLendingRate && credit.LifeOfLoan == lifeOfLoan) { _newParams = false; return; } } await _repository.ClearAsync(); await _repository.SetCreditAsync(new Credit { AmountOfCredit = amountOfCredit, AnnualLendingRate = annualLendingRate, LifeOfLoan = lifeOfLoan }); }