Example #1
0
        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);
            }
        }
Example #2
0
        public void TestRepaymentEventFees()
        {
            RepaymentEvent rPE = new RepaymentEvent();

            rPE.Commissions = 20.53m;
            Assert.AreEqual(20.53m, rPE.Fees.Value);
        }
Example #3
0
        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);
        }
Example #4
0
        public void TestRepaymentEventInstallmentNumber()
        {
            RepaymentEvent rPE = new RepaymentEvent();

            rPE.InstallmentNumber = 3;
            Assert.AreEqual(3, rPE.InstallmentNumber);
        }
Example #5
0
        public void TestRepaymentEventPrincipal()
        {
            RepaymentEvent rPE = new RepaymentEvent();

            rPE.Principal = 100.43m;
            Assert.AreEqual(100.43m, rPE.Principal.Value);
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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);
        }
Example #8
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);
        }
Example #9
0
        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);
        }
Example #11
0
 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);
 }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #16
0
        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);
        }
Example #17
0
        public void TestRepaymentEventCodeCorrectlyGeneratedWhenGoodLoan()
        {
            RepaymentEvent rPE = new RepaymentEvent();

            Assert.AreEqual("RGLE", rPE.Code);
        }