private SavingCreditOperationEvent SpecialOperationCredit(ISavingsContract pSaving, DateTime pDate, OCurrency creditAmount, string pDescription, User pUser, OSavingsMethods savingsMethod) { using (SqlConnection conn = _savingManager.GetConnection()) using (SqlTransaction sqlTransaction = conn.BeginTransaction()) { try { //// Create a fake Saving object ISavingsContract savingSimulation = (ISavingsContract) pSaving.Clone(); // Do deposit to the fake Saving object savingSimulation.SpecialOperationCredit(creditAmount, pDate, pDescription, pUser); // Check balance simulation if (!IsSavingBalanceCorrect(savingSimulation)) throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.BalanceIsInvalid); SavingCreditOperationEvent events = pSaving.SpecialOperationCredit(creditAmount, pDate, pDescription, pUser); _ePS.FireEvent(events, pSaving, sqlTransaction); sqlTransaction.Commit(); return events; } catch (Exception) { sqlTransaction.Rollback(); throw; } } }