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);
        }