public void AssignAmortization(AmortizationEntry item) { if (item != null) { _amortizationEntry = item; } }
private AmortizationEntry ApplyMonthlyPayment(DateTime currentDate, DebtEntry debtEntry, PaymentManager paymentManager, ref double additionalPrincipal, bool applySnowball) { double startingBalance = debtEntry.CurrentBalance; double interestPortion = debtEntry.MonthlyInterest * debtEntry.CurrentBalance; double minimumMonthlyPayment = debtEntry.MinimumMonthlyPayment; if (debtEntry.DebtType == DebtType.CreditCard && minimumMonthlyPayment < debtEntry.MinimumMonthlyPaymentLimit) { minimumMonthlyPayment = debtEntry.MinimumMonthlyPaymentLimit; } double minimumPrincipal = debtEntry.MinimumMonthlyPayment - interestPortion; double principalPortion = minimumPrincipal + additionalPrincipal; double possibleBalance = debtEntry.CurrentBalance - principalPortion; if (possibleBalance < 0) { if (minimumPrincipal >= debtEntry.CurrentBalance) { minimumPrincipal = debtEntry.CurrentBalance - interestPortion; additionalPrincipal = 0; } else { additionalPrincipal = debtEntry.CurrentBalance - minimumPrincipal - interestPortion; } debtEntry.CurrentBalance = 0; if (applySnowball) { paymentManager.WindfallEntries.Add(new WindfallEntry(string.Empty, Math.Abs(possibleBalance), currentDate.AddMonths(1))); if (paymentManager.SnowballEntries.Count > 0) { paymentManager.SnowballEntries [0].Amount += debtEntry.MinimumMonthlyPayment; } else { paymentManager.SnowballEntries.Add (new SnowballEntry ("Temp", debtEntry.MinimumMonthlyPayment)); } } } else if (possibleBalance > debtEntry.CurrentBalance) { debtEntry.Name += " INVALID!"; debtEntry.CurrentBalance = -9999; } else { debtEntry.CurrentBalance = possibleBalance; } AmortizationEntry output = new AmortizationEntry( debtEntry.Name, debtEntry.DebtType, currentDate, startingBalance, interestPortion, minimumPrincipal, additionalPrincipal, debtEntry.CurrentBalance); // We always use up all of the additional principle, otherwise it gets added as a windfall the // following month additionalPrincipal = 0; return output; }
public void WriteToConsole(AmortizationEntry output) { string message = output.DebtName + ": " + DateTimeHelpers.ToShortMonthName(output.Date) + " " + output.Date.Year + " Starting Balance: " + output.StartBalance.ToString("C") + " Min Interest: " + output.MinimumInterest.ToString("C") + " Min Principal: " + output.MinimumPrincipal.ToString("C") + " Add Principal: " + output.AdditionalPrincipal.ToString("C") + " Total Payment: " + output.TotalPayment.ToString("C") + " Ending Balance: " + output.EndBalance.ToString("C"); output.Print(message); }