예제 #1
0
        public BuildTest()
        {
            var purchasedAt           = new DateTime(2019, 1, 1);
            var mortgageAmount        = 328000.00M;
            var mortgageAmountMoney   = new Money(mortgageAmount, purchasedAt);
            var preferredInterestRate = 0.0319M;

            BaseMortgage = new FixedRateMortgage(mortgageAmountMoney, preferredInterestRate, 300, purchasedAt);
            Subject      = new PrepayableMortgageBuilder(BaseMortgage);
            Result       = Subject.Build();
        }
예제 #2
0
        public void Test_Constructor(int year, int month, int day, int expectedYear, int expectedMonth, int expectedDay)
        {
            var date  = new DateTime(year, month, day);
            var money = 100.00M;

            var baseMortgage = new FixedRateMortgage(money, 0.0314M, 300, date);
            var mortgage     = new PrepayableMortgage(baseMortgage);

            Assert.That(mortgage.InitiatedAt.Year, Is.EqualTo(expectedYear));
            Assert.That(mortgage.InitiatedAt.Month, Is.EqualTo(expectedMonth));
            Assert.That(mortgage.InitiatedAt.Day, Is.EqualTo(expectedDay));
        }
예제 #3
0
        public PrepayableMortgage Build()
        {
            var     result          = new PrepayableMortgage(Mortgage, MaximumAllowedPrepaymentPercentage);
            decimal mortgageBalance = result.InitialValue;
            var     startAt         = result.InitiatedAt;
            var     at = startAt;

            while (mortgageBalance > 0.00M)
            {
                // TODO: verify whether 0:00:00.00 - 1 milliseconds
                // is the previous day
                var endOfMonth = new DateTime(at.Year, at.Month, 1)
                                 .AddMonths(1)
                                 .AddMilliseconds(-1);
                // FIXME: Is this API to retrieve the 12th month?
                if (endOfMonth.Month == 12)
                {
                    // FIXME: Figure out correct amount
                    var prepayment = CreatePrepayment(
                        result.GetBalance(at),
                        result.Prepayments.MaximumAnnualTotal
                        );
                    result.AddPrepayment(
                        endOfMonth,
                        prepayment
                        );

                    startAt         = endOfMonth;
                    mortgageBalance = result.GetBalance(endOfMonth);
                }
                else
                {
                    mortgageBalance = result.GetBalance(at);
                }

                at = at.AddMonths(1);
            }

            return(result);
        }