public IEnumerable<Payment> CalculateRepaymentPlan() { var payments = new List<Payment>(); decimal monthlyInterest = Interest / 12.0M; var terms = RepaymentYears * 12; decimal previousValue = Amount; var termPayment = Amount/terms; for (int period = 1; period < terms + 1; period++) { var interest = previousValue*monthlyInterest; var payment = new Payment() { Period = period, TotalAmount = termPayment + interest, InterestAmount = previousValue * monthlyInterest, PaymentAmount = termPayment, RemainingDebt = Amount - payments.Sum(p => p.PaymentAmount) - termPayment }; payments.Add(payment); previousValue = previousValue-termPayment; } return payments; }
public IEnumerable<Payment> CalculateRepaymentPlan() { var payments = new List<Payment>(); decimal monthlyInterest = Interest / 12; double terms = RepaymentYears*12; decimal previousValue = Amount; for (int period = 1; period < terms+1; period++) { decimal annuitet = pmt(monthlyInterest, (terms+1) - period, -previousValue, 0, 0); decimal currentPaymentAmount = (annuitet - (previousValue*monthlyInterest)); var payment = new Payment() { Period = period, TotalAmount = annuitet, InterestAmount = previousValue*monthlyInterest, PaymentAmount = currentPaymentAmount, RemainingDebt = Amount - payments.Sum(p => p.PaymentAmount) - currentPaymentAmount }; payments.Add(payment); previousValue = previousValue + payment.InterestAmount - annuitet; } return payments; }