protected virtual IEnumerable <ApplicationEvent> WhenWithdrawalCompleted(Guid appOperationId, Transfer transfer) { var transactionName = TransactionReferenceBook.ForOperation(transfer); var depositTransaction = Deposit(transfer.To, transfer, transactionName.Code, transactionName.Description); transfer.SetDepositTransaction(depositTransaction); var transactionModel = depositTransaction.ToModel <Transaction, TransactionModel>(); TransferRepository.Update(transfer); return(new List <ApplicationEvent>() { new TransactionProgressEvent(appOperationId, transactionModel, transfer.Id) }); }
public CardTransfer Create(UserCard from, UserCard to, decimal amount) { Argument.NotNull(from, "from"); Argument.NotNull(to, "to"); //TODO: probably better move this code to some another class var operationCategoryCode = from.Owner.Id == to.Owner.Id ? PersonalTransferOperation : InterbankTransferOperation; var operationCategory = _operationCategories.Find(operationCategoryCode); if (operationCategory == null) { throw new InvalidOperationException("Can't find operation category."); } var transfer = new CardTransfer(operationCategory, from, to, amount); var transactionName = _transactionReferenceBook.ForOperation(transfer); transfer.Withdrawal = transfer.From.Withdraw(from, transactionName.Code, transactionName.Description, _settings.Location, transfer.MoneyAmount, _moneyConverter); return(transfer); }