public void NotifyTransferSuccess(string pOrderNumber)
        {
            using (var lScope = new TransactionScope())
            {
                var orderNumber = Guid.Parse(pOrderNumber);
                using (var lContainer = new VideoStoreEntityModelContainer())
                {
                    var order = lContainer.Orders.Include("Customer").Include("OrderItems.Media.Stocks").FirstOrDefault(pOrder => pOrder.OrderNumber == orderNumber);
                    try
                    {
                        if (order != null)
                        {
                            order.UpdateStockLevels();

                            PlaceDeliveryForOrder(order);
                            lContainer.Orders.ApplyChanges(order);

                            lContainer.SaveChanges();
                            lScope.Complete();
                        }
                    }
                    catch (Exception lException)
                    {
                        SendOrderErrorMessage(order, lException);
                        throw;
                    }
                }
            }
        }
Esempio n. 2
0
        public void ChangeOrderPaymentStatus(Message pMessage)
        {
            TransferMessage tMessage = pMessage as TransferMessage;

            Guid pOrderNumber = tMessage.OrderGuid;

            Console.WriteLine("change ----- - - - --" + pOrderNumber);
            using (TransactionScope lScope = new TransactionScope())
            {
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    Order order = lContainer.Orders.Include("OrderItems.Media.Stocks").Include("Customer.LoginCredential").Where((tOrder) => tOrder.OrderNumber == pOrderNumber).FirstOrDefault();
                    //LoadMediaStocks(order);
                    MarkAppropriateUnchangedAssociations(order);
                    Console.WriteLine("Change status");
                    if (tMessage.BTransfer)
                    {
                        order.OrderStatus = "payed";
                    }
                    else
                    {
                        Console.WriteLine("revert stock");
                        order.OrderStatus = "fail";
                        order.RevertStockLevels();
                    }

                    lContainer.Orders.ApplyChanges(order);
                    lContainer.SaveChanges();
                    lScope.Complete();
                }
            }
        }
Esempio n. 3
0
        public void PlaceDeliveryForOrder(Order pOrder)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    Delivery lDelivery = new Delivery()
                    {
                        ExternalDeliveryIdentifier = Guid.NewGuid(),
                        DeliveryStatus             = DeliveryStatus.Submitted,
                        SourceAddress      = "Video Store Address",
                        DestinationAddress = pOrder.Customer.Address,
                        Order = pOrder
                    };
                    DeliveryServiceClient lClient = new DeliveryServiceClient();

                    lClient.SubmitDelivery(new DeliveryInfo()
                    {
                        DeliveryIdentifier          = lDelivery.ExternalDeliveryIdentifier,
                        OrderNumber                 = lDelivery.Order.OrderNumber.ToString(),
                        SourceAddress               = lDelivery.SourceAddress,
                        DestinationAddress          = lDelivery.DestinationAddress,
                        DeliveryNotificationAddress = "net.msmq://localhost/private/DeliveryNotificationService"
                    });

                    // update the number of stock corresponding to this order and save the delivery with the order
                    //pOrder.UpdateStockLevels();  We are not updating the stock levels with putting deliver any more
                    pOrder.Delivery = lDelivery;
                    lContainer.Orders.ApplyChanges(pOrder);
                    lContainer.Deliveries.ApplyChanges(lDelivery);
                    lContainer.SaveChanges();
                    lScope.Complete();
                }
        }
Esempio n. 4
0
        public void SubmitOrder(Entities.Order pOrder)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    try
                    {
                        // Only Request the transfer, delivery will be placed after the trasfer succeed
                        pOrder.OrderNumber = Guid.NewGuid();

                        // update the stock levels for this order before the fund is transferred,
                        //because the items should be reserved for this user
                        // if there is anything wrong with the fund transfer, the stock levels will be added back
                        pOrder.UpdateStockLevels();
                        TransferFundsFromCustomer(pOrder.OrderNumber, pOrder.Customer.BankAccountNumber, pOrder.Total ?? 0.0);
                        Console.WriteLine("Fund transfer of order: " + pOrder.OrderNumber + " has been requested to the bank");
                        lContainer.Orders.ApplyChanges(pOrder);
                        lContainer.SaveChanges();
                    }
                    catch (Exception lException)
                    {
                        SendTransferErrorEmail(pOrder.OrderNumber, lException.Message);
                        Console.WriteLine("Something wrong happened. The fund transferr request were not able to be placed.");
                        Console.WriteLine("Exception Message:" + lException.Message);
                        throw;
                    }
                    finally {
                        lScope.Complete();
                    }
                }
        }
Esempio n. 5
0
        public void SubmitOrder(Order pOrder)
        {
            using (TransactionScope lScope = new TransactionScope())
            {
                LoadMediaStocks(pOrder);
                MarkAppropriateUnchangedAssociations(pOrder);
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    try
                    {
                        Console.WriteLine("Saving temporary");

                        pOrder.OrderNumber = Guid.NewGuid();

                        lContainer.Orders.ApplyChanges(pOrder);

                        TransferFundsFromCustomer(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, pOrder.Total ?? 0.0, pOrder.OrderNumber, pOrder.Customer.Id);
                        Console.WriteLine("Funds Transfer Requested");

                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        SendOrderErrorMessage(pOrder, lException);
                        throw;
                    }
                }
            }
        }
        public void NotifyDeliveryProcessed(string orderNnmber, Guid pDeliveryId, DeliveryStatus status, String errorMsg)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    var      orderN    = Guid.Parse(orderNnmber);
                    Delivery lDelivery = lContainer.Deliveries.Include("Order.Customer").Where((pDel) => pDel.Order.OrderNumber == orderN).FirstOrDefault();
                    if (lDelivery != null)
                    {
                        lDelivery.DeliveryStatus = status;

                        if (status == DeliveryStatus.Submitted)
                        {
                            lDelivery.ExternalDeliveryIdentifier = pDeliveryId;

                            SendOrderPlacedConfirmation(lDelivery.Order);
                        }
                        else if (status == DeliveryStatus.Failed)
                        {
                            SendOrderErrorMessage(lDelivery.Order, errorMsg);
                        }

                        lContainer.SaveChanges();
                    }
                    lScope.Complete();
                }
        }
Esempio n. 7
0
        public void SubmitOrder(Entities.Order pOrder)
        {
            using (TransactionScope lScope = new TransactionScope())
            {
                LoadMediaStocks(pOrder);
                MarkAppropriateUnchangedAssociations(pOrder);
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    try
                    {
                        pOrder.OrderNumber = Guid.NewGuid();
                        if (pOrder.CheckStockLevels())
                        {
                            pOrder.UpdateStockLevels();
                            TransferFundsFromCustomer(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, pOrder.Total ?? 0.0, pOrder.OrderNumber.ToString());
                        }
                        else
                        {
                            Console.WriteLine("Insufficient stock");
                            throw new Exception("Insufficient stock!");
                        }

                        lContainer.Orders.ApplyChanges(pOrder);
                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        Console.WriteLine("Error occured while upload stocks: " + lException.Message);
                        throw;
                    }
                }
            }
        }
Esempio n. 8
0
 public void DeliverySubmitted(Guid pOrderNumber, Guid pDeliveryIdentifier)
 {
     using (TransactionScope lScope = new TransactionScope())
     {
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             Order order = lContainer.Orders.Include("Customer")
                           .Include("OrderItems")
                           .Include("OrderItems.Media")
                           .Include("OrderItems.Media.Stocks").FirstOrDefault(x => x.OrderNumber == pOrderNumber);
             Delivery lDelivery = new Delivery()
             {
                 DeliveryStatus     = DeliveryStatus.Submitted,
                 SourceAddress      = "Video Store Address",
                 DestinationAddress = order.Customer.Address,
                 Order = order,
                 ExternalDeliveryIdentifier = pDeliveryIdentifier
             };
             order.Delivery = lDelivery;
             order.UpdateStockLevels();
             SendOrderPlacedConfirmation(order);
             lContainer.SaveChanges();
             lScope.Complete();
         }
     }
 }
Esempio n. 9
0
        public static void checkOrderPaymentTimeout()
        {
            using (TransactionScope lScope = new TransactionScope())
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    List <Order> orders = lContainer.Orders.Include("OrderItems.Media.Stocks").Include("Customer.LoginCredential").Where((tOrder) => tOrder.OrderStatus == "unpayed").ToList();
                    Console.WriteLine(String.Format("Check Order Payment Timeout, order list length: {0}", orders.Count));
                    foreach (Order lOrder in orders)
                    {
                        DateTime orderTime = lOrder.OrderDate;
                        DateTime now       = DateTime.Now;
                        TimeSpan timeSpan  = now.Subtract(orderTime);
                        double   houres    = timeSpan.TotalSeconds;
                        if (houres > 110.0)
                        {
                            lOrder.OrderStatus = "expired";
                            //LoadMediaStocks(lOrder);
                            MarkAppropriateUnchangedAssociations(lOrder);
                            lOrder.RevertStockLevels();
                            lContainer.Orders.ApplyChanges(lOrder);

                            lContainer.SaveChanges();
                            lScope.Complete();
                        }
                    }
                }
        }
Esempio n. 10
0
 public void NotifyTransferResult(bool pResult, string pDescription, string pOrderNumber)
 {
     using (TransactionScope lScope = new TransactionScope())
     {
         Console.WriteLine(pDescription);
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             Order lOrder = ServiceLocator.Current.GetInstance <IOrderProvider>().GetOrderByOrderNumber(Guid.Parse(pOrderNumber));
             LoadMediaStocks(lOrder);
             MarkAppropriateUnchangedAssociations(lOrder);
             Console.WriteLine(lOrder.OrderItems[0].Media.Stocks.Quantity);
             Console.WriteLine(lOrder.OrderItems[0].Quantity);
             if (lOrder != null)
             {
                 if (pResult)
                 {
                     SendOrderPlacedConfirmation(lOrder);
                     PlaceDeliveryForOrder(lOrder);
                 }
                 else
                 {
                     SendOrderErrorMessage(lOrder);
                     Console.WriteLine("Stocks have been rolled back");
                     lOrder.RollbackStockLevels();
                 }
             }
             lContainer.Orders.ApplyChanges(lOrder);
             lContainer.SaveChanges();
             lScope.Complete();
         }
     }
 }
        public void SubmitOrder(Entities.Order pOrder)
        {
            using (TransactionScope lScope = new TransactionScope())
            {
                LoadMediaStocks(pOrder);
                MarkAppropriateUnchangedAssociations(pOrder);
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    try
                    {
                        pOrder.OrderNumber = Guid.NewGuid();
                        TransferFundsFromCustomer(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, pOrder.Total ?? 0.0);

                        pOrder.UpdateStockLevels();

                        PlaceDeliveryForOrder(pOrder);
                        lContainer.Orders.ApplyChanges(pOrder);

                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        SendOrderErrorMessage(pOrder, lException);
                        throw;
                    }
                }
            }
            SendOrderPlacedConfirmation(pOrder);
        }
Esempio n. 12
0
        public void FundsTransferFailed(Guid pOrderGuid)
        {
            using (TransactionScope lScope = new TransactionScope())
            {
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    try
                    {
                        Console.WriteLine("Funds Transfer Error");
                        var pOrder = lContainer.Orders
                                     .Include("Customer").FirstOrDefault(x => x.OrderNumber == pOrderGuid);

                        EmailProvider.SendMessage(new EmailMessage()
                        {
                            ToAddress = pOrder.Customer.Email,
                            Message   = "There was an error with your credit. The purchase cannot proceed."
                        });
                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        Console.WriteLine("Error in FundsTransferError: " + lException.Message);
                        throw;
                    }
                }
            }
        }
        public void SubmitOrder(Order pOrder)
        {
            SystemWideLogging.LogServiceClient.LogEvent("VideoStore :: VideoStore.Business.Components\\OrderProvider.cs  :: public void SubmitOrder(Entities.Order pOrder)", "New Order has been submitted from WebClient ( pOrder.Id=" + pOrder.Id + " )");


            using (var lScope = new TransactionScope())
                using (var lContainer = new VideoStoreEntityModelContainer())
                {
                    try
                    {
                        pOrder.OrderNumber = Guid.NewGuid();

                        SystemWideLogging.LogServiceClient.LogEvent("VideoStore :: VideoStore.Business.Components\\OrderProvider.cs  :: public void SubmitOrder(Entities.Order pOrder)", "Requesting TransferFundsFromCustomer at Bank - asynchronously via MSMQ - ( pOrder.Id=" + pOrder.Id + " )");

                        TransferFundsFromCustomer(pOrder.Customer.BankAccountNumber, pOrder.Total ?? 0.0, pOrder.OrderNumber.ToString());
                        lContainer.Orders.ApplyChanges(pOrder);
                        pOrder.UpdateStockLevels();
                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        SystemWideLogging.LogServiceClient.LogEvent("VideoStore :: VideoStore.Business.Components\\OrderProvider.cs  :: public void SubmitOrder(Entities.Order pOrder)", "Error occured while requesting TransferFundsFromCustomer at Bank - asynchronously via MSMQ - ( pOrder.Id=" + pOrder.Id + ", lException.Message=" + lException.Message + " )");
                        ConsoleHelper.WriteLine(ConsoleColor.Red, "Error: " + lException.Message);
                        SendOrderErrorMessage(pOrder, lException);
                        throw;
                    }
                }
        }
Esempio n. 14
0
 public void DeleteUser(User pUser)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             lContainer.Users.DeleteObject(pUser);
             lContainer.SaveChanges();
         }
 }
Esempio n. 15
0
 public void CreateUser(VideoStore.Business.Entities.User pUser)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             lContainer.Users.AddObject(pUser);
             lContainer.SaveChanges();
             lScope.Complete();
         }
 }
Esempio n. 16
0
 public void UpdateUser(User pUser)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             lContainer.Entry(pUser).State = EntityState.Modified;
             lContainer.SaveChanges();
             lScope.Complete();
         }
 }
Esempio n. 17
0
 public void DeleteReview(Review pReview)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             lContainer.Reviews.Remove(pReview);
             lContainer.SaveChanges();
             lScope.Complete();
         }
 }
Esempio n. 18
0
 public void UpdateUser(User pUser)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             lContainer.Users.Attach(pUser);
             lContainer.ObjectStateManager.ChangeObjectState(pUser, System.Data.EntityState.Modified);
             lContainer.SaveChanges();
             lScope.Complete();
         }
 }
 private static void RollbackOrder(Guid pDeliveryId)
 {
     using (var lScope = new TransactionScope())
         using (var lContainer = new VideoStoreEntityModelContainer())
         {
             Delivery lDelivery = lContainer.Deliveries.Include("Order.Customer").Where((pDel) => pDel.ExternalDeliveryIdentifier == pDeliveryId).FirstOrDefault();
             lDelivery.Order.RollbackStockLevels();
             lContainer.SaveChanges();
             lScope.Complete();
         }
 }
Esempio n. 20
0
        public void SubmitOrder(Entities.Order pOrder)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    AttachEntitiesToContext(lContainer, pOrder);

                    pOrder.UpdateStockLevels();

                    lContainer.SaveChanges();
                    lScope.Complete();
                }
        }
 private static void RollbackOrder(Guid orderNumber)
 {
     using (var lScope = new TransactionScope())
         using (var lContainer = new VideoStoreEntityModelContainer())
         {
             Order order = lContainer.Orders.Where(o => o.OrderNumber == orderNumber).SingleOrDefault();
             if (order != null)
             {
                 order.RollbackStockLevels();
                 lContainer.SaveChanges();
             }
             lScope.Complete();
         }
 }
 private void UpdateDeliveryStatus(Guid pDeliveryId, DeliveryStatus status)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             Delivery lDelivery = lContainer.Deliveries.Where((pDel) => pDel.ExternalDeliveryIdentifier == pDeliveryId).FirstOrDefault();
             if (lDelivery != null)
             {
                 lDelivery.DeliveryStatus = status;
                 lContainer.SaveChanges();
             }
             lScope.Complete();
         }
 }
Esempio n. 23
0
 private void RollbackOrder(Order pOrder)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             if (pOrder != null)
             {
                 pOrder.RollbackStockLevels();
                 lContainer.Orders.ApplyChanges(pOrder);
                 lContainer.SaveChanges();
             }
             lScope.Complete();
         }
 }
        public static void LogEvent_WithinOwnAppInstance(string sSource, string sMessage)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    SystemLog SystemLogItem = new SystemLog();


                    SystemLogItem.EventTime = DateTime.Now;
                    SystemLogItem.Source    = sSource;
                    SystemLogItem.Message   = sMessage;

                    lContainer.SystemLogs.AddObject(SystemLogItem);

                    lContainer.SaveChanges();

                    lScope.Complete();
                }
        }
        public void NotifyDeliverySubmission(Guid orderNumber, Guid pDeliveryId)
        {
            using (var lScope = new TransactionScope())
                using (var lContainer = new VideoStoreEntityModelContainer())
                {
                    Order    order    = lContainer.Orders.Include("Customer").Where(o => o.OrderNumber == orderNumber).FirstOrDefault();
                    Delivery delivery = lContainer.Deliveries.Where(d => d.ExternalDeliveryIdentifier == pDeliveryId).FirstOrDefault();

                    // Link them together
                    if (order != null && delivery != null)
                    {
                        order.Delivery = delivery;
                        lContainer.SaveChanges();
                        lScope.Complete();

                        EmailProvider.SendMessage(order.Customer.Email, "Your order " + orderNumber + " has been placed");
                    }
                }
        }
Esempio n. 26
0
        public void SubmitReview(Review pReview, Media pMedia, User pUser)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    // Update the media rating
                    lContainer.Media.First(m => m.Id == pMedia.Id).RatingCount = pMedia.RatingCount;
                    lContainer.Media.First(m => m.Id == pMedia.Id).RatingSum   = pMedia.RatingSum;

                    // Add the review to the reviews list
                    pReview.User  = pUser;
                    pReview.Media = lContainer.Media.First(m => m.Id == pMedia.Id);
                    lContainer.Reviews.Add(pReview);

                    // Commit changes
                    lContainer.SaveChanges();
                    lScope.Complete();
                }
        }
Esempio n. 27
0
        public void CreateReview(Review pReview)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    Media media = lContainer.Media.FirstOrDefault(s => s.Id == pReview.MediaId);
                    User  user  = lContainer.Users.FirstOrDefault(s => s.Id == pReview.UserId);
                    pReview.Media = media;
                    pReview.User  = user;
                    pReview.Date  = DateTime.Now;

                    // Update changes to Media.
                    media.RatingsCount += 1;
                    media.RatingsSum   += pReview.Rating;

                    lContainer.Reviews.Add(pReview);
                    lContainer.SaveChanges();
                    lScope.Complete();
                }
        }
Esempio n. 28
0
 public void CancelOrder(Entities.Order pOrder)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             try
             {
                 pOrder.RevertStockLevels();
                 lContainer.Orders.ApplyChanges(pOrder);
                 SendOrderDeclinedEmail(pOrder);
                 lContainer.SaveChanges();
                 lScope.Complete();
             }
             catch (Exception lException)
             {
                 SendOrderErrorMessage(pOrder, lException);
                 throw;
             }
         }
 }
Esempio n. 29
0
        public void HandleBankNotification(Guid OrderNumber, String pMessage)
        {
            Order pOrder = this.FindOrderbyOrderNumber(OrderNumber);

            if (pMessage == "Success")
            {
                //request to start delivery
                this.PlaceDeliveryForOrder(pOrder);
                this.SendDeliverySubmittedEmail(OrderNumber);
            }
            else
            {
                //if the transfer fails, send email to the customer with fail message
                this.SendTransferErrorEmail(OrderNumber, pMessage);

                using (TransactionScope lScope = new TransactionScope())
                    using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                    {
                        Console.Write("Calling Compensator to restore Stock levels");
                        // update the Stock by adding the stock quantity back
                        pOrder.CompensateStockLevels();
                        //lContainer.Orders.ApplyChanges(pOrder);

                        // see if the compensator works before saving changes
                        foreach (OrderItem item in pOrder.OrderItems)
                        {
                            lContainer.Stocks.Attach(item.Media.Stocks);
                            lContainer.ObjectStateManager.ChangeObjectState(item.Media.Stocks, System.Data.EntityState.Modified);
                            //lContainer.Stocks.ApplyChanges(item.Media.Stocks);
                        }
                        //lContainer.Orders.ApplyChanges(pOrder);

                        /*lContainer.ObjectStateManager.ChangeObjectState(pOrder,
                         *  System.Data.EntityState.Modified);
                         * lContainer.Orders.ApplyChanges(pOrder);*/
                        lContainer.SaveChanges();
                        lScope.Complete();
                        Console.WriteLine("Easy! Stock levels have been restored.");
                    }
            }
        }
Esempio n. 30
0
        public void SubmitOrder(Entities.Order pOrder)
        {
            using (TransactionScope lScope = new TransactionScope())
            {
                LoadMediaStocks(pOrder);
                MarkAppropriateUnchangedAssociations(pOrder);
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    try
                    {
                        //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");

                        pOrder.OrderNumber = Guid.NewGuid();
                        OrderToOrderMessage lVisitor = new OrderToOrderMessage(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, RetrieveVideoStoreAccountNumber());
                        lVisitor.Visit(pOrder);

                        PublisherServiceClient lClient = new PublisherServiceClient(binding, address);
                        lClient.Publish(lVisitor.Result);
                        //TransferFundsFromCustomer(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, pOrder.Total ?? 0.0);

                        pOrder.UpdateStockLevels();
                        pOrder.OrderStatus = "unpayed";
                        //PlaceDeliveryForOrder(pOrder);
                        lContainer.Orders.ApplyChanges(pOrder);
                        lContainer.SaveChanges();
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        // SendOrderErrorMessage(pOrder, lException);

                        // throw;
                    }
                }
            }
        }