private void LoanRepaymentOrigination(RepaymentEvent repaymentEvent, Loan loanContract, SqlTransaction sqlTransac) { int parentId = -1; foreach (RepaymentEvent loanEvent in loanContract.Events.GetLoanRepaymentEvents()) { if (loanEvent.IsFired) { continue; } loanEvent.User = repaymentEvent.User; loanEvent.TellerId = repaymentEvent.TellerId; loanEvent.IsFired = true; if (parentId > 0) { loanEvent.ParentId = parentId; } loanEvent.Id = _eventManagement.AddLoanEventHead(loanEvent, loanContract.Id, sqlTransac); if (parentId < 0) { parentId = loanEvent.Id; repaymentEvent.Id = parentId; } _eventManagement.AddLoanEvent(loanEvent, loanContract.Id, sqlTransac); } }
public void TestRepaymentEventFees() { RepaymentEvent rPE = new RepaymentEvent(); rPE.Commissions = 20.53m; Assert.AreEqual(20.53m, rPE.Fees.Value); }
public void Test_AccruedInterestProcessingCeaseDays() { ApplicationSettings generalSettings = ApplicationSettings.GetInstance(""); generalSettings.DeleteAllParameters(); generalSettings.AddParameter(OGeneralSettings.DONOTSKIPWEEKENDSININSTALLMENTSDATE, false); generalSettings.AddParameter(OGeneralSettings.INCREMENTALDURINGDAYOFF, true); generalSettings.AddParameter(OGeneralSettings.PAYFIRSTINSTALLMENTREALVALUE, true); generalSettings.AddParameter(OGeneralSettings.CALCULATIONLATEFEESDURINGPUBLICHOLIDAYS, true); generalSettings.AddParameter(OGeneralSettings.BAD_LOAN_DAYS, 50); generalSettings.AddParameter(OGeneralSettings.CEASE_LAIE_DAYS, 10); generalSettings.AddParameter(OGeneralSettings.USE_DAILY_ACCRUAL_OF_PENALTY, false); Loan myContract = _SetContract(6000, 0.0833m, OLoanTypes.Flat, new NonRepaymentPenalties(0, 0, 0, 0), false, 0, new DateTime(2010, 10, 15), 3); OpenCBS.CoreDomain.Contracts.Loans.LoanRepayment.Repayment.RepayLateInstallments.CalculateInstallments rLi = _SetRepaymentOptions(myContract, false); Assert.AreEqual(new DateTime(2010, 11, 15), myContract.GetInstallment(0).ExpectedDate); Assert.AreEqual(new DateTime(2010, 12, 15), myContract.GetInstallment(1).ExpectedDate); RepaymentEvent rpeEvent = myContract.Repay(1, new DateTime(2010, 11, 15), 2500, false, true); Assert.AreEqual(rpeEvent.Interests, 500m); rpeEvent = myContract.Repay(2, new DateTime(2010, 12, 10), 300, false, true); Assert.AreEqual(rpeEvent.Interests, 300); AccruedInterestEvent e = myContract.GetAccruedInterestEvent(new DateTime(2010, 12, 31)); Assert.AreEqual(e.Code, "LIAE"); Assert.AreEqual(e.AccruedInterest, 1151); myContract.Events.Add(e); }
public void TestRepaymentEventInstallmentNumber() { RepaymentEvent rPE = new RepaymentEvent(); rPE.InstallmentNumber = 3; Assert.AreEqual(3, rPE.InstallmentNumber); }
public void TestRepaymentEventPrincipal() { RepaymentEvent rPE = new RepaymentEvent(); rPE.Principal = 100.43m; Assert.AreEqual(100.43m, rPE.Principal.Value); }
public void Select_Added_RepaymentEvent() { EventManager eventManager = (EventManager)container["EventManager"]; RepaymentEvent repaymentEvent = new RepaymentEvent { Id = 130, Code = "RGLE", User = new User {Id = 1}, Date = new DateTime(2006, 7, 21), PastDueDays = 3, Principal = 1999, Interests = 2333, Commissions = 23, InstallmentNumber = 3, PaymentMethod = new PaymentMethod(1, "Cash", "", false) }; using (SqlTransaction tran = eventManager.GetConnection().BeginTransaction()) eventManager.AddLoanEvent(repaymentEvent, 1, tran); EventStock eventStock = eventManager.SelectEvents(2); foreach (Event e in eventStock.GetEvents()) { if (e is RepaymentEvent) _AssertRepaymentEvent(e as RepaymentEvent, "RGLE", new DateTime(2006, 7, 21), 3, 1999, 2333, 23, 3); } }
public void RepayInstallments_DontCancelFees_InitialAmount_RepaymentTwicelyADay() { LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "10-days", 10, 0), LoanType = OLoanTypes.Flat, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1 } }; package.KeepExpectedInstallment = true; package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB; Loan myContract = new Loan(package, 8000, 0.03333m, 5, 0, new DateTime(2010, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.AnticipatedTotalRepaymentPenalties = 0.01; myContract.NonRepaymentPenalties = new NonRepaymentPenalties(0, 0, 0.0667, 0.01); myContract.CalculateInstallments(true); myContract.Disburse(new DateTime(2010, 1, 1), false, true); myContract.Repay(1, new DateTime(2010, 1, 8), 30, false, true); RepaymentEvent rPE = myContract.Repay(1, new DateTime(2010, 1, 11), 0, false, true); Assert.AreEqual(rPE.Penalties, 0); }
private static OCurrency GetValue(RepaymentEvent eventItem, ContractAccountingRule rule) { OCurrency amount = 0; if (rule.EventAttribute.Name.ToLower() == "principal") { amount = eventItem.Principal; } if (rule.EventAttribute.Name.ToLower() == "interests") { amount = eventItem.Interests; } if (rule.EventAttribute.Name.ToLower() == "penalties") { amount = eventItem.Penalties; } if (rule.EventAttribute.Name.ToLower() == "commissions") { amount = eventItem.Commissions; } return(amount); }
public void TestRepaymentEventInterests() { RepaymentEvent rPE = new RepaymentEvent(); rPE.Interests = 50.32m; Assert.AreEqual(50.32m, rPE.Interests.Value); }
private void DisplayEvent() { listViewEvents.Items.Clear(); ListViewItem listViewItem = new ListViewItem(_event.Date.ToShortDateString()); listViewItem.SubItems.Add(_event.Code); listViewItem.Tag = _event; if (_event is LoanDisbursmentEvent) { LoanDisbursmentEvent evt = _event as LoanDisbursmentEvent; listViewItem.SubItems.Add(evt.Amount.GetFormatedValue(true)); listViewItem.SubItems.Add("-"); listViewItem.SubItems.Add("-"); } else if (_event is RepaymentEvent) { RepaymentEvent evt = _event as RepaymentEvent; listViewItem.SubItems.Add(evt.Principal.GetFormatedValue(true)); listViewItem.SubItems.Add(evt.Interests.GetFormatedValue(true)); listViewItem.SubItems.Add(evt.Fees.GetFormatedValue(true)); } else if (_event is BadLoanRepaymentEvent) { BadLoanRepaymentEvent evt = _event as BadLoanRepaymentEvent; listViewItem.SubItems.Add(evt.Principal.GetFormatedValue(true)); listViewItem.SubItems.Add(evt.Interests.GetFormatedValue(true)); listViewItem.SubItems.Add(evt.Fees.GetFormatedValue(true)); } else if (_event is TrancheEvent) { TrancheEvent evt = _event as TrancheEvent; listViewItem.SubItems.Add(evt.Amount.GetFormatedValue(true)); listViewItem.SubItems.Add(evt.InterestRate.GetFormatedValue(true)); listViewItem.SubItems.Add("-"); } else if (_event is RegEvent || _event is WriteOffEvent || _event is LoanValidationEvent) { listViewItem.SubItems.Add("-"); listViewItem.SubItems.Add("-"); listViewItem.SubItems.Add("-"); } else if (_event is RescheduleLoanEvent) { RescheduleLoanEvent evt = _event as RescheduleLoanEvent; listViewItem.SubItems.Add(evt.Amount.GetFormatedValue(true)); listViewItem.SubItems.Add("-"); listViewItem.SubItems.Add("-"); } listViewItem.SubItems.Add(_event.Cancelable.ToString()); if (_event.Deleted) { listViewItem.BackColor = Color.FromArgb(188, 209, 199); listViewItem.ForeColor = Color.White; } listViewEvents.Items.Add(listViewItem); }
private static void _AssertRepaymentEvent(RepaymentEvent pEvent, string pCode, DateTime pDate, int pPastDueDays, OCurrency pPrincipal, OCurrency pInterest, OCurrency pFees, int pInstallmentNumber) { Assert.AreEqual(pCode, pEvent.Code); Assert.AreEqual(pDate, pEvent.Date); Assert.AreEqual(pPastDueDays, pEvent.PastDueDays); Assert.AreEqual(pPrincipal.Value, pEvent.Principal.Value); Assert.AreEqual(pInterest.Value, pEvent.Interests.Value); Assert.AreEqual(pFees.Value, pEvent.Fees.Value); Assert.AreEqual(pInstallmentNumber, pEvent.InstallmentNumber); }
public void TestEventCopy() { RepaymentEvent rE = new RepaymentEvent { InstallmentNumber = 1, Principal = 100, Interests = 230, Commissions = 4, Penalties = 0, ClientType = OClientTypes.Group }; RepaymentEvent rEFakeCopy = rE; RepaymentEvent rECopy = rE.Copy() as RepaymentEvent; rE.Principal = 3456; Assert.AreEqual(3456m, rEFakeCopy.Principal.Value); Assert.AreEqual(100m, rECopy.Principal.Value); }
public RepaymentEvent SaveRepaymentEvent(RepaymentEvent repaymentEvent, IDbTransaction tx) { var query = @" insert into dbo.ContractEvents (event_type, contract_id, event_date, user_id, is_deleted, entry_date, comment, doc1) values (@Code, @LoanId, @EventDate, @UserId, 0, getdate(), @Comment, @ReceiptNumber) select cast(scope_identity() as int) "; repaymentEvent.Id = tx.Connection.Query <int>(query, repaymentEvent, tx).First(); query = @" insert into dbo.RepaymentEvents (id, past_due_days, principal, interests, installment_number, commissions, penalties, payment_method_id, bounce_fee) values (@Id, @LateDays, @Principal, @Interest, @InstallmentNumber, 0, 0, @PaymentMethodId, 0) "; tx.Connection.Execute(query, repaymentEvent, tx); // Create a funding line event query = @" declare @code nvarchar(max) declare @funding_line_id int select @code = contract_code from dbo.Contracts where id = @LoanId select @funding_line_id = fundingLine_id from dbo.Credit where id = @LoanId declare @funding_line_code nvarchar(max) set @funding_line_code = 'RE_' + @code + '_INS_' + cast(@InstallmentNumber as nvarchar(max)) insert into dbo.FundingLineEvents (code, amount, direction, fundingline_id, deleted, creation_date, type, user_id, contract_event_id) values (@funding_line_code, @Principal, 1, @funding_line_id, 0, @EventDate, 2, @UserId, @Id) "; tx.Connection.Execute(query, new { repaymentEvent.LoanId, repaymentEvent.InstallmentNumber, repaymentEvent.Principal, repaymentEvent.EventDate, repaymentEvent.UserId, repaymentEvent.Id }, tx); return(repaymentEvent); }
public void Add_RepaymentEvent() { EventManager eventManager = (EventManager)container["EventManager"]; RepaymentEvent repaymentEvent = new RepaymentEvent { Id = 13, User = new User { Id = 1 }, Date = new DateTime(2006, 7, 21), PastDueDays = 3, Principal = 1999, Interests = 2333, Commissions = 23, InstallmentNumber = 3, PaymentMethod = new PaymentMethod(1, "Cash", "", false) }; using(SqlTransaction tran = eventManager.GetConnection().BeginTransaction()) eventManager.AddLoanEvent(repaymentEvent, 1, tran); Assert.AreNotEqual(0, repaymentEvent.Id); }
private static RepaymentEvent GetRepaymentEvent(Loan loan, Loan repaidLoan) { var firstUnpaidInstallment = loan.Schedule.Find(x => !x.Repaid); var lateDays = (TimeProvider.Today - firstUnpaidInstallment.ExpectedDate.Date).Days; lateDays = lateDays < 0 ? 0 : lateDays; var repaymentEvent = new RepaymentEvent(); repaymentEvent.LoanId = loan.Id; repaymentEvent.Code = lateDays > 0 ? "RBLE" : "RGLE"; repaymentEvent.InstallmentNumber = firstUnpaidInstallment.Number; repaymentEvent.EventDate = TimeProvider.Now; repaymentEvent.UserId = User.CurrentUser.Id; repaymentEvent.LateDays = lateDays; repaymentEvent.Principal = repaidLoan.Schedule.Sum(x => x.PaidPrincipal) - loan.Schedule.Sum(x => x.PaidPrincipal); repaymentEvent.Interest = repaidLoan.Schedule.Sum(x => x.PaidInterest) - loan.Schedule.Sum(x => x.PaidInterest); return(repaymentEvent); }
public void TestAccruedInterestProcessingNegativeCase() { Loan myContract = _SetContract(6000, 0.0833m, OLoanTypes.Flat, new NonRepaymentPenalties(0, 0, 0, 0), false, 0, new DateTime(2010, 10, 15), 3); OpenCBS.CoreDomain.Contracts.Loans.LoanRepayment.Repayment.RepayLateInstallments.CalculateInstallments rLI = _SetRepaymentOptions(myContract, false); Assert.AreEqual(new DateTime(2010, 11, 15), myContract.GetInstallment(0).ExpectedDate); Assert.AreEqual(new DateTime(2010, 12, 15), myContract.GetInstallment(1).ExpectedDate); RepaymentEvent rpeEvent = myContract.Repay(1, new DateTime(2010, 11, 15), 2500, false, true); Assert.AreEqual(rpeEvent.Interests, 500m); rpeEvent = myContract.Repay(2, new DateTime(2010, 12, 15), 2500, false, true); Assert.AreEqual(rpeEvent.Interests, 500); rpeEvent = myContract.Repay(3, new DateTime(2010, 12, 15), 300, false, true); Assert.AreEqual(rpeEvent.Interests, 300); AccruedInterestEvent e = myContract.GetAccruedInterestEvent(new DateTime(2010, 12, 31)); //Assert.AreEqual(e, null); }
public void TestRepaymentEventCodeCorrectlyGeneratedWhenGoodLoan() { RepaymentEvent rPE = new RepaymentEvent(); Assert.AreEqual("RGLE", rPE.Code); }