Esempio n. 1
0
        public IOutputDataCredit GetOutputCreditDetails(IInputDataCredit inputDataCredit)
        {
            if (inputDataCredit == null)
            {
                throw new ArgumentNullException(nameof(inputDataCredit));
            }

            var annuityPaymentFactor = inputDataCredit.InterestRateOfYear / 100 / 12;
            var amountPayment        = GetAmountPayment(inputDataCredit);
            var paymentsDetails      = new List <IPaymentDetails>(inputDataCredit.CreditTerm);
            var date        = DateTime.Now.Date;
            var balanceDebt = inputDataCredit.SumOfCredit;

            for (var j = 0; j < inputDataCredit.CreditTerm; j++)
            {
                var paymentPercent = balanceDebt * annuityPaymentFactor;
                var paymentBody    = amountPayment - paymentPercent;
                balanceDebt -= paymentBody;
                paymentsDetails.Add(new PaymentDetails(
                                        j + 1,
                                        date.ToString("dd/MM/yyyy"),
                                        Math.Round(paymentBody, 2),
                                        Math.Round(paymentPercent, 2),
                                        Math.Round(balanceDebt, 2)
                                        ));

                date = date.AddMonths(1);
            }

            return(new OutputDataCredit(paymentsDetails, GetOverPayment(inputDataCredit)));
        }
Esempio n. 2
0
        private decimal GetAmountPayment(IInputDataCredit inputDataCredit)
        {
            var annuityPaymentFactor = inputDataCredit.InterestRateOfYear / 100 / 12;
            var creditTerm           = inputDataCredit.CreditTerm;
            var factor = decimal.ToDouble(annuityPaymentFactor) * Math.Pow(decimal.ToDouble(1 + annuityPaymentFactor), creditTerm) / (Math.Pow(decimal.ToDouble(1 + annuityPaymentFactor), creditTerm) - 1);

            return(inputDataCredit.SumOfCredit * (decimal)factor);
        }
Esempio n. 3
0
 private decimal GetOverPayment(IInputDataCredit inputDataCredit)
 {
     return(Math.Round(GetAmountPayment(inputDataCredit) * inputDataCredit.CreditTerm - inputDataCredit.SumOfCredit, 2));
 }