public List<SavingEvent> LoanDisbursement(ISavingsContract savings, Loan loan, DateTime date, string description, User user, bool disableFees) { using(SqlConnection conn = _savingManager.GetConnection()) using (SqlTransaction sqlTransaction = conn.BeginTransaction()) { try { bool isPending = false; OSavingsMethods savingsMethod = OSavingsMethods.Cash; int? pendingEventId = null; Teller teller = Teller.CurrentTeller; if (date.Hour == 0 && date.Minute == 0 && date.Second == 0) date = new DateTime(date.Year, date.Month, date.Day, TimeProvider.Now.Hour, TimeProvider.Now.Minute, TimeProvider.Now.Second); ISavingsContract savingSimulation = (ISavingsContract) savings.Clone(); savingSimulation.LoanDisbursement(loan, date, description, user, disableFees, isPending, savingsMethod, pendingEventId, teller); List<SavingEvent> events = savings.LoanDisbursement(loan, date, description, user, false, isPending, savingsMethod, pendingEventId, teller); foreach (SavingEvent savingEvent in events) { _ePS.FireEvent(savingEvent, savings, sqlTransaction); } // Change overdraft state if (savings is SavingBookContract) { if (savings.GetBalance() > 0) { ((SavingBookContract) savings).InOverdraft = false; UpdateOverdraftStatus(savings.Id, false); } } sqlTransaction.Commit(); return events; } catch (Exception) { sqlTransaction.Rollback(); throw; } } }