public JsonResult Loan(EditLoanDetailsModel model) { var loan = this._loans.Get(model.Id); var historyItem = new LoanChangesHistory { Data = this._loanModelBuilder.BuildModel(loan).ToJSON(), Date = DateTime.UtcNow, Loan = loan, User = this._context.User }; this._history.Save(historyItem); // remove/add fees/installment/pp transaction // model - from UI (modified), loan - from DB this._loanModelBuilder.UpdateLoan(model, loan); Log.DebugFormat("model {0} =================== loan {1} ", model, loan); //TODO update loan (apply all modifications) Log.DebugFormat("apply loan modifications for customer {0}", loan.Customer.Id); var calc = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); calc.GetState(); // NL cancel payment try { long nlLoanId = this.serviceClient.Instance.GetLoanByOldID(model.Id, loan.Customer.Id, this._context.UserId).Value; if (nlLoanId > 0) { NL_Model nlModel = this.serviceClient.Instance.GetLoanState(loan.Customer.Id, nlLoanId, DateTime.UtcNow, this._context.UserId, false).Value; Log.InfoFormat("nlModel : {0} loan: {1} >>>", nlModel, loan); foreach (PaypointTransaction t in loan.TransactionsWithPaypointSuccesefull.Where(t => t.Cancelled)) { foreach (NL_Payments zz in nlModel.Loan.Payments) { if (zz.Amount == t.CancelledAmount && zz.PaymentTime.Date.Equals(t.PostDate.Date)) //&& (zz.PaypointTransactions.FirstOrDefault(x => x.PaypointUniqueID == t.PaypointId && x.IP == t.IP) != null)) { zz.DeletedByUserID = this._context.UserId; zz.DeletionTime = DateTime.UtcNow; zz.Notes = t.Description; zz.PaymentStatusID = (int)NLPaymentStatuses.WrongPayment; Log.InfoFormat("cancelling NL payment {0}", zz); this.serviceClient.Instance.CancelPayment(this._context.UserId, zz, loan.Customer.Id); } } } } // ReSharper disable once CatchAllClause } catch (Exception fex) { Log.InfoFormat("Fail to cancel NL payment(s). {0}, err: {1}", Environment.StackTrace, fex.Message); } RescheduleSetmodel(loan.Id, model); return(Json(model, JsonRequestBehavior.AllowGet)); }
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)); }
private LoanOffer GetLoanOffer(long id) { var cr = _cashRequests.Get(id); var loan = _loanBuilder.CreateNewLoan(cr, cr.ApprovedSum(), cr.OfferStart.HasValue ? cr.OfferStart.Value : DateTime.UtcNow, cr.ApprovedRepaymentPeriod.HasValue ? cr.ApprovedRepaymentPeriod.Value : 12); var calc = new LoanRepaymentScheduleCalculator(loan, loan.Date, CurrentValues.Instance.AmountToChargeFrom); calc.GetState(); try { ServiceClient service = new ServiceClient(); long nlLoanId = service.Instance.GetLoanByOldID(loan.Id, cr.Customer.Id, 1).Value; if (nlLoanId > 0) { var nlModel = service.Instance.GetLoanState(loan.Customer.Id, nlLoanId, loan.Date, 1, true).Value; Log.InfoFormat("<<< NL_Compare: {0}\n===============loan: {1} >>>", nlModel, loan); } // ReSharper disable once CatchAllClause } catch (Exception ex) { Log.InfoFormat("<<< NL_Compare fail at: {0}, err: {1}", Environment.StackTrace, ex.Message); } var apr = loan.LoanAmount == 0 ? 0 : _aprCalc.Calculate(loan.LoanAmount, loan.Schedule, loan.SetupFee, loan.Date); var loanOffer = LoanOffer.InitFromLoan(loan, apr, null, cr); //TODO calculate offer Log.DebugFormat("calculate offer for customer {0}", cr.Customer.Id); return(loanOffer); }
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 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)); }
} // BuildLoan /// <summary> /// Looks like this method is not used any more (after removing edit loan button from underwriter's /// approval dialogue. The button was located in _ProfileTemplateMain.cshtml. /// </summary> /// <param name="cr"></param> /// <param name="amount"></param> /// <param name="now"></param> /// <returns></returns> private Loan CreateLoanFromTemplate(CashRequest cr, decimal amount, DateTime now) { var model = EditLoanDetailsModel.Parse(cr.LoanTemplate); var loan = _builder.CreateLoan(model); loan.LoanType = cr.LoanType; loan.CashRequest = cr; AdjustDates(now, loan); AdjustBalances(amount, loan); var c = new LoanRepaymentScheduleCalculator(loan, now, CurrentValues.Instance.AmountToChargeFrom); c.GetState(); if (loan.Id > 0) { try { ServiceClient serviceClient = new ServiceClient(); long nlLoanId = serviceClient.Instance.GetLoanByOldID(loan.Id, cr.Customer.Id, 1) .Value; if (nlLoanId > 0) { var nlModel = serviceClient.Instance.GetLoanState(loan.Customer.Id, nlLoanId, DateTime.UtcNow, 1, true).Value; log.Msg("<<< NL_Compare: {0}\n===============loan: {1} >>>", nlModel, loan); } // ReSharper disable once CatchAllClause } catch (Exception ex) { log.Msg("<<< NL_Compare fail at: {0}, err: {1}", Environment.StackTrace, ex.Message); } // try } // if loan.LoanSource = cr.LoanSource; return loan; } // CreateLoanFromTemplate
//https://trello.com/c/MeFaqtiZ public void trello_card_122_totalearlypayment() { var calculator = new LoanScheduleCalculator() { Interest = 0.06M }; calculator.Calculate(1110, _loan, Parse("2012-12-14 11:11:38.000")); _loan.Status = LoanStatus.Live; MakePayment(378.59m, Parse("2012-12-18 14:47:08.000")); MakePayment(731.41m, Parse("2012-12-18 15:01:07.000")); Console.WriteLine(_loan); var calc = new LoanRepaymentScheduleCalculator(_loan, Parse("2012-12-21 11:11:38.000"), 0); var payment = calc.TotalEarlyPayment(); var next = calc.NextEarlyPayment(); Console.WriteLine(_loan); Assert.That(payment, Is.EqualTo(8.64m)); Assert.That(next, Is.EqualTo(8.64m)); }
public void CalculatorState() { DateTime calcTime = DateTime.UtcNow; const long loanID = 10007; const int customerID = 59; GetLoanState dbState = new GetLoanState(customerID, loanID, calcTime, 357, false); try { dbState.Execute(); } catch (NL_ExceptionInputDataInvalid nlExceptionInputDataInvalid) { Console.WriteLine(nlExceptionInputDataInvalid.Message); return; } try { ALoanCalculator calc = new LegacyLoanCalculator(dbState.Result, calcTime); calc.GetState(); m_oLog.Debug("----------------------------------{0}", calc.WorkingModel); } catch (Exception exception) { m_oLog.Error("{0}", exception.Message); } return; // old loan LoanRepository loanRep = ObjectFactory.GetInstance<LoanRepository>(); Loan oldLoan = loanRep.Get(dbState.Result.Loan.OldLoanID); // old calc LoanRepaymentScheduleCalculator oldCalc = new LoanRepaymentScheduleCalculator(oldLoan, calcTime, 0); oldCalc.GetState(); m_oLog.Debug("++++++++++++++++++++++++++++++old loan: {0}", oldLoan); m_oLog.Debug("NextEarlyPayment={0}", oldCalc.NextEarlyPayment()); }
public void loan_34() { var calculator = new LoanScheduleCalculator() { Interest = 0.06M, Term = 3 }; calculator.Calculate(400, _loan, Parse("2012-09-12 15:05:27.000")); _loan.Status = LoanStatus.Live; Console.WriteLine(_loan); MakePayment(158.0m, Parse("2012-10-12 10:50:44.000")); MakePayment(146.0m, Parse("2012-11-07 12:23:19.000")); MakePayment(136.0m, Parse("2012-11-21 16:33:08.000")); MakePayment(0.13m, Parse("2013-01-22 20:00:11.000")); var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2013-01-23 20:00:11.000"), 0); var state = payEarlyCalc.GetState(); Assert.That(state.AmountDue, Is.EqualTo(1.08m)); //Assert.That(state.AmountDue, Is.EqualTo(0.04m)); //Assert.That(_loan.Status, Is.EqualTo(LoanStatus.PaidOff)); //Assert.That(_loan.Schedule.All(s => s.Status == LoanScheduleStatus.PaidEarly), Is.True); }
public void TestLoanInterestRateBetweenDates() { LoanRepository loanRep = ObjectFactory.GetInstance<LoanRepository>(); Loan loan = loanRep.Get(5211); DateTime start = new DateTime(2015, 07, 08); DateTime end = new DateTime(2015, 10, 21); Console.WriteLine(start); Console.WriteLine(end); var calc = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); calc.GetState(); //this.m_oLog.Debug("{0}",loan); decimal I = 0m; decimal P = 57024.55m; TimeSpan ts = end.Date.Subtract(start.Date); Console.WriteLine(ts); int dcounter = 1; while (dcounter < ts.Days) { DateTime s = start.Date.AddDays(dcounter); DateTime e = s.Date.AddDays(1); Console.WriteLine("{0}, {1}", s, e); decimal r = calc.GetInterestRate(s, e); dcounter++; Console.WriteLine("{0}, {1}", dcounter, r); I += P * r; } Console.WriteLine(I); }
public void loan_of_600_payment_first_day_totatl_and_installment() { var loan = new Loan() { }; var date = new DateTime(2012, 12, 18); _calculator.Calculate(600, loan, date); var c = new LoanRepaymentScheduleCalculator(loan, date, 0); Console.WriteLine(loan); var next = c.NextEarlyPayment(); Console.WriteLine(loan); var totalEarlyPayment = c.TotalEarlyPayment(); Console.WriteLine(loan); Assert.That(next, Is.EqualTo(200m)); Assert.That(totalEarlyPayment, Is.EqualTo(600m)); Assert.That(loan.Schedule.All(i => i.Interest > 0), Is.True); }
private decimal TotalEarlyPayment(Loan loan, DateTime dateTime) { var c = new LoanRepaymentScheduleCalculator(loan, dateTime, 0); var totalEarlyPayment = c.TotalEarlyPayment(); return(totalEarlyPayment); }
public void fees_are_added_to_payments() { var loanAmount = 10000; var loan1 = new Loan(); _calculator.Calculate(loanAmount, loan1, Parse("2013-02-28 14:27:14.000")); loan1.Status = LoanStatus.Live; var charge = new LoanCharge() { Loan = loan1, Amount = 20, Date = Parse("2013-04-10 01:11:12.000") }; loan1.Charges.Add(charge); var now = Parse("2013-02-28 16:40:13.000"); var c1 = new LoanRepaymentScheduleCalculator(loan1, now, 0); var lm1 = LoanModel.FromLoan(loan1, c1, c1); Console.WriteLine(loan1); Assert.That(lm1.TotalEarlyPayment, Is.EqualTo(loanAmount)); }
public void paying_loan_early__without_fees() { var loanAmount = 10000; var loan1 = new Loan(); _calculator.Calculate(loanAmount, loan1, Parse("2013-02-28 14:27:14.000")); loan1.Status = LoanStatus.Live; var charge = new LoanCharge() { Loan = loan1, Amount = 20, Date = Parse("2013-04-10 01:11:12.000") }; loan1.Charges.Add(charge); var now = Parse("2013-02-28 16:40:13.000"); var c1 = new LoanRepaymentScheduleCalculator(loan1, now, 0); _facade.PayLoan(loan1, "", 10000, "ip", now); c1.RecalculateSchedule(); Console.WriteLine(loan1); Assert.That(loan1.Status, Is.EqualTo(LoanStatus.PaidOff)); Assert.That(charge.State, Is.EqualTo("Expired")); }
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 JsonResult Loan(int id) { var loan = this._loans.Get(id); var calc = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); calc.GetState(); try { long nlLoanId = this.serviceClient.Instance.GetLoanByOldID(id, loan.Customer.Id, this._context.UserId).Value; if (nlLoanId > 0) { var nlModel = this.serviceClient.Instance.GetLoanState(loan.Customer.Id, nlLoanId, DateTime.UtcNow, this._context.UserId, true).Value; Log.InfoFormat("<<< NL_Compare: nlModel : {0} loan: {1} >>>", nlModel, loan); } // ReSharper disable once CatchAllClause } catch (Exception ex) { Log.InfoFormat("<<< NL_Compare Fail at: {0}, err: {1}", Environment.StackTrace, ex.Message); } var model = this._loanModelBuilder.BuildModel(loan); RescheduleSetmodel(id, model); return(Json(model, JsonRequestBehavior.AllowGet)); }
public JsonResult GetRolloverInfo(int loanId, bool isEdit) { var loan = this.loanRepository.Get(loanId); var rollover = this.rolloverRepository.GetByLoanId(loanId).FirstOrDefault(x => x.Status == RolloverStatus.New); var payEarlyCalc = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); var state = payEarlyCalc.GetState(); var rolloverCharge = CurrentValues.Instance.RolloverCharge; var model = new { rolloverAmount = state.Fees + state.Interest + (!isEdit ? rolloverCharge : 0), interest = state.Interest, lateCharge = state.Fees - (isEdit && state.Fees != 0 ? rolloverCharge : 0), mounthAmount = rollover != null ? rollover.MounthCount : 1 }; try { long nlLoanId = this.serviceClient.Instance.GetLoanByOldID(loan.Id, loan.Customer.Id, this.context.UserId).Value; if (nlLoanId > 0) { var nlModel = this.serviceClient.Instance.GetLoanState(loan.Customer.Id, nlLoanId, DateTime.UtcNow, this.context.UserId, true).Value; Log.InfoFormat("<<< NL_Compare: {0}\n===============loan: {1} >>>", nlModel, loan); } // ReSharper disable once CatchAllClause } catch (Exception ex) { Log.InfoFormat("<<< NL_Compare fail at: {0}, err: {1}", Environment.StackTrace, ex.Message); } return(Json(model, JsonRequestBehavior.AllowGet)); }
private bool CheckValidateLoanState(LoanRepaymentScheduleCalculator calc) { try { calc.GetState(); // ReSharper disable once CatchAllClause } catch (Exception e) { this.Result.Error = e.Message; Log.Alert("LoanRepaymentScheduleCalculator STATE EXCEPTION: {0}", e); return(false); } // additional validating - via "edit loan" GUI model ChangeLoanDetailsModelBuilder changeLoanModelBuilder = new ChangeLoanDetailsModelBuilder(); EditLoanDetailsModel model = changeLoanModelBuilder.BuildModel(this.tLoan); model.Validate(); if (model.HasErrors) { this.Result.Error = string.Join("<br/>", model.Errors.ToArray()); Log.Alert(this.Result.Error); return(false); } return(true); }
public void OldCalc() { LoanRepository loanRep = ObjectFactory.GetInstance<LoanRepository>(); Loan loan = loanRep.Get(5); var calc = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); calc.GetState(); Console.WriteLine(loan.ToString()); Console.WriteLine(); Console.WriteLine(calc.ToString()); m_oLog.Debug("---------------------------------------: \n {0}", loan); }
public JsonResult Get(int id) { var customer = _context.Customer; var loan = customer.Loans.SingleOrDefault(l => l.Id == id); ILoanRepaymentScheduleCalculator calculator = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); var loanModel = LoanModel.FromLoan(loan, calculator); return(Json(loanModel, JsonRequestBehavior.AllowGet)); }
public void delinquency_for_almost_paid_installment3() { CreateLoan(Parse("2013-07-25 00:00:00.000"), 1000); MakePayment(235.0m, Parse("2013-08-25 00:00:00.000")); var p = new LoanRepaymentScheduleCalculator(_loan, Parse("2013-08-30 00:00:00.000"), 0).NextEarlyPayment(); Console.Write(_loan); Assert.That(_loan.MaxDelinquencyDays, Is.EqualTo(5)); Assert.That(_loan.Customer.CreditResult, Is.EqualTo(CreditResultStatus.Late)); }
public void loan_85() { var calculator = new LoanScheduleCalculator() { Interest = 0.05M, Term = 3 }; calculator.Calculate(2000, _loan, Parse("2012-10-25 12:56:27.000")); _loan.Status = LoanStatus.Live; _loan.Charges.Add(new LoanCharge() { Amount = 20m, Date = Parse("2013-02-01 00:16:32.000") }); _loan.Charges.Add(new LoanCharge() { Amount = 45m, Date = Parse("2013-02-08 00:16:30.000") }); Console.WriteLine(_loan); MakePayment(768.0m, Parse("2012-11-25 09:05:32.000")); MakePayment(50.00m, Parse("2013-01-01 12:11:16.000")); MakePayment(50.00m, Parse("2013-01-02 13:33:06.000")); MakePayment(50.00m, Parse("2013-01-03 14:13:29.000")); MakePayment(50.00m, Parse("2013-01-04 11:26:40.000")); MakePayment(50.00m, Parse("2013-01-14 09:53:03.000")); MakePayment(50.00m, Parse("2013-01-24 16:55:00.000")); MakePayment(51.00m, Parse("2013-01-27 11:29:31.000")); MakePayment(50.00m, Parse("2013-01-28 09:46:23.000")); MakePayment(52.00m, Parse("2013-01-29 09:55:05.000")); MakePayment(60.00m, Parse("2013-01-30 09:15:14.000")); MakePayment(56.00m, Parse("2013-01-31 09:35:16.000")); MakePayment(57.00m, Parse("2013-02-01 08:00:55.000")); MakePayment(50.00m, Parse("2013-02-04 08:42:51.000")); MakePayment(36.94m, Parse("2013-03-02 00:00:00.000")); MakePayment(25.00m, Parse("2013-03-02 00:00:00.000")); MakePayment(50.00m, Parse("2013-03-02 00:00:00.000")); MakePayment(50.00m, Parse("2013-03-02 00:00:00.000")); MakePayment(20.00m, Parse("2013-03-02 00:00:00.000")); MakePayment(100.00m, Parse("2013-03-04 00:00:00.000")); MakePayment(100.00m, Parse("2013-03-06 00:00:00.000")); MakePayment(192.05m, Parse("2013-03-17 00:00:00.000")); var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2013-03-19 20:00:11.000"), 0); var state = payEarlyCalc.GetState(); //Assert.That(state.AmountDue, Is.EqualTo(0m)); //Assert.That(_loan.Balance, Is.EqualTo(0)); //Assert.That(_loan.Principal, Is.EqualTo(0)); }
public void all_loan_late() { var date = new DateTime(2012, 9, 25); var loan1 = new Loan(); _calculator.Calculate(1000, loan1, date); _customer.Loans.Add(loan1); var payEarlyCalc = new LoanRepaymentScheduleCalculator(loan1, new DateTime(2012, 12, 26), 0); var state = payEarlyCalc.GetState(); Console.Write(state.AmountDue); }
private decimal MakeEarlyPayment(Loan loan, DateTime date, int amount) { Console.WriteLine("Making payment - Date: {0}, Amount: {1}", date.ToString("dd MM yyyy"), amount); loan.Transactions.Add(new PaypointTransaction() { Amount = amount, PostDate = date, Status = LoanTransactionStatus.Done }); var c = new LoanRepaymentScheduleCalculator(loan, date, 0); var s = c.RecalculateSchedule(); Console.WriteLine(loan.ToString()); return(s); }
public void TestLoanInterestRate() { LoanRepository loanRep = ObjectFactory.GetInstance<LoanRepository>(); Loan loan = loanRep.Get(5211); var firstSchedule = loan.Schedule.OrderBy(s => s.Date).FirstOrDefault(); var lastSchedule = loan.Schedule.OrderBy(s => s.Date).LastOrDefault(); Console.WriteLine(firstSchedule); Console.WriteLine(lastSchedule); var calc = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); decimal r = 5; if (firstSchedule != null && lastSchedule != null) //r = calc.GetInterestRate(firstSchedule.Date, lastSchedule.Date); r = calc.GetInterestRate(firstSchedule.Date, new DateTime(2099, 01, 01)); m_oLog.Debug("{0}", loan); Console.WriteLine(r); }
public void TestLoanOldCalculator() { int loanID = 5211; LoanRepository loanRep = ObjectFactory.GetInstance<LoanRepository>(); Loan loan = loanRep.Get(2); /*ChangeLoanDetailsModelBuilder loanModelBuilder = new ChangeLoanDetailsModelBuilder(); EditLoanDetailsModel model = new EditLoanDetailsModel(); var loaan = ObjectFactory.GetInstance<LoanRepository>().Get(loanID); // 1. build model from DB loan model = loanModelBuilder.BuildModel(loaan); //m_oLog.Debug("===========================" + model.InterestFreeze.Count); // 2. create DB loan from the model Loan loan1 = loanModelBuilder.CreateLoan(model); //m_oLog.Debug("----------------------" + loan1.InterestFreeze.Count);*/ var calc = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); calc.GetState(); m_oLog.Debug("---------------------------------------Loan recalculated: \n {0}", loan); }
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 JsonResult RemoveFreezeInterval(int id, int intervalid) { Loan loan = this._loans.Get(id); LoanInterestFreeze lif = loan.InterestFreeze.FirstOrDefault(v => v.Id == intervalid); var loan1 = loan; new Transactional(() => { if (lif != null) { lif.DeactivationDate = DateTime.UtcNow; } this._loans.SaveOrUpdate(loan1); }).Execute(); DeactivateLoanInterestFreeze(lif); Log.DebugFormat("remove freeze interest for customer {0}", loan.Customer.Id); loan = this._loans.Get(id); var calc = new LoanRepaymentScheduleCalculator(loan, DateTime.UtcNow, CurrentValues.Instance.AmountToChargeFrom); calc.GetState(); try { long nlLoanId = this.serviceClient.Instance.GetLoanByOldID(id, loan.Customer.Id, this._context.UserId).Value; if (nlLoanId > 0) { var nlModel = this.serviceClient.Instance.GetLoanState(loan.Customer.Id, nlLoanId, DateTime.UtcNow, this._context.UserId, true).Value; Log.InfoFormat("<<< NL_Compare: {0}\n===============loan: {1} >>>", nlModel, loan); } // ReSharper disable once CatchAllClause } catch (Exception ex) { Log.InfoFormat("<<< NL_Compare fail at: {0}, err: {1}", Environment.StackTrace, ex.Message); } EditLoanDetailsModel model = this._loanModelBuilder.BuildModel(loan); model.Options = this.loanOptionsRepository.GetByLoanId(id) ?? LoanOptions.GetDefault(id); RescheduleSetmodel(id, model); return(Json(model)); } // RemoveFreezeInterval
//https://trello.com/c/NHwkJCpE public void trello_card_245_one_pound_mistake() { var calculator = new LoanScheduleCalculator() { Interest = 0.06M, Term = 3 }; calculator.Calculate(1000, _loan, Parse("2012-12-09 00:00:00.000")); _loan.Status = LoanStatus.Live; Console.WriteLine(_loan); var payEarlyCalc = new LoanRepaymentScheduleCalculator(_loan, Parse("2013-01-09 00:00:00.000"), 0); var earlyPayment = payEarlyCalc.NextEarlyPayment(); Assert.That(earlyPayment, Is.EqualTo(394)); }
public void next_early_payment_for_halfway_loan() { var now = new DateTime(2013, 01, 01); var type = new HalfWayLoanType(); var loan = new Loan() { LoanType = type, LoanAmount = 1000, Date = now }; var schedule = _calculator.Calculate(1000m, loan, now); Console.WriteLine(loan); var pc = new LoanRepaymentScheduleCalculator(loan, now, 0); var ep = pc.NextEarlyPayment(); Assert.That(ep, Is.EqualTo(500)); }