Example #1
0
        public void DispatchTransaction(BinaryReader reader, IRemoteNode remoteNode)
        {
            TransactionType       type      = (TransactionType)reader.ReadByte();
            ITransactionProcessor processor = _transactionProcessors[type];

            processor.ProcessTransaction(reader, remoteNode);
        }
 public IEnumerable <string> ProcessTransactions(IEnumerable <string> inputs)
 {
     foreach (var input in inputs)
     {
         var transaction = ParseTransaction(input);
         var outputCode  = _transactionProcessor.ProcessTransaction(transaction);
         var outputLine  = $"{input} {outputCode}";
         yield return(outputLine);
     }
 }
Example #3
0
        /// <summary>
        /// Button 'Make Transaction' click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMakeTransaction_Click(object sender, EventArgs e)
        {
            ITransactionAccount transactionAccount = createTransactionAccount();
            //IDepositAccount depositAccount = createDepositAccount();
            ILoanAccount loanAccount = createLoanAccount();

            ITransactionProcessor transactionProccesor = TransactionProcessor.GetTransactionProcessor();

            CurrencyAmount currencyAmount = new CurrencyAmount();

            currencyAmount.Amount   = Convert.ToInt32(txtTransactionAmoun.Text);
            currencyAmount.Currency = txtTransactionCurrency.Text;

            //ovde dodavam event handler-i za event-ite
            transactionAccount.OnBalanceChanged += new BalanceChanged(OnBalanceChangeEventHandler);
            loanAccount.OnBalanceChanged        += new BalanceChanged(OnBalanceChangeEventHandler);

            bool              errorOccurred = false;
            string            errorMsg      = "";
            TransactionStatus status        = TransactionStatus.Failed;

            try
            {
                status = transactionProccesor.ProcessTransaction(TransactionType.Credit, currencyAmount, transactionAccount, loanAccount);
            }
            catch (ApplicationException ae)
            {
                errorOccurred = true;
                errorMsg      = ae.Message;
            }
            finally
            {
                if (errorOccurred)
                {
                    MessageBox.Show(errorMsg);
                }
            }


            if (status.Equals(TransactionStatus.Completed))
            {
                lblTransactionStatus.Text = "Transaction Completed";
            }
            else
            {
                lblTransactionStatus.Text = "Transaction Failed";
            }

            //populateDepositAccount(depositAccount);
            //populateLoanAccount(loanAccount);
            //populateTransactionAccount(transactionAccount);
            //lblNumberTransactions.Text ="Number of transactions: " + transactionProccesor.TransactionCount;
            DisplayLastTransactionDetails();
        }
Example #4
0
        public void ProcessTransactions_ShouldProcessPastDuePendingTransactionAndUpdateBalance()
        {
            // create new cancelled transaction
            var pastDuePendingTransaction = new CashAccountTransaction
            {
                Amount = -100,
                FinalizationDateTime = DateTime.Now.AddDays(-2),
                StatusId             = (int)TransactionStatusType.Pending
            };

            // create account with old transaction
            var account = new CashAccount {
                Balance = 500, Transactions = new Collection <CashAccountTransaction> {
                    pastDuePendingTransaction
                }
            };

            // return account when retrieving from the repository
            A.CallTo(() => _repository.GetAccountWithTransactions(A <int> .Ignored)).Returns(account);

            // process transactions for the account
            _accountManager.ProcessTransactions();

            // transactions should be retrieved from the repository
            A.CallTo(() => _repository.GetAccountWithTransactions(A <int> .Ignored)).MustHaveHappened();

            // account should have been updated
            var newAccount = _accountManager.GetFieldValue <CashAccount>("_account");

            newAccount.Should().Be(account);

            // ensure the transaction was processed
            A.CallTo(() => _transactionProcessor.ProcessTransaction(pastDuePendingTransaction)).MustHaveHappened();

            // check that transactions are as expected
            newAccount.Transactions.Should().Contain(t => t == pastDuePendingTransaction);

            // check that balance was updated correctly
            newAccount.Balance.Should().Be(400);
        }
Example #5
0
        /// <summary>
        /// Updates the balance for the account from pending transactions
        /// </summary>
        /// <param name="transaction"></param>
        private decimal UpdateBalanceFromPendingTransaction(CashAccountTransaction transaction)
        {
            try
            {
                // process the transaction
                _transactionProcessor.ProcessTransaction(transaction);

                // set the status on the transaction to completed
                transaction.StatusId = (int)TransactionStatusType.Completed;

                // return the amount for the transaction
                return(transaction.Amount);
            }
            catch
            {
                // mark as failed
                transaction.StatusId = (int)TransactionStatusType.Failed;

                return(0);
            }
        }