private void CloseAndTransfer(ISavingsContract from, ISavingsContract to, DateTime date, User pUser, OCurrency amount, bool pIsDesactivateFees, Teller teller) { from.Transfer(to, amount, 0, date, "Closing transfer"); from.Close(date, pUser, "Close savings contract", pIsDesactivateFees, teller, true); }
public List<SavingEvent> CloseAndTransfer(ISavingsContract from, ISavingsContract to, DateTime date, User pUser, OCurrency amount, bool pIsDesactivateFees, Teller teller) { if (to.Status == OSavingsStatus.Closed) throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.CreditTransferAccountInvalid); if (from.Id == to.Id) throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.SavingsContractForTransferIdenticals); if (from.Product.Currency.Id != to.Product.Currency.Id) throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.SavingsContractForTransferNotSameCurrncy); OCurrency balance = SimulateCloseAccount(from, date, pUser, pIsDesactivateFees, teller).GetBalance(date); if (from is SavingBookContract && !pIsDesactivateFees) balance -= ((SavingBookContract)from).CloseFees; if (balance != amount) throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.TransferAmountIsInvalid); List<SavingEvent> events = new List<SavingEvent>(); events.AddRange(from.Transfer(to, amount, 0, date, "Closing transfer")); events.AddRange(from.Close(date, pUser, "Close savings contract", pIsDesactivateFees, teller, false)); foreach (SavingEvent e in events) _ePS.FireEvent(e); if (from.ClosedDate != null) _savingManager.UpdateStatus(from.Id, from.Status, from.ClosedDate.Value); return events; }
public List<SavingEvent> CloseAndWithdraw(ISavingsContract saving, DateTime date, User user, OCurrency withdrawAmount, bool isDesactivateFees, Teller teller) { OCurrency balance = SimulateCloseAccount(saving, date, user, isDesactivateFees, teller).GetBalance(date); if (balance != withdrawAmount) { throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.WithdrawAmountIsInvalid); } List<SavingEvent> events = saving.Withdraw(withdrawAmount, date, "Withdraw savings", user, true, Teller.CurrentTeller); events.AddRange(saving.Close(date, user, "Close savings contract", isDesactivateFees, teller, false)); using (SqlConnection conn = _savingManager.GetConnection()) using (SqlTransaction sqlTransaction = conn.BeginTransaction()) { try { foreach (SavingEvent savingEvent in events) _ePS.FireEvent(savingEvent, saving, sqlTransaction); if (saving.ClosedDate != null) _savingManager.UpdateStatus(saving.Id, saving.Status, saving.ClosedDate.Value); sqlTransaction.Commit(); return events; } catch (Exception) { sqlTransaction.Rollback(); throw; } } }