コード例 #1
0
        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));
        }
コード例 #2
0
ファイル: RealCasesFixture.cs プロジェクト: vijayamazon/ezbob
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: RolloversFixture.cs プロジェクト: vijayamazon/ezbob
        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));
        }
コード例 #5
0
ファイル: RealCasesFixture.cs プロジェクト: vijayamazon/ezbob
        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));
        }
コード例 #6
0
		} // 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
コード例 #7
0
ファイル: RealCasesFixture.cs プロジェクト: vijayamazon/ezbob
        //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));
        }
コード例 #8
0
ファイル: TestNewLoan.cs プロジェクト: vijayamazon/ezbob
		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());
		}
コード例 #9
0
ファイル: RealCasesFixture.cs プロジェクト: vijayamazon/ezbob
        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);
        }
コード例 #10
0
ファイル: TestNewLoan.cs プロジェクト: vijayamazon/ezbob
		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);
		}
コード例 #11
0
        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);
        }
コード例 #12
0
        private decimal TotalEarlyPayment(Loan loan, DateTime dateTime)
        {
            var c = new LoanRepaymentScheduleCalculator(loan, dateTime, 0);
            var totalEarlyPayment = c.TotalEarlyPayment();

            return(totalEarlyPayment);
        }
コード例 #13
0
        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));
        }
コード例 #14
0
        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"));
        }
コード例 #15
0
ファイル: RolloversFixture.cs プロジェクト: vijayamazon/ezbob
        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));
        }
コード例 #16
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));
        }
コード例 #17
0
        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));
        }
コード例 #18
0
        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);
        }
コード例 #19
0
ファイル: TestNewLoan.cs プロジェクト: vijayamazon/ezbob
		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);
		}
コード例 #20
0
ファイル: LoanController.cs プロジェクト: vijayamazon/ezbob
        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));
        }
コード例 #21
0
        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));
        }
コード例 #22
0
ファイル: RealCasesFixture.cs プロジェクト: vijayamazon/ezbob
        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));
        }
コード例 #23
0
ファイル: PayLoanFixture.cs プロジェクト: vijayamazon/ezbob
        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);
        }
コード例 #24
0
        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);
        }
コード例 #25
0
ファイル: TestNewLoan.cs プロジェクト: vijayamazon/ezbob
		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);
		}
コード例 #26
0
ファイル: TestNewLoan.cs プロジェクト: vijayamazon/ezbob
		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);
		}
コード例 #27
0
ファイル: RolloversFixture.cs プロジェクト: vijayamazon/ezbob
        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));
        }
コード例 #28
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
コード例 #29
0
ファイル: RealCasesFixture.cs プロジェクト: vijayamazon/ezbob
        //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));
        }
コード例 #30
0
        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));
        }