Пример #1
0
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    try
                    {
                        // find the two account entities and add them to the Container
                        Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First();
                        Account lToAcct   = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First();

                        // update the two accounts
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);

                        // save changed entities and finish the transaction
                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        throw;
                    }
                }
        }
 public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
         {
             try
             {
                 Account lFromAcct = GetAccountFromNumber(pFromAcctNumber);
                 Account lToAcct   = GetAccountFromNumber(pToAcctNumber);
                 lFromAcct.Withdraw(pAmount);
                 lToAcct.Deposit(pAmount);
                 lContainer.Attach(lFromAcct);
                 lContainer.Attach(lToAcct);
                 lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                 lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                 lContainer.SaveChanges();
                 lScope.Complete();
             }
             catch (Exception lException)
             {
                 Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                 throw;
             }
         }
 }
Пример #3
0
 public void Transfer(Guid OrderNumber, double pAmount, int pFromAcctNumber, int pToAcctNumber, String pResultReturnAddress)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
         {
             IBankNotificationService lOutcomeService = OperationOutcomeServiceFactory.GetOperationOutcomeService(pResultReturnAddress);
             try
             {
                 Account lFromAcct = GetAccountFromNumber(pFromAcctNumber);
                 Account lToAcct   = GetAccountFromNumber(pToAcctNumber);
                 lFromAcct.Withdraw(pAmount);
                 lToAcct.Deposit(pAmount);
                 lContainer.Attach(lFromAcct);
                 lContainer.Attach(lToAcct);
                 lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                 lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                 lContainer.SaveChanges();
                 lOutcomeService.NotifyOperationOutcome(OrderNumber,
                                                        DeliveryInfoStatus.Successful, "Success");
                 Console.WriteLine("Just sent a message of successful transaction to order: " + OrderNumber.ToString());
                 lScope.Complete();
             }
             catch (Exception lException)
             {
                 Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                 lOutcomeService.NotifyOperationOutcome(OrderNumber, DeliveryInfoStatus.Failed,
                                                        "Error occured while transferring money:  " + lException.Message);
                 Console.WriteLine("Just sent message to notify VideoStore that one transfer has failed, Order Number: " + OrderNumber.ToString());
                 lScope.Complete();
                 lScope.Dispose();
             }
         }
 }
Пример #4
0
        private static void CreateDummyEntities()
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    if (lContainer.Accounts.Count() == 0)
                    {
                        Customer lVideoStore = new Customer();
                        Account  lVSAccount  = new Account()
                        {
                            AccountNumber = 123, Balance = 0
                        };
                        lVideoStore.Accounts.Add(lVSAccount);

                        Customer lCustomer    = new Customer();
                        Account  lCustAccount = new Account()
                        {
                            AccountNumber = 456, Balance = 20
                        };
                        lCustomer.Accounts.Add(lCustAccount);


                        lContainer.Customers.AddObject(lVideoStore);
                        lContainer.Customers.AddObject(lCustomer);


                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                }
        }
Пример #5
0
 private Account GetAccountFromNumber(int pToAcctNumber)
 {
     using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
     {
         return(lContainer.Accounts.Where((pAcct) => (pAcct.AccountNumber == pToAcctNumber)).FirstOrDefault());
     }
 }
Пример #6
0
        //public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber)
        public void Transfer(Message message)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    //Specify the binding to be used for the client.
                    NetMsmqBinding binding = new NetMsmqBinding(NetMsmqSecurityMode.None);

                    //Specify the address to be used for the client.
                    EndpointAddress address =
                        new EndpointAddress("net.msmq://localhost/private/PublisherMessageQueue");
                    PublisherServiceClient lClient = new PublisherServiceClient(binding, address);

                    try
                    {
                        TransferMessage transferMessage = message as TransferMessage;
                        double          pAmount         = transferMessage.Total;
                        int             pFromAcctNumber = transferMessage.FromAccountNumber;
                        int             pToAcctNumber   = transferMessage.ToAccountNumber;
                        Account         lFromAcct       = GetAccountFromNumber(pFromAcctNumber);
                        Account         lToAcct         = GetAccountFromNumber(pToAcctNumber);
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Attach(lFromAcct);
                        lContainer.Attach(lToAcct);
                        lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                        lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                        lContainer.SaveChanges();
                        Console.WriteLine("Amount: " + pAmount + " FromAccount: " + pFromAcctNumber + " ToAccount: " + pToAcctNumber);
                        // Return successful result
                        TransferMessage result = new TransferMessage()
                        {
                            Topic     = "bank",
                            OrderGuid = transferMessage.OrderGuid,
                            BTransfer = true
                        };
                        //HostServiceAndPublishMessage(result);
                        lClient.Publish(result);
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        // Return Failure result
                        TransferMessage transferMessage = message as TransferMessage;
                        TransferMessage result          = new TransferMessage()
                        {
                            Topic     = "bank",
                            OrderGuid = transferMessage.OrderGuid,
                            BTransfer = false,
                            Comment   = lException.Message
                        };
                        // HostServiceAndPublishMessage(result);
                        lClient.Publish(result);
                        lScope.Complete();
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        //throw;
                    }
                }
        }
Пример #7
0
 public double GetAccountBalance(int pAcctId)
 {
     using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
     {
         Account lAcct = (from acct in lContainer.Accounts where acct.Id == pAcctId select acct).FirstOrDefault();
         return(lAcct.Balance);
     }
 }
Пример #8
0
 public double ShowBalance(int id)
 {
     using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
     {
         Account lAcct = lContainer.Accounts.Where((account) => account.Id == id).FirstOrDefault();
         return(lAcct.Balance);
     }
 }
Пример #9
0
        private static void CreateDummyEntities()
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    if (lContainer.Accounts.Count() == 0)
                    {
                        Customer lBookStore = new Customer();
                        Account  lBSAccount = new Account()
                        {
                            AccountNumber = 123, Balance = 0
                        };
                        lBookStore.Accounts.Add(lBSAccount);

                        Customer lCustomer    = new Customer();
                        Account  lCustAccount = new Account()
                        {
                            AccountNumber = 456, Balance = 200
                        };
                        lCustomer.Accounts.Add(lCustAccount);

                        lContainer.Customers.Add(lBookStore);
                        lContainer.Customers.Add(lCustomer);

                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                }

            // testing Transfer code
            //using (TransactionScope lScope = new TransactionScope())
            //using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
            //{
            //    try
            //    {
            //        int pFromAcctNumber = 456;
            //        int pToAcctNumber = 123;
            //        int pAmount = 50;

            //        // find the two account entities and add them to the Container
            //        Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First();
            //        Account lToAcct = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First();

            //        // update the two accounts
            //        lFromAcct.Withdraw(pAmount);
            //        lToAcct.Deposit(pAmount);

            //        // save changed entities and finish the transaction
            //        lContainer.SaveChanges();
            //        lScope.Complete();
            //    }
            //    catch (Exception lException)
            //    {
            //        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
            //        throw;
            //    }
            //}
        }
Пример #10
0
 public int CreateCustomer(Customer pCustomer)
 {
     using (TransactionScope lScope = new TransactionScope(TransactionScopeOption.Required))
         using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
         {
             lContainer.Customers.AddObject(pCustomer);
             lContainer.SaveChanges();
             lScope.Complete();
         }
     return(pCustomer.Id);
 }
Пример #11
0
 public int CreateAccount(int pCustId, Account pAcct)
 {
     using (TransactionScope lScope = new TransactionScope(TransactionScopeOption.Required))
         using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
         {
             Customer lCust = (from cust in lContainer.Customers where cust.Id == pCustId select cust).FirstOrDefault();
             lCust.Accounts.Add(pAcct);
             lContainer.SaveChanges();
             lScope.Complete();
         }
     return(pAcct.Id);
 }
Пример #12
0
 private Account GetAccountFromNumber(int pToAcctNumber)
 {
     using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
     {
         Console.WriteLine("===============Get Account Numbe===============");
         Console.WriteLine("Account number gotten: " + pToAcctNumber);
         Console.WriteLine("Transfer time: " + DateTime.Now);
         Console.WriteLine("===============================================");
         Console.WriteLine(" ");
         return(lContainer.Accounts.Where((pAcct) => (pAcct.AccountNumber == pToAcctNumber)).FirstOrDefault());
     }
 }
Пример #13
0
 public void Withdraw(int pAcctId, double pAmount)
 {
     using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
     {
         LockAccount(pAcctId);
         Account lAcct = (from acct in lContainer.Accounts where acct.Id == pAcctId select acct).FirstOrDefault();
         if (lAcct != null)
         {
             lAcct.Balance -= pAmount;
             lContainer.SaveChanges();
         }
     }
 }
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, String pDescription)
        {
            bool   lOutcome = true;
            String lMessage = "TransferSuccessful";
            String lLogMessage;

            try
            {
                using (TransactionScope lScope = new TransactionScope())
                    using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                    {
                        Account lFromAcct = GetAccountFromNumber(pFromAcctNumber);
                        Account lToAcct   = GetAccountFromNumber(pToAcctNumber);
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Attach(lFromAcct);
                        lContainer.Attach(lToAcct);
                        lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                        lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                        lContainer.SaveChanges();

                        lLogMessage = "Transfer Request Succeeded - received via MSMQ - (pAmount=" + pAmount + " , pFromAcctNumber=" + pFromAcctNumber + " , pToAcctNumber=" + pToAcctNumber + " , pDescription=" + pDescription + " , lMessage= " + lMessage + " )"; //we have to fill this within transaction scope or VS goes mad

                        lScope.Complete();
                    }

                SystemWideLogging.LogServiceClient.LogEvent("Bank :: Bank.Business\\Bank.Business.Components\\TransferProvider.cs  :: public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, String pDescription)", lLogMessage);
            }
            catch (Exception lException)
            {
                SystemWideLogging.LogServiceClient.LogEvent("Bank :: Bank.Business\\Bank.Business.Components\\TransferProvider.cs  :: public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, String pDescription)", "Transfer Request Failed - received via MSMQ - (pAmount=" + pAmount + " , pFromAcctNumber=" + pFromAcctNumber + " , pToAcctNumber=" + pToAcctNumber + " , pDescription=" + pDescription + " , lMessage= " + lMessage + " )");

                Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                lMessage = lException.Message;
                lOutcome = false;
                throw;
            }
            finally
            {
                try
                {
                    TransferNotificationService.TransferNotificationServiceClient lClient = new TransferNotificationService.TransferNotificationServiceClient();
                    lClient.NotifyTransferOutcome(lOutcome, lMessage, pDescription);
                }
                catch (Exception lException)
                {
                    SystemWideLogging.LogServiceClient.LogEvent("Bank :: Bank.Business\\Bank.Business.Components\\TransferProvider.cs  :: public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, String pDescription)", "Error occured when sending Notification of Transfer Outcome to VideoStore - via MSMQ - (lException.Message=" + lException.Message + ")");
                }
            }
        }
Пример #15
0
 public void Deposit(int pAcctId, double pAmount)
 {
     using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
     {
         LockAccount(pAcctId);
         Account lAcct = (from acct in lContainer.Accounts where acct.Id == pAcctId select acct).FirstOrDefault();
         if (lAcct != null)
         {
             lAcct.Balance += pAmount;
             Logger.Log("Depositing Money");
             lContainer.SaveChanges();
         }
     }
 }
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, Guid pOrderGuid, int pCustomerId)
        {
            using (TransactionScope lScope = new TransactionScope()) {
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    try
                    {
                        // find the two account entities and add them to the Container
                        Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First();
                        Account lToAcct   = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First();

                        // update the two accounts
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Accounts.Attach(lFromAcct);
                        lContainer.Accounts.Attach(lToAcct);
                        lContainer.Entry(lFromAcct).State = EntityState.Modified;
                        lContainer.Entry(lToAcct).State   = EntityState.Modified;
                        Console.WriteLine("Funds transfer successful for Order Number " + pOrderGuid.ToString());

                        var lItem = new FundsTransferSuccessful
                        {
                            OrderGuid  = pOrderGuid,
                            CustomerId = pCustomerId
                        };
                        var lVisitor = new FundsTransferSuccessfulToMessage();
                        lItem.Accept(lVisitor);
                        PublisherServiceClient lClient = new PublisherServiceClient();
                        lClient.Publish(lVisitor.Result);
                    }
                    catch (Exception lException)
                    {
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);

                        var lItem = new FundsTransferError
                        {
                            OrderGuid = pOrderGuid,
                            Error     = lException
                        };
                        var lVisitor = new FundsTransferErrorToMessage();
                        lItem.Accept(lVisitor);
                        PublisherServiceClient lClient = new PublisherServiceClient();
                        lClient.Publish(lVisitor.Result);
                    }
                    // save changed entities and finish the transaction
                    lContainer.SaveChanges();
                    lScope.Complete();
                }
            }
        }
Пример #17
0
        //public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber)
        public void Transfer(Message message)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    try
                    {
                        TransferMessage transferMessage = message as TransferMessage;
                        double          pAmount         = transferMessage.Total;
                        int             pFromAcctNumber = transferMessage.FromAccountNumber;
                        int             pToAcctNumber   = transferMessage.ToAccountNumber;
                        Account         lFromAcct       = GetAccountFromNumber(pFromAcctNumber);
                        Account         lToAcct         = GetAccountFromNumber(pToAcctNumber);
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Attach(lFromAcct);
                        lContainer.Attach(lToAcct);
                        lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                        lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                        lContainer.SaveChanges();

                        // Return successful result
                        TransferMessage result = new TransferMessage()
                        {
                            Topic     = "transfer",
                            OrderGuid = transferMessage.OrderGuid,
                            BTransfer = true
                        };
                        HostServiceAndPublishMessage(result);
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        // Return Failure result
                        TransferMessage transferMessage = message as TransferMessage;
                        TransferMessage result          = new TransferMessage()
                        {
                            Topic     = "transfer",
                            OrderGuid = transferMessage.OrderGuid,
                            BTransfer = false,
                            Comment   = lException.Message
                        };
                        HostServiceAndPublishMessage(result);
                        lScope.Complete();
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        //throw;
                    }
                }
        }
Пример #18
0
        private void LockAccount(int pAcctId)
        {
            using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                using (SqlConnection lConn = new SqlConnection((lContainer.Connection as System.Data.EntityClient.EntityConnection).StoreConnection.ConnectionString))
                    using (SqlCommand lCmd = new SqlCommand())
                    {
                        lCmd.CommandText =
                            @"
select * from dbo.Accounts with (updlock) where Id = @p_AccountId
";
                        lCmd.Parameters.AddWithValue("@p_AccountId", pAcctId);
                        lCmd.Connection = lConn;
                        lConn.Open();
                        lCmd.ExecuteNonQuery();
                    }
        }
Пример #19
0
        public void Transfer(double amount, int fromAccountNo, int toAccountNo)
        {
            using (TransactionScope scope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer()) {
                    // The lContainer is an ObjectContext. It's the primary way for interacting with
                    // entities. It encapsulates a connection to the database, contains metadata for
                    // the model, and contains an ObjectStateManager which manages objects in the cache


                    try {
                        Account fromAccount = GetAccountFromNumber(fromAccountNo);
                        Account toAccount   = GetAccountFromNumber(toAccountNo);

                        // Perform the transfer on the local instances of the entities.
                        fromAccount.Withdraw(amount);
                        toAccount.Deposit(amount);

                        // Attach the accounts to the object context. This is done because we know the
                        // entity already exists. It's just not being tracked by this context.
                        lContainer.Attach(fromAccount);
                        lContainer.Attach(toAccount);



                        // Change the state of the entity (ObjectStateEntry) for the specific object.
                        // Some info from https://msdn.microsoft.com/en-gb/data/jj592676
                        // Added     - Tracked by lContainer, does not exist in DB
                        // Unchanged - Tracked by lContainer, exists, and has not changed from the
                        //             values in the database
                        // Modified  - Tracked by lContainer, exists, but properties have been changed.
                        // Deleted   - Tracked, exists, marked for deletion on SaveChanges()
                        // Detached  - Not tracked.
                        var osm = lContainer.ObjectStateManager;
                        osm.ChangeObjectState(fromAccount, EntityState.Modified);
                        osm.ChangeObjectState(toAccount, EntityState.Modified);

                        // Modified entities are updated in the database and are now Unchanged.
                        lContainer.SaveChanges();
                        scope.Complete();
                    } catch (Exception lException) {
                        Console.WriteLine(
                            "Error occured while transferring money: " + lException.Message);
                        throw;
                    }
                }
        }
Пример #20
0
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, Guid pExternalOrderId)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    try
                    {
                        Account lFromAcct = GetAccountFromNumber(pFromAcctNumber);
                        Account lToAcct   = GetAccountFromNumber(pToAcctNumber);
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Attach(lFromAcct);
                        lContainer.Attach(lToAcct);
                        lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                        lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                        lContainer.SaveChanges();



                        Common.Model.TransferResultMessage transferResultMessage = new Common.Model.TransferResultMessage()
                        {
                            Topic       = "VideoStore",
                            Success     = true,
                            OrderNumber = pExternalOrderId,
                            Message     = "Transfer success"
                        };
                        PublisherServiceClient lClient = new PublisherServiceClient();
                        lClient.Publish(transferResultMessage);
                    }
                    catch (Exception lException)
                    {
                        Common.Model.TransferResultMessage transferResultMessage = new Common.Model.TransferResultMessage()
                        {
                            Topic       = "VideoStore",
                            Success     = false,
                            OrderNumber = pExternalOrderId,
                            Message     = "Error occured while transferring money:  " + lException.Message
                        };
                        //Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        //throw;
                        PublisherServiceClient lClient = new PublisherServiceClient();
                        lClient.Publish(transferResultMessage);
                    }
                    lScope.Complete();
                }
        }
Пример #21
0
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, Guid pOrderGuid, int pCustomerId)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    try
                    {
                        Account lFromAcct = GetAccountFromNumber(pFromAcctNumber);
                        Account lToAcct   = GetAccountFromNumber(pToAcctNumber);
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Attach(lFromAcct);
                        lContainer.Attach(lToAcct);
                        lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                        lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);

                        var lItem = new TransferComplete
                        {
                            OrderGuid  = pOrderGuid,
                            CustomerId = pCustomerId
                        };
                        var lVisitor = new TransferCompleteToTransferCompleteMessage();
                        lItem.Accept(lVisitor);
                        PublisherServiceClient lClient = new PublisherServiceClient();
                        lClient.Publish(lVisitor.Result);
                    }
                    catch (Exception lException)
                    {
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);

                        var lItem = new TransferError
                        {
                            OrderGuid = pOrderGuid
                        };
                        var lVisitor = new TransferErrorToTransferErrorMessage();
                        lItem.Accept(lVisitor);
                        PublisherServiceClient lClient = new PublisherServiceClient();
                        lClient.Publish(lVisitor.Result);
                    }

                    lContainer.SaveChanges();
                    lScope.Complete();
                }
        }
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber,
                             string pTransferNotificationAddress, string pTransferReference)
        {
            try
            {
                using (TransactionScope lScope = new TransactionScope())
                    using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                    {
                        try
                        {
                            Account lFromAcct = GetAccountFromNumber(pFromAcctNumber);
                            Account lToAcct   = GetAccountFromNumber(pToAcctNumber);
                            lFromAcct.Withdraw(pAmount);
                            lToAcct.Deposit(pAmount);
                            lContainer.Attach(lFromAcct);
                            lContainer.Attach(lToAcct);
                            lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                            lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                            lContainer.SaveChanges();

                            TransferNotificationServiceFactory.GetTransferNotificationService(pTransferNotificationAddress)
                            .NotifyTransferSuccess(pTransferReference);

                            lScope.Complete();
                        }
                        catch (Exception lException)
                        {
                            Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                            throw;
                        }
                    }
            }
            catch (Exception lException)
            {
                using (TransactionScope lScope = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    TransferNotificationServiceFactory.GetTransferNotificationService(pTransferNotificationAddress)
                    .NotifyTransferFailed(pTransferReference, lException.Message);

                    lScope.Complete();
                }
            }
        }
Пример #23
0
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, string pOrderNumber)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    try
                    {
                        Account lFromAcct = GetAccountFromNumber(pFromAcctNumber);
                        Account lToAcct   = GetAccountFromNumber(pToAcctNumber);
                        if (lFromAcct.Withdraw(pAmount))
                        {
                            lToAcct.Deposit(pAmount);
                            lContainer.Attach(lFromAcct);
                            lContainer.Attach(lToAcct);
                            lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                            lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                            lContainer.SaveChanges();

                            Console.WriteLine("Transfered sucessfully! This payment cost : " + pAmount);
                            TransferNotificationService.ITransferNotificationService lClient = new TransferNotificationService.TransferNotificationServiceClient();
                            lClient.NotifyTransferResult(true, "Transfer successful! The amount is " + pAmount, pOrderNumber);
                        }
                        else
                        {
                            Console.WriteLine("Transfered failed!");
                            TransferNotificationService.ITransferNotificationService lClient = new TransferNotificationService.TransferNotificationServiceClient();
                            lClient.NotifyTransferResult(false, "Transfer failed! Please check your bank account balance!", pOrderNumber);
                        }
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        throw;
                    }
                    finally
                    {
                        lScope.Dispose();
                    }
                }
        }
Пример #24
0
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, Guid pOrderNumber, string pReturnAddress)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    //IOperationOutcomeService lOutcomeService = OperationOutcomeServiceFactory.GetOperationOutcomeService(pResultReturnAddress);
                    try
                    {
                        Account lFromAcct = GetAccountFromNumber(pFromAcctNumber);
                        Account lToAcct   = GetAccountFromNumber(pToAcctNumber);
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Attach(lFromAcct);
                        lContainer.Attach(lToAcct);
                        lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                        lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);

                        NotificationService.NotificationServiceClient IClient = new NotificationService.NotificationServiceClient("NetMsmqBinding_INotificationService", pReturnAddress);
                        IClient.NotifyBankTransactionCompleted(pOrderNumber, OperationOutcome.Successful);

                        lContainer.SaveChanges();
                        lScope.Complete();
                        //lOutcomeService.NotifyOperationOutcome(new OperationOutcome() { Outcome = OperationOutcome.OperationOutcomeResult.Successful });
                    }
                    catch (Exception lException)
                    {
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);

                        NotificationService.NotificationServiceClient IClient = new NotificationService.NotificationServiceClient("NetMsmqBinding_INotificationService", pReturnAddress);
                        IClient.NotifyBankTransactionCompleted(pOrderNumber, OperationOutcome.Failure);

                        lScope.Complete();
                        //throw;
                        //lOutcomeService.NotifyOperationOutcome(new OperationOutcome() { Outcome = OperationOutcome.OperationOutcomeResult.Failure, Message = lException.Message });
                    }
                }
        }
Пример #25
0
        public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber, string pNotificationAddress, string pReference, string customerEmail)
        {
            /*  IOutcomeNotificationService notify;
             * try
             * {
             *     ChannelFactory<IOutcomeNotificationService> lChannelFactory =
             *         new ChannelFactory<IOutcomeNotificationService>(new NetMsmqBinding("NetMsmqBinding_IOperationOutcomeService"), new EndpointAddress(pReference));
             *     notify = lChannelFactory.CreateChannel();
             * }
             * catch (Exception lException)
             * {
             *     Console.WriteLine("Error occurred:  " + lException.Message);
             *     throw;
             * }
             */

            try
            {
                // OperationOutcome outcome = new OperationOutcome();
                using (TransactionScope lScope = new TransactionScope())
                    using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                    {
                        try
                        {
                            // find the two account entities and add them to the Container
                            Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First();
                            Account lToAcct   = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First();

                            // update the two accounts
                            lFromAcct.Withdraw(pAmount);
                            lToAcct.Deposit(pAmount);

                            // save changed entities and finish the transaction
                            lContainer.SaveChanges();
                            // lScope.Complete();


                            //  outcome.Outcome = OperationOutcome.OperationOutcomeResult.Successful;
                            //  outcome.Message = "Success! Transfer at " + DateTime.Now + ": From account number " + pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was successful.";

                            //Console.WriteLine("Sucess! Transfer at  " + DateTime.Now + ": From account number "+ pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was successful.");

                            // Console.WriteLine("Notification address " + pNotificationAddress);
                            // TransferNotificationServiceFactory.GetTransferNotificationService(pNotificationAddress)
                            //      .NotifyTransferSuccess(pReference);


                            ITransferNotificationService lChannel = TransferNotificationServiceFactory.GetTransferNotificationService(pNotificationAddress);
                            lChannel.NotifyTransferSuccess(pReference, customerEmail);

                            Console.WriteLine("Sucess! Transfer at  " + DateTime.Now + ": From account number " + pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was successful.");


                            // Console.WriteLine("Channel notify success message " + pReference);

                            // Console.WriteLine("Sucess! Transfer at  " + DateTime.Now + ": From account number " + pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was successful.");
                            // lChannel.NotifyTransferSuccess(pReference);

                            lScope.Complete();
                        }
                        catch (Exception lException)
                        {
                            Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                            //outcome.Outcome = OperationOutcome.OperationOutcomeResult.Failure;
                            //  outcome.Message = "Error occured while transferring money:  " + lException.Message;
                            // outcome.Message = "Failure!! Transfer at " + DateTime.Now + ": From account number " + pFromAcctNumber + " to " + pToAcctNumber + " of " + pAmount + " was unsuccessful.";
                            throw;
                        }
                    }
            }

            catch (Exception lException)
            {
                using (TransactionScope lScope = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    Console.WriteLine("Channel failure message " + pReference);
                    TransferNotificationServiceFactory.GetTransferNotificationService(pNotificationAddress)
                    .NotifyTransferFailed(pReference, lException.Message, customerEmail);

                    lScope.Complete();
                }
            }



            // notify.NotifyOperationOutcome(pReference, outcome);
        }
Пример #26
0
        public string Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    try
                    {
                        // find the two account entities and add them to the Container
                        Account lFromAcct = lContainer.Accounts.Where(account => pFromAcctNumber == account.AccountNumber).First();
                        Account lToAcct   = lContainer.Accounts.Where(account => pToAcctNumber == account.AccountNumber).First();
                        if (lFromAcct.Balance - pAmount < 0)
                        {
                            String lMessage = "Transfer Failed: Insufficient Amount";
                            Console.WriteLine("=================Transfer=================");
                            Console.WriteLine("From: " + pFromAcctNumber);
                            Console.WriteLine("To: " + pToAcctNumber);
                            Console.WriteLine("Total: " + pAmount);
                            Console.WriteLine("Transfer time: " + DateTime.Now);
                            Console.WriteLine("Status: TRANSFER FAILED");
                            Console.WriteLine("==========================================" + "\n");
                            return(lMessage);
                        }

                        // update the two accounts
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);

                        Console.WriteLine("=================Transfer=================");
                        Console.WriteLine("From: " + pFromAcctNumber);
                        Console.WriteLine("To: " + pToAcctNumber);
                        Console.WriteLine("Total: " + pAmount);
                        Console.WriteLine("Transfer time: " + DateTime.Now);
                        Console.WriteLine("Status: TRANSFER COMPLETED");
                        Console.WriteLine("==========================================" + "\n");

                        // save changed entities and finish the transaction
                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                    catch (ArgumentNullException lException)
                    {
                        Console.WriteLine("===========Error in Transfer Money============");
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        Console.WriteLine("Error: one of the accounts does not exist");
                        Console.WriteLine("==============================================");
                        Console.WriteLine(" ");
                        String lMessage = "Transfer Failed: One of the accounts does not exist"; // TODO Find the proper account
                        Console.WriteLine(lMessage);
                        return(lMessage);
                    }
                    catch (Exception lException)
                    {
                        Console.WriteLine("===========Error in Transfer Money============");
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        Console.WriteLine("Error: Unknown Error");
                        Console.WriteLine("==============================================");
                        Console.WriteLine(" ");
                        return("Transfer Failed: Unknown Error");
                    }
                }
            string lSuccessMessage = "Transfer Success";

            Console.WriteLine(lSuccessMessage);
            return(lSuccessMessage);
        }