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)); }
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)); }
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)); }
//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)); }
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); }
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)); }
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)); }
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); }
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)); }
//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); }
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))); }
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); }
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)); }
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); }
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; }
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)); }
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)); }
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)); }
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)); }
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)); }
public LoanRepaymentScheduleCalculatorEvent(DateTime date, PaymentRollover rollover) : this(date) { Rollover = rollover; }