private void OverdueEventOrigination(OverdueEvent overdueEvent, Loan loanContract, SqlTransaction sqlTransac) { _eventManagement.AddLoanEvent(overdueEvent, loanContract.Id, sqlTransac); }
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; } }
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; }
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; }
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(); } }
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; }