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;
                    }
                }
            }
        }
        public void NotifyTransferFailed(string pOrderNumber, string reason)
        {
            using (var lScope = new TransactionScope())
            {
                var orderNumber = Guid.Parse(pOrderNumber);
                using (var lContainer = new VideoStoreEntityModelContainer())
                {
                    var order = lContainer.Orders.Include("Customer").FirstOrDefault(pOrder => pOrder.OrderNumber == orderNumber);
                    try
                    {
                        if (order != null)
                        {
                            EmailProvider.SendMessage(new EmailMessage()
                            {
                                ToAddress = order.Customer.Email,
                                Message   = "There was an error in processsing your order " + order.OrderNumber + ": " + reason + ". Please contact Video Store"
                            });

                            lScope.Complete();
                        }
                    }
                    catch (Exception lException)
                    {
                        SendOrderErrorMessage(order, lException);
                        throw;
                    }
                }
            }
        }
        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();
                }
            }
        }
Exemple #4
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();
         }
     }
 }
 public Media GetMediaById(int pId)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         return(lContainer.Media.Include("Stocks").First(p => p.Id == pId));
     }
 }
Exemple #6
0
 private Order RetrieveDeliveryOrderByOrderNumber(Guid pOrderNumber)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         return(lContainer.Orders.Include("Customer").Where((aOrder) => aOrder.OrderNumber == pOrderNumber).FirstOrDefault());
     }
 }
Exemple #7
0
 public User GetReviewAuthorByReview(int reviewId)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         return(lContainer.Users.First(p => p.Id == reviewId));
     }
 }
Exemple #8
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;
                    }
                }
            }
        }
Exemple #9
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();
                }
        }
 public Order GetOrderByOrderNumber(Guid pOrderNumber)
 {
     using (var lContainer = new VideoStoreEntityModelContainer())
     {
         return(lContainer.Orders.Include("Customer").Where((pOrder) => (pOrder.OrderNumber == pOrderNumber)).FirstOrDefault());
     }
 }
Exemple #11
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();
         }
     }
 }
Exemple #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;
                    }
                }
            }
        }
Exemple #13
0
        private static void CreateUser()
        {
            using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
            {
                if (lContainer.Users.Where((pUser) => pUser.Name == "Customer").Count() > 0)
                {
                    return;
                }
            }


            User lCustomer = new User()
            {
                Name            = "Customer",
                LoginCredential = new LoginCredential()
                {
                    UserName = "******", Password = "******"
                },
                Email             = "*****@*****.**",
                Address           = "1 Central Park",
                BankAccountNumber = 456,
            };

            ServiceLocator.Current.GetInstance <IUserProvider>().CreateUser(lCustomer);
        }
Exemple #14
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();
                    }
                }
        }
Exemple #15
0
        private static void CreateOperator()
        {
            Role lOperatorRole = new Role()
            {
                Name = "Operator"
            };

            using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
            {
                if (lContainer.Roles.Count() > 0)
                {
                    return;
                }
            }
            User lOperator = new User()
            {
                Name            = "Operator",
                LoginCredential = new LoginCredential()
                {
                    UserName = "******", Password = "******"
                },
                Email   = "*****@*****.**",
                Address = "1 Central Park"
            };

            lOperator.Roles.Add(lOperatorRole);

            ServiceLocator.Current.GetInstance <IUserProvider>().CreateUser(lOperator);
        }
        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();
                }
        }
Exemple #17
0
 public List <Review> GetReviewsForMediaId(int mediaId)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         return((from Review in lContainer.Reviews where Review.MediaId == mediaId select Review).ToList());
     }
 }
        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);
        }
Exemple #19
0
 public Review GetReviewById(int pId)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         return(lContainer.Reviews.First(p => p.Id == pId));
     }
 }
        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;
                    }
                }
        }
Exemple #21
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;
                    }
                }
            }
        }
Exemple #22
0
 private void LoadEntitiesForOrderSubmission(Order pOrder, VideoStoreEntityModelContainer pContainer)
 {
     foreach (OrderItem item in pOrder.OrderItems)
     {
         item.Media.Stocks = pContainer.Media.Include("Stocks").First(p => p.Id == item.Media.Id).Stocks;
     }
 }
Exemple #23
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();
                        }
                    }
                }
        }
 public List <Role> GetRolesForUserName(string pUserName)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         var lUser = lContainer.Users.Include("Roles").FirstOrDefault((pUser) => pUser.LoginCredential.UserName == pUserName);
         return(lUser.Roles.ToList());
     }
 }
 public User ReadUserById(int pUserId)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         User lCustomer = lContainer.Users.Include("LoginCredential").Where((pUser) => pUser.Id == pUserId).FirstOrDefault();
         return(lCustomer);
     }
 }
Exemple #26
0
 public Order FindOrderbyOrderNumber(Guid tOrderNumber)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             return(lContainer.Orders.Include("Customer").Include("OrderItems.Media.Stocks").FirstOrDefault((pOrder) => pOrder.OrderNumber == tOrderNumber));
         }
 }
Exemple #27
0
 public Media GetMediaById(int pId)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         lContainer.Configuration.ProxyCreationEnabled = false;
         return(lContainer.Media.Include("Stocks").First(p => p.Id == pId));
     }
 }
 private Order RetrieveDeliveryOrder(Guid pDeliveryId)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         Delivery lDelivery = lContainer.Deliveries.Include("Order.Customer").Where((pDel) => pDel.ExternalDeliveryIdentifier == pDeliveryId).FirstOrDefault();
         return(lDelivery.Order);
     }
 }
Exemple #29
0
 public List <Review> GetReviewsByUser(int userId)
 {
     using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
     {
         lContainer.Configuration.ProxyCreationEnabled = false;
         return(lContainer.Reviews.Where(p => p.User.Id == userId).ToList());
     }
 }
 public void DeleteUser(User pUser)
 {
     using (TransactionScope lScope = new TransactionScope())
         using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
         {
             lContainer.Users.DeleteObject(pUser);
             lContainer.SaveChanges();
         }
 }