private void OverdueEventOrigination(OverdueEvent overdueEvent, Loan loanContract, SqlTransaction sqlTransac)
 {
     _eventManagement.AddLoanEvent(overdueEvent, loanContract.Id, sqlTransac);
 }
Example #2
0
        public Loan AddOverdueEvent(Loan loan, OverdueEvent overdueEvent)
        {
            using (SqlConnection conn = _savingEventManager.GetConnection())
            using (SqlTransaction sqlTransaction = conn.BeginTransaction())
                try
                {
                    _ePs.FireEvent(overdueEvent, loan, sqlTransaction);
                    sqlTransaction.Commit();

                    return loan;
                }
                catch (Exception ex)
                {
                    sqlTransaction.Rollback();
                    throw ex;
                }
        }
Example #3
0
        public OverdueEvent AddRecheduleTransformationEvent(DateTime dateTime)
        {
            OverdueEvent ovEvent = null;
            bool toAddEvent = true;
            foreach (OverdueEvent dueEvent in Events.GetOverdueEvents())
            {
                if (dueEvent.Code == "GLRL" || dueEvent.Code == "BLRL" || dueEvent.Code == "LLRL")
                {
                    toAddEvent = false;
                }
            }

            if (toAddEvent)
            {
                foreach (Event reschEvent in Events)
                {
                    if (reschEvent is RescheduleLoanEvent)
                    {
                        ovEvent = new OverdueEvent
                                      {
                                          OLB = CalculateActualOlb(),
                                          OverdueDays = CalculatePastDueSinceLastRepayment(reschEvent.Date),
                                          OverduePrincipal = GetOverduePrincipal(reschEvent.Date),
                                          User = User.CurrentUser,
                                          Date = dateTime,
                                          Description = Code,
                                          ContracId = Id
                                      };

                        if (ovEvent.OverdueDays > 0)
                        {
                            ovEvent.Code = ovEvent.OverdueDays > _generalSettings.BadLoanDays ? "BLRL" : "LLRL";
                        }
                        else
                        {
                            ovEvent.Code = "GLRL";
                        }
                    }
                }
            }

            if(ovEvent != null)
                Events.Add(ovEvent);

            return ovEvent;
        }
Example #4
0
        public OverdueEvent GetOverdueEvent(DateTime dateTime)
        {
            int badLoanDays = _generalSettings.BadLoanDays;
            OLoanLateStatus loanStatus = OLoanLateStatus.Good;
            int lateDays = CalculatePastDueSinceLastRepayment(dateTime);
            OverdueEvent oEvent = new OverdueEvent { Id = 0, Code = "", ContracId = Id};

            if (lateDays > badLoanDays)
            {
                loanStatus = OLoanLateStatus.Bad;
                oEvent.Code = "GLBL";
            }
            else if (lateDays > 0)
            {
                loanStatus = OLoanLateStatus.Late;
                oEvent.Code = "GLLL";
            }

            Events.SortEventsByDate();
            List<OverdueEvent> overdueEvents = Events.GetOverdueEvents();

            //Get last overdue event if it's not exist it must be empty
            OverdueEvent lastEvent = new OverdueEvent {Code = ""};
            foreach (OverdueEvent dueEvent in overdueEvents)
            {
                if ((dueEvent.Date > lastEvent.Date) &&
                    (dueEvent.Code != "GLRL" && dueEvent.Code != "LLRL" && dueEvent.Code != "BLRL"))
                {
                    lastEvent = dueEvent;
                    oEvent = dueEvent;
                }
            }

            if (oEvent.Code != "")
            {
                OverdueEvent overdueEvent = new OverdueEvent
                {
                    OLB = CalculateActualOlb(),
                    OverdueDays = lateDays,
                    OverduePrincipal = GetOverduePrincipal(dateTime),
                    User = User.CurrentUser,
                    Date = dateTime,
                    Description = Code,
                    ContracId = Id
                };

                overdueEvent.Code = GetLateLoanEventCode(loanStatus, oEvent.Code);
                //do not double same event and same situation
                if (overdueEvent.Code != lastEvent.Code)
                {
                    //listEvents.Add(overdueEvent);
                    Events.Add(overdueEvent);
                    return overdueEvent;
                }
            }
            return null;
        }
Example #5
0
        public void AddLoanEvent(OverdueEvent overdueEvent, int contractId, SqlTransaction sqlTransac)
        {
            overdueEvent.Id = AddLoanEventHead(overdueEvent, contractId, sqlTransac);

            const string q = @"INSERT INTO [OverdueEvents](
                                       [id],
                                       [olb],
                                       [overdue_days],
                                       [overdue_principal])
                                     VALUES(@id, @olb, @overdue_days, @overdue_principal)";

            using (OpenCbsCommand c = new OpenCbsCommand(q, sqlTransac.Connection, sqlTransac))
            {
                c.AddParam("@id", overdueEvent.Id);
                c.AddParam("@olb", overdueEvent.OLB);
                c.AddParam("@overdue_days", overdueEvent.OverdueDays);
                c.AddParam("@overdue_principal", overdueEvent.OverduePrincipal);
                c.ExecuteNonQuery();
            }
        }
Example #6
0
        private static OCurrency GetValue(OverdueEvent eventItem, ContractAccountingRule rule)
        {
            OCurrency amount = 0;

            if (rule.EventAttribute.Name.ToLower() == "olb")
            {
                amount = eventItem.OLB;
            }

            if (rule.EventAttribute.Name.ToLower() == "overdue_principal")
            {
                amount = eventItem.OverduePrincipal;
            }
            return amount;
        }