public void NotifyDeliveryCompletion(Guid pDeliveryId, Entities.DeliveryStatus status)
        {
            Order lAffectedOrder = RetrieveDeliveryOrder(pDeliveryId);

            UpdateDeliveryStatus(pDeliveryId, status);
            if (status == Entities.DeliveryStatus.Delivered)
            {
                Console.WriteLine("=======================================================================");
                Console.WriteLine("Message from DeliveryCo -> Order: " + pDeliveryId.ToString() + " has been Delivered");
                Console.WriteLine("=======================================================================");
                EmailProvider.SendMessage(new EmailMessage()
                {
                    ToAddress = lAffectedOrder.Customer.Email,
                    Message   = "Our records show that your order" + lAffectedOrder.OrderNumber + " has been delivered. Thank you for shopping at video store"
                });
            }
            if (status == Entities.DeliveryStatus.Failed)
            {
                Console.WriteLine("Order:" + pDeliveryId.ToString() + " Failed");

                EmailProvider.SendMessage(new EmailMessage()
                {
                    ToAddress = lAffectedOrder.Customer.Email,
                    Message   = " !!!ALERT!!!\nOur records show that there was a problem" + lAffectedOrder.OrderNumber + " delivering your order. Please contact Video Store"
                });
            }
        }
        //public IEmailProvider EmailProvider
        //{
        //    get { return ServiceLocator.Current.GetInstance<IEmailProvider>(); }
        //}

        /***
         *
         * Converted to use publisher service
         *
         * No email Provider!
         *
         * ***/

        public void NotifyDeliveryCompletion(Guid pDeliveryId, Entities.DeliveryStatus status)
        {
            Order lAffectedOrder = RetrieveDeliveryOrder(pDeliveryId);

            UpdateDeliveryStatus(pDeliveryId, status);
            if (status == Entities.DeliveryStatus.Delivered)
            {
                //EmailProvider.SendMessage(new EmailMessage()
                //{
                //    ToAddress = lAffectedOrder.Customer.Email,
                //    Message = "Our records show that your order" +lAffectedOrder.OrderNumber + " has been delivered. Thank you for shopping at video store"
                //});
                Common.Model.SendEmailMessage emailMessage = new Common.Model.SendEmailMessage()
                {
                    Topic   = "Email",
                    Message = "Our records show that your order"
                              + lAffectedOrder.OrderNumber +
                              " has been delivered. Thank you for shopping at video store",
                    ToAddresses = lAffectedOrder.Customer.Email,
                    Date        = new DateTime()
                };

                PublisherServiceClient lClient = new PublisherServiceClient();
                lClient.Publish(emailMessage);
            }
            if (status == Entities.DeliveryStatus.Failed)
            {
                //EmailProvider.SendMessage(new EmailMessage()
                //{
                //    ToAddress = lAffectedOrder.Customer.Email,
                //    Message = "Our records show that there was a problem" + lAffectedOrder.OrderNumber + " delivering your order. Please contact Video Store"
                //});

                Common.Model.SendEmailMessage emailMessage = new Common.Model.SendEmailMessage()
                {
                    Topic       = "Email",
                    Message     = "Our records show that there was a problem" + lAffectedOrder.OrderNumber + " delivering your order. Please contact Video Store",
                    ToAddresses = lAffectedOrder.Customer.Email,
                    Date        = new DateTime()
                };

                PublisherServiceClient lClient = new PublisherServiceClient();
                lClient.Publish(emailMessage);
            }
        }
        public void NotifyDeliveryStatus(Guid pDeliveryId, Entities.DeliveryStatus status)
        {
            using (BookStoreEntityModelContainer lContainer = new BookStoreEntityModelContainer())
            {
                Order lAffectedOrder = RetrieveDeliveryOrder(pDeliveryId);
                UpdateDeliveryStatus(pDeliveryId, status);
                if (status == Entities.DeliveryStatus.GoodsPicked)
                {
                    Console.WriteLine("Message from DeliveryCo: Delivery " + pDeliveryId + "has been picked up from one of our warehouses.");
                    EmailProvider.SendMessage(new EmailMessage()
                    {
                        ToAddress = lAffectedOrder.Customer.Email,
                        Message   = "Our records show that the goods for your order" + lAffectedOrder.OrderNumber + " have been picked up from the Warehouse and will arrive soon. Thank you for shopping at Book store."
                    });
                }

                if (status == Entities.DeliveryStatus.InTransit)
                {
                    Console.WriteLine("Message from DeliveryCo: Delivery " + pDeliveryId + "is in transit.");
                    EmailProvider.SendMessage(new EmailMessage()
                    {
                        ToAddress = lAffectedOrder.Customer.Email,
                        Message   = "Our records show that your order" + lAffectedOrder.OrderNumber + " is in transit and will arrive very soon. Thank you for shopping at Book store."
                    });
                }
                if (status == Entities.DeliveryStatus.Delivered)
                {
                    Console.WriteLine("Message from DeliveryCo: Delivery " + pDeliveryId + "has been delivered. Thank you for using DeliveryCo.");
                    EmailProvider.SendMessage(new EmailMessage()
                    {
                        ToAddress = lAffectedOrder.Customer.Email,
                        Message   = "Our records show that your order" + lAffectedOrder.OrderNumber + " has been delivered. Thank you for shopping at Book store."
                    });
                }
                if (status == Entities.DeliveryStatus.Failed)
                {
                    Console.WriteLine("Message from DeliveryCo: Sorry, there was an issue with delivery " + pDeliveryId + ". Please contact DeliveryCo.");
                    EmailProvider.SendMessage(new EmailMessage()
                    {
                        ToAddress = lAffectedOrder.Customer.Email,
                        Message   = "Our records show that there was a problem" + lAffectedOrder.OrderNumber + " delivering your order. Please contact Book Store."
                    });
                }
            }
        }
        public void NotifyDeliveryCompletion(Guid pDeliveryId, Entities.DeliveryStatus status)
        {
            Order lAffectedOrder = RetrieveDeliveryOrder(pDeliveryId);

            // Delivery was deleted due to order cancellation
            if (lAffectedOrder == null)
            {
                return;
            }

            UpdateDeliveryStatus(pDeliveryId, status);
            if (status == Entities.DeliveryStatus.Delivered)
            {
                EmailProvider.SendMessage(new EmailMessage()
                {
                    ToAddress = lAffectedOrder.Customer.Email,
                    Message   = "Our records show that your order " + lAffectedOrder.OrderNumber + " has been delivered. Thank you for shopping at Book store"
                });
                Console.WriteLine("============Delivery Complete Notification============");
                Console.WriteLine("Order Number: " + lAffectedOrder.OrderNumber);
                Console.WriteLine("Date: " + lAffectedOrder.OrderDate);
                Console.WriteLine("Status: SUCCESS");
                Console.WriteLine("Time: " + DateTime.Now);
                Console.WriteLine("======================================================");
                Console.WriteLine(" ");
            }
            if (status == Entities.DeliveryStatus.Failed)
            {
                EmailProvider.SendMessage(new EmailMessage()
                {
                    ToAddress = lAffectedOrder.Customer.Email,
                    Message   = "Our records show that there was a problem " + lAffectedOrder.OrderNumber + " delivering your order. Please contact Book Store"
                });
                Console.WriteLine("============Delivery Complete Notification============");
                Console.WriteLine("Order Number: " + lAffectedOrder.OrderNumber);
                Console.WriteLine("Date: " + lAffectedOrder.OrderDate);
                Console.WriteLine("Status: FAILED");
                Console.WriteLine("Time: " + DateTime.Now);
                Console.WriteLine("======================================================");
                Console.WriteLine(" ");
            }
        }
        public static Operations.DataStructures.DeliveryStatus ToServiceContract(Entities.DeliveryStatus status)
        {
            switch (status)
            {
            case Entities.DeliveryStatus.Cancelled:
                return(Operations.DataStructures.DeliveryStatus.Cancelled);

            case Entities.DeliveryStatus.Created:
                return(Operations.DataStructures.DeliveryStatus.Created);

            case Entities.DeliveryStatus.Finished:
                return(Operations.DataStructures.DeliveryStatus.Finished);

            case Entities.DeliveryStatus.InProgress:
                return(Operations.DataStructures.DeliveryStatus.InProgress);

            default:
                throw new ArgumentOutOfRangeException(nameof(status), $"The value of the {nameof(status)} is not among the acceptable values.");
            }
        }
        public void NotifyDeliveryCompletion(Guid pDeliveryId, Entities.DeliveryStatus status)
        {
            Order lAffectedOrder = RetrieveDeliveryOrder(pDeliveryId);

            UpdateDeliveryStatus(pDeliveryId, status);
            if (status == Entities.DeliveryStatus.Delivered)
            {
                EmailProvider.SendMessage(new EmailMessage()
                {
                    ToAddress = lAffectedOrder.Customer.Email,
                    Message   = "Our records show that your order" + lAffectedOrder.OrderNumber + " has been delivered. Thank you for shopping at video store"
                });
            }
            if (status == Entities.DeliveryStatus.Failed)
            {
                EmailProvider.SendMessage(new EmailMessage()
                {
                    ToAddress = lAffectedOrder.Customer.Email,
                    Message   = "Our records show that there was a problem" + lAffectedOrder.OrderNumber + " delivering your order. Please contact Video Store"
                });
            }
        }
        public void NotifyDeliveryCompletion(Guid pDeliveryId, Entities.DeliveryStatus status)
        {
            Order lAffectedOrder = RetrieveDeliveryOrder(pDeliveryId);

            UpdateDeliveryStatus(pDeliveryId, status);
            if (status == Entities.DeliveryStatus.Delivered)
            {
                EmailProvider.SendMessage(new EmailMessage()
                {
                    ToAddress = lAffectedOrder.Customer.Email,
                    Message   = "Our records show that your order" + lAffectedOrder.OrderNumber + " has been delivered. Thank you for shopping at video store"
                });
            }
            if (status == Entities.DeliveryStatus.Failed)
            {
                EmailProvider.SendMessage(new EmailMessage()
                {
                    ToAddress = lAffectedOrder.Customer.Email,
                    Message   = "The order " + lAffectedOrder.OrderNumber + " has been canceled, if you have any question please contact with us"
                });
            }
        }
        public void NotifyDeliveryCompletion(Guid pDeliveryId, Entities.DeliveryStatus status)
        {
            Order lAffectedOrder = RetrieveDeliveryOrder(pDeliveryId);

            UpdateDeliveryStatus(pDeliveryId, status);
            if (status == Entities.DeliveryStatus.Delivered)
            {
                try
                {
                    EmailProvider.SendMessage(new EmailMessage()
                    {
                        ToAddress = lAffectedOrder.Customer.Email,
                        Message   = "Our records show that your order" + lAffectedOrder.OrderNumber + " has been delivered. Thank you for shopping at video store"
                    });
                }
                catch (EndpointNotFoundException)
                {
                    Debug.WriteLine("There seems to be a problem with your email process. try turning it on to get the full email message.");
                }
            }
            if (status == Entities.DeliveryStatus.Failed)
            {
                try
                {
                    EmailProvider.SendMessage(new EmailMessage()
                    {
                        ToAddress = lAffectedOrder.Customer.Email,
                        Message   = "Our records show that there was a problem" + lAffectedOrder.OrderNumber + " delivering your order. Please contact Book Store"
                    });
                }
                catch (EndpointNotFoundException)
                {
                    Debug.WriteLine("There seems to be a problem with your email process. try turning it on to get the full email message.");
                }
            }
        }