Esempio n. 1
0
        public void loan_582_Taras()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M, Term = 3
            };

            calculator.Calculate(1000, _loan, Parse("2012-10-30 00:00:00.000"));
            _loan.Status = LoanStatus.Live;

            var rollover = new PaymentRollover()
            {
                Created      = Parse("2012-12-28 16:00:31.000"),
                ExpiryDate   = Parse("2012-12-31 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[1],
                Payment      = 50
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2012-12-28 14:00:53.000"), 0);
            var state        = payEarlyCalc.GetState();

            Assert.That(state.Fees + state.Interest, Is.EqualTo(116m + 50m));
        }
Esempio n. 2
0
        public void loan_517()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M, Term = 3
            };

            calculator.Calculate(1000, _loan, Parse("2012-10-26 00:00:00.000"));
            _loan.Status = LoanStatus.Live;

            var rollover = new PaymentRollover()
            {
                Created      = Parse("2012-12-26 18:02:54.000"),
                ExpiryDate   = Parse("2012-12-29 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[0],
                Payment      = 50
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            MakePayment(170m, Parse("2012-12-26 16:03:42.000"));

            var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2012-12-26 16:03:42.000"), 0);
            var state        = payEarlyCalc.GetState();

            Assert.That(rollover.PaidPaymentAmount, Is.EqualTo(50m));
            Assert.That(_loan.TransactionsWithPaypoint[0].Rollover, Is.EqualTo(50m));
            Assert.That(_loan.TransactionsWithPaypoint[0].Interest, Is.EqualTo(120m));
            Assert.That(_loan.TransactionsWithPaypoint[0].LoanRepayment, Is.EqualTo(0m));
        }
Esempio n. 3
0
        public void pay_after_expired_rollover()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, Parse("2012-01-01 23:29:35.000"));

            var rollover = new PaymentRollover()
            {
                LoanSchedule = _loan.Schedule[1],
                Created      = Parse("2012-01-25 20:15:43.000"),
                ExpiryDate   = Parse("2012-02-10 20:15:43.000"),
                Payment      = 100
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            var state = _facade.GetStateAt(_loan, Parse("2012-02-11 20:15:43.000"));

            Assert.That(state.Fees, Is.EqualTo(0));

            //pay installment, and rollover
            MakePayment(666, Parse("2012-02-11 20:15:43.000"));

            Console.WriteLine(_loan);

            Assert.That(_loan.TransactionsWithPaypoint[0].Rollover, Is.EqualTo(0));
        }
Esempio n. 4
0
        //https://trello.com/c/IhYey6dp
        public void trello_card_162()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M, Term = 3
            };

            calculator.Calculate(1000, _loan, Parse("2012-11-25 00:00:00.000"));
            _loan.Status = LoanStatus.Live;

            var rollover = new PaymentRollover()
            {
                Created      = Parse("2012-12-22 16:59:04.000"),
                ExpiryDate   = Parse("2012-12-25 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[1],
                Payment      = 50
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            MakePayment(54.00m, Parse("2012-12-22 15:00:15.000"));
            MakePayment(36.00m, Parse("2012-12-22 15:01:21.000"));

            Assert.That(_loan.TransactionsWithPaypoint[0].Interest, Is.EqualTo(54m));

            Assert.That(rollover.PaidPaymentAmount, Is.EqualTo(36m));
            Assert.That(_loan.TransactionsWithPaypoint[1].Rollover, Is.EqualTo(36m));
        }
Esempio n. 5
0
        public void loan_732_prod()
        {
            var calculator = new LoanScheduleCalculator();

            calculator.Term     = 6;
            calculator.Interest = 0.06m;
            calculator.Calculate(5000, _loan, Parse("2013-04-18 09:26:54.000"));

            var rollover = new PaymentRollover
            {
                LoanSchedule = _loan.Schedule[0],
                Created      = Parse("2013-05-18 15:46:54.000"),
                ExpiryDate   = Parse("2013-05-21 00:00:00.000"),
                Payment      = 50,
                Status       = RolloverStatus.New
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            MakePayment(1262.42m, Parse("2013-05-30 00:00:00.000"));
            MakePayment(1088.77m, Parse("2013-06-26 07:04:11.000"));

            var state = GetStateAt(_loan, Parse("2013-06-26 07:04:11.000"));

            Assert.That(state.LoanRepayment, Is.EqualTo(0));

            Console.WriteLine(_loan);
        }
Esempio n. 6
0
        public void check_fees_on_experied_rollover()
        {
            const int rolloverAmount = 50;

            var calculator = new LoanScheduleCalculator {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, Parse("2013-01-15 10:10:10.000"));

            var rollover = new PaymentRollover
            {
                LoanSchedule = _loan.Schedule[1],
                Created      = Parse("2013-01-15 10:10:10.000"),
                ExpiryDate   = Parse("2013-01-25 10:10:10.000"),
                Payment      = rolloverAmount
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2013-01-26 10:10:10.000"), 0);             //state for expired rollover
            var state        = payEarlyCalc.GetState();

            Assert.That(state.Fees, Is.EqualTo(0));
        }
        public void loan_276()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M
            };

            calculator.Calculate(1475, _loan, Parse("2012-12-11 17:07:51.000"));

            Console.WriteLine(_loan);

            MakePayment(123, Parse("2012-12-19 00:00:00.000"));

            var rollover = new PaymentRollover()
            {
                LoanSchedule = _loan.Schedule[0],
                Created      = Parse("2012-12-19 16:20:35.000"),
                ExpiryDate   = Parse("2012-12-22 00:00:00.000"),
                Payment      = 57
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            _facade.GetStateAt(_loan, Parse("2012-12-19 16:20:35.000"));

            Console.WriteLine(_loan);

            Assert.That(rollover.Payment, Is.EqualTo(57m));
        }
Esempio n. 8
0
        public void rollover_is_added_to_total_balance()
        {
            var startDate = DateTime.Now;

            var rolloverCreateDate = startDate.AddDays(35);
            var rolloverExpiryDate = rolloverCreateDate.AddDays(5);
            var payentDate         = rolloverCreateDate.AddDays(4);

            var calculator = new LoanScheduleCalculator {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, startDate);

            var rollover = new PaymentRollover
            {
                LoanSchedule = _loan.Schedule[0],
                Created      = rolloverCreateDate,
                ExpiryDate   = rolloverExpiryDate,
                Payment      = 50,
                Status       = RolloverStatus.New
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            var payment = _loan.TotalEarlyPayment(_loan.Date);

            Assert.That(payment, Is.EqualTo(1050));
        }
Esempio n. 9
0
        public void rollover_adds_to_amount_to_pay_on_installment_date()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, Parse("2012-01-01 23:29:35.000"));

            var rollover = new PaymentRollover()
            {
                LoanSchedule = _loan.Schedule[1],
                Created      = Parse("2012-01-25 20:15:43.000"),
                ExpiryDate   = Parse("2012-02-10 20:15:43.000"),
                Payment      = 100
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            var state = _facade.GetStateAt(_loan, Parse("2012-02-01 12:29:35.000"));

            Assert.That(state.AmountDue, Is.EqualTo(394 + 100));

            Assert.That(rollover.Status, Is.EqualTo(RolloverStatus.New));

            Console.WriteLine(_loan);
        }
Esempio n. 10
0
        public void pay_rollover_ontime()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, Parse("2012-01-01 23:29:35.000"));

            var rollover = new PaymentRollover()
            {
                LoanSchedule = _loan.Schedule[1],
                Created      = Parse("2012-01-25 20:15:43.000"),
                ExpiryDate   = Parse("2012-02-10 20:15:43.000"),
                Payment      = 100,
                MounthCount  = 1
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            //pay installment, and rollover
            MakePayment(394 + 100, Parse("2012-02-01 10:00:04.000"));

            Console.WriteLine(_loan);

            Assert.That(_loan.Schedule[1].Date.Date, Is.EqualTo(new DateTime(2012, 4, 1)));

            //interest is calculated for 2 moths
            Assert.That(_loan.Schedule[1].Interest, Is.EqualTo(82.68M));
        }
Esempio n. 11
0
        //https://trello.com/c/IhYey6dp
        public void trello_card_191()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M, Term = 3
            };

            calculator.Calculate(1000, _loan, Parse("2012-11-20 00:00:00.000"));
            _loan.Status = LoanStatus.Live;

            var rollover = new PaymentRollover()
            {
                Created      = Parse("2012-12-24 17:25:49.000"),
                ExpiryDate   = Parse("2012-12-27 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[1],
                Payment      = 50
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            MakePayment(54.00m, Parse("2012-12-24 15:26:17.000"));
            MakePayment(36.00m, Parse("2012-12-24 15:26:53.000"));
            MakePayment(30.00m, Parse("2012-12-24 15:27:41.000"));

            Assert.That(rollover.PaidPaymentAmount, Is.EqualTo(50m));
            Assert.That(_loan.TransactionsWithPaypoint[2].Rollover, Is.EqualTo(27.74m));
        }
        private decimal PayRollover(PaymentRollover rollover, PaypointTransaction payment, decimal money)
        {
            decimal amount;

            if (
                rollover != null &&
                rollover.Created.Date <= _lastActionDate.Date &&
                _lastActionDate < rollover.ExpiryDate &&
                _totalRollOversToPay > _paidRollOvers
                //_currentRollover.Status == RolloverStatus.New
                )
            {
                amount = Math.Min(money, rollover.Payment - rollover.PaidPaymentAmount);
                //_currentRollover.Payment = _currentRollover.Payment - amount;
                rollover.PaidPaymentAmount += amount;
                payment.Rollover           += amount;
                _paidRollOvers             += amount;
                money = money - amount;

                //if rollover is payed
                if (_paidRollOvers >= _totalRollOversToPay)
                {
                    //than shifting schedule in case of "first" repayment
                    if (rollover.Status == RolloverStatus.New)
                    {
                        _loan.ShiftPayments(rollover.LoanSchedule.Date, rollover.MounthCount);
                        ShiftEvents(rollover.LoanSchedule.Date, rollover.MounthCount);
                        rollover.CustomerConfirmationDate = payment.PostDate;
                        rollover.PaymentNewDate           = rollover.LoanSchedule.Date;
                    }
                    rollover.Status = RolloverStatus.Paid;
                }
            }
            return(money);
        }
Esempio n. 13
0
        public void pay_rollover_with_two_shuffle_mouth()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, new DateTime(2012, 1, 1));

            var rollover = new PaymentRollover()
            {
                LoanSchedule = _loan.Schedule[1],
                Created      = new DateTime(2012, 2, 10),
                ExpiryDate   = new DateTime(2012, 2, 15),
                Payment      = 100,
                MounthCount  = 2
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            //pay installment, and rollover
            MakePayment(394 + 100, new DateTime(2012, 2, 12));

            Console.WriteLine(_loan);

            Assert.That(_loan.Schedule[1].Date.Date, Is.EqualTo(new DateTime(2012, 5, 1)));
        }
Esempio n. 14
0
        public void double_principal_bug()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M, Term = 3
            };

            calculator.Calculate(1000, _loan, Parse("2012-10-27 18:43:59.000"));
            _loan.Status = LoanStatus.Live;

            var rollover = new PaymentRollover()
            {
                Created      = Parse("2012-12-27 20:46:25.000"),
                ExpiryDate   = Parse("2012-12-28 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[0],
                Payment      = 50
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            MakePayment(170m, Parse("2012-12-27 08:58:02.000"));

            //var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2012-12-27 08:58:02.000"));
            //var state = payEarlyCalc.GetState();

            Assert.That(_loan.Schedule[0].Status, Is.EqualTo(LoanScheduleStatus.StillToPay));
            Assert.That(_loan.Schedule[1].Status, Is.EqualTo(LoanScheduleStatus.StillToPay));
            Assert.That(_loan.Schedule[2].Status, Is.EqualTo(LoanScheduleStatus.StillToPay));

            Console.WriteLine(_loan);
        }
Esempio n. 15
0
        public void check_fees_on_experied_rollover2()
        {
            const int rolloverAmount = 50;

            var calculator = new LoanScheduleCalculator {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, Parse("2012-12-05 00:00:00.000"));

            var rollover = new PaymentRollover
            {
                LoanSchedule = _loan.Schedule[0],
                Created      = Parse("2013-01-08 13:35:59.000"),
                ExpiryDate   = Parse("2013-01-09 00:00:00.000"),
                Payment      = rolloverAmount
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2013-01-11 10:10:10.000"), 0);             //state for expired rollover
            var state1       = payEarlyCalc.GetState();
            var state        = payEarlyCalc.GetState();

            var model = LoanModel.FromLoan(_loan, payEarlyCalc, payEarlyCalc);

            Assert.That(state.Fees, Is.EqualTo(0));
            Assert.That(state.AmountDue, Is.EqualTo(405.61m));
            Assert.That(state.LateCharges, Is.EqualTo(0));
            Assert.That(state.Interest, Is.EqualTo(405.61m - 334m));

            Assert.That(model.Late, Is.EqualTo(405.61m));
        }
Esempio n. 16
0
        public void rollover_expires()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, Parse("2012-01-01 23:29:35.000"));

            var rollover = new PaymentRollover()
            {
                LoanSchedule = _loan.Schedule[1],
                Created      = Parse("2012-01-25 20:15:43.000"),
                ExpiryDate   = Parse("2012-02-10 20:15:43.000"),
                Payment      = 100
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            var state = _facade.GetStateAt(_loan, Parse("2012-02-11 12:29:35.000"));

            Assert.That(rollover.Status, Is.EqualTo(RolloverStatus.Expired));

            Console.WriteLine(_loan);
        }
Esempio n. 17
0
        public void loan_478_roman()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M, Term = 3
            };

            calculator.Calculate(1000, _loan, Parse("2012-05-26 00:00:00.000"));
            _loan.Status = LoanStatus.Live;

            var rollover1 = new PaymentRollover()
            {
                Created      = Parse("2012-12-26 12:35:42.000"),
                ExpiryDate   = Parse("2012-12-29 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[0],
                Payment      = 50
            };

            var rollover2 = new PaymentRollover()
            {
                Created      = Parse("2012-12-26 12:39:12.000"),
                ExpiryDate   = Parse("2012-12-29 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[0],
                Payment      = 50
            };

            _loan.Schedule[0].Rollovers.Add(rollover1);
            _loan.Schedule[0].Rollovers.Add(rollover2);

            Console.WriteLine(_loan);

            var state = _facade.GetStateAt(_loan, Parse("2012-12-26 10:36:26.000"));

            var interest = 420m;

            Assert.That(state.Interest, Is.EqualTo(interest));

            MakePayment(interest + 50m, Parse("2012-12-26 10:36:26.000"));
            Assert.That(_loan.TransactionsWithPaypoint[0].Interest, Is.EqualTo(interest));
            Assert.That(_loan.TransactionsWithPaypoint[0].Rollover, Is.EqualTo(50));
            Assert.That(rollover1.PaidPaymentAmount, Is.EqualTo(50));

            MakePayment(50m, Parse("2012-12-26 10:54:48.000"));

            Assert.That(rollover2.PaidPaymentAmount, Is.EqualTo(50));
            Assert.That(_loan.TransactionsWithPaypoint[1].Rollover, Is.EqualTo(50));
            MakePayment(1000.00m, Parse("2012-12-26 10:57:31.000"));

            Assert.That(_loan.Status, Is.EqualTo(LoanStatus.PaidOff));

            Assert.That(rollover1.PaidPaymentAmount, Is.EqualTo(50));
            Assert.That(rollover2.PaidPaymentAmount, Is.EqualTo(50));

            Console.WriteLine(_loan);
        }
        private void ProcessRollover(PaymentRollover rollover)
        {
            if (rollover.Status == RolloverStatus.Removed)
            {
                return;
            }

            _currentRollover.Add(rollover);
            rollover.PaidPaymentAmount = 0;
            _totalRollOversToPay      += rollover.Payment;
        }
Esempio n. 19
0
        public void pay_after_remove_rollover()
        {
            var loanDate           = Parse("2013-01-15 10:10:10.000");
            var rolloverCreateDate = Parse("2013-01-15 10:10:10.000");
            var rolloverExpiryDate = Parse("2013-01-25 10:10:10.000");

            const int rolloverAmount = 50;

            var calculator = new LoanScheduleCalculator {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, loanDate);

            var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, rolloverCreateDate, 0);
            var state        = payEarlyCalc.GetState();

            var rolloverRemoved = new PaymentRollover
            {
                LoanSchedule = _loan.Schedule[0],
                Created      = rolloverCreateDate,
                ExpiryDate   = rolloverExpiryDate,
                Payment      = rolloverAmount,
                Status       = RolloverStatus.Removed
            };
            var rolloverActive = new PaymentRollover
            {
                LoanSchedule = _loan.Schedule[0],
                Created      = rolloverCreateDate,
                ExpiryDate   = rolloverExpiryDate,
                Payment      = rolloverAmount,
                Status       = RolloverStatus.New
            };

            _loan.Schedule[0].Rollovers.Add(rolloverRemoved);
            _loan.Schedule[0].Rollovers.Add(rolloverActive);

            MakePayment(394 + rolloverAmount, rolloverCreateDate);

            payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, rolloverCreateDate, 0);

            Console.WriteLine(_loan.ToString());

            state = payEarlyCalc.GetState();
            Assert.That(state.Fees, Is.EqualTo(0));
        }
Esempio n. 20
0
        public void loan_533_Taras()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M, Term = 3
            };

            calculator.Calculate(1000, _loan, Parse("2012-10-12 00:00:00.000"));
            _loan.Status = LoanStatus.Live;

            var rollover = new PaymentRollover()
            {
                Created      = Parse("2012-12-27 15:18:30.000"),
                ExpiryDate   = Parse("2012-12-30 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[0],
                Payment      = 50
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            var charge = new LoanCharge()
            {
                Amount = 75, ChargesType = null, Date = Parse("2012-12-27 13:15:29.000"), Loan = _loan
            };

            _loan.Charges.Add(charge);

            Console.WriteLine(_loan);

            var now = Parse("2012-12-27 13:19:00.000");

            MakePayment(274.03m, now);

            //var model = LoanModel.FromLoan(_loan, new LoanRepaymentScheduleCalculator(_loan, now), new LoanRepaymentScheduleCalculator(_loan, now));

            var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, now, 0);
            var state        = payEarlyCalc.GetState();

            Console.WriteLine(_loan);

            Assert.That(_loan.Schedule[0].Interest, Is.EqualTo(0));
        }
Esempio n. 21
0
        public void check_fees_on_delete_rollover()
        {
            var loanDate           = Parse("2013-01-15 10:10:10.000");
            var rolloverCreateDate = Parse("2013-01-15 10:10:10.000");
            var rolloverExpiryDate = Parse("2013-01-25 10:10:10.000");
            var stateDate          = Parse("2013-01-20 10:10:10.000");

            const int rolloverAmount = 50;

            var calculator = new LoanScheduleCalculator {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, loanDate);

            var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, stateDate, 0);

            var rollover = new PaymentRollover
            {
                LoanSchedule = _loan.Schedule[1],
                Created      = rolloverCreateDate,
                ExpiryDate   = rolloverExpiryDate,
                Payment      = rolloverAmount
            };

            _loan.Schedule[1].Rollovers.Add(rollover);

            var state = payEarlyCalc.GetState();
            var fees  = state.Fees;

            foreach (var r in _loan.Schedule[1].Rollovers)
            {
                r.Status = RolloverStatus.Removed;
            }

            state = payEarlyCalc.GetState();
            Assert.That(state.Fees, Is.EqualTo(fees - rolloverAmount));
        }
Esempio n. 22
0
        public void make_paid_half_rollover()
        {
            var startDate = new DateTime(2012, 12, 26);

            var rolloverCreateDate = startDate.AddDays(35);
            var rolloverExpiryDate = rolloverCreateDate.AddDays(5);
            var payentDate         = rolloverCreateDate.AddDays(4);

            var calculator = new LoanScheduleCalculator {
                Interest = 0.06M
            };

            calculator.Calculate(1000, _loan, startDate);

            var rollover = new PaymentRollover
            {
                LoanSchedule = _loan.Schedule[0],
                Created      = rolloverCreateDate,
                ExpiryDate   = rolloverExpiryDate,
                Payment      = 50,
                Status       = RolloverStatus.New
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            //pay installment, and rollover
            MakePayment(100, payentDate);

            Console.WriteLine(_loan);

            //check for half paid rollover
            rollover = _loan.Schedule[0].Rollovers.FirstOrDefault(x => x.Status == RolloverStatus.New);
            Assert.That(rollover, Is.Not.Null);
            Assert.That(rollover.PaidPaymentAmount, Is.EqualTo(24.52m));
        }
Esempio n. 23
0
        public void total_early_payment_expired_rollover()
        {
            var calculator = new LoanScheduleCalculator()
            {
                Interest = 0.06M, Term = 3
            };

            calculator.Calculate(1000, _loan, Parse("2012-12-27 18:43:59.000"));
            _loan.Status = LoanStatus.Live;

            var rollover = new PaymentRollover()
            {
                Created      = Parse("2012-12-27 20:46:25.000"),
                ExpiryDate   = Parse("2012-12-28 00:00:00.000"),
                Status       = RolloverStatus.New,
                LoanSchedule = _loan.Schedule[0],
                Payment      = 50
            };

            _loan.Schedule[0].Rollovers.Add(rollover);

            Console.WriteLine(_loan);

            MakePayment(335.94m, Parse("2012-12-28 08:58:02.000"));

            var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2012-12-28 09:26:50.000"), 0);
            var payment      = payEarlyCalc.TotalEarlyPayment();

            Assert.That(payment, Is.EqualTo(666m));

            MakePayment(666m, Parse("2012-12-28 09:26:50.000"));

            Console.WriteLine(_loan);

            Assert.That(_loan.Status, Is.EqualTo(LoanStatus.PaidOff));
        }
Esempio n. 24
0
 public LoanRepaymentScheduleCalculatorEvent(DateTime date, PaymentRollover rollover) : this(date)
 {
     Rollover = rollover;
 }