public void Transfer(Guid accountNoTo, Guid accountNoFrom, decimal amount) { BankAccount bankAccountTo = _bankAccountRepository.FindBy(accountNoTo); BankAccount bankAccountFrom = _bankAccountRepository.FindBy(accountNoFrom); BankAccountHasEnoughFundsToWithdrawSpecification HasEnoughFunds = new BankAccountHasEnoughFundsToWithdrawSpecification(amount); if (HasEnoughFunds.IsSatisfiedBy(bankAccountFrom)) { bankAccountTo.Balance += amount; Transaction transDeposit = TransactionFactory.CreateDepositTransactionFrom(bankAccountTo, amount, "From Acc " + bankAccountFrom.CustomerRef + " "); bankAccountTo.Transactions.Add(transDeposit); bankAccountFrom.Balance -= amount; Transaction transWithdraw = TransactionFactory.CreateWithdrawTransactionFrom(bankAccountFrom, amount, "Transfer To Acc " + bankAccountTo.CustomerRef + " "); bankAccountFrom.Transactions.Add(transWithdraw); _bankAccountRepository.Save(bankAccountTo); _bankAccountRepository.Save(bankAccountFrom); } else { throw new InsufficientFundsException(); } }
public void Withdraw(Guid accountNo, decimal amount, string reference) { BankAccount bankAccount = _bankAccountRepository.FindBy(accountNo); BankAccountHasEnoughFundsToWithdrawSpecification HasEnoughFunds = new BankAccountHasEnoughFundsToWithdrawSpecification(amount); if (HasEnoughFunds.IsSatisfiedBy(bankAccount)) { bankAccount.Balance -= amount; Transaction transWithdraw = TransactionFactory.CreateWithdrawTransactionFrom(bankAccount, amount, reference); bankAccount.Transactions.Add(transWithdraw); _bankAccountRepository.Save(bankAccount); } }