public bool RunOrderIsSelected(ListOrderViewModelItem selectedOrder)
        {
            if (selectedOrder == null)
                return false; ;

            if (!CheckRecipientIsActive(selectedOrder.SelectedRecipient))
            {
                MessageBox.Show(
                    "Recipient is deactivated. Please reassign the order to active recipient then dispatch.",
                    "Distributr: Cannot Dispatch Order to " + selectedOrder.SelectedRecipient.Username,
                    MessageBoxButton.OK);
                return false;
            }
            selectedOrder.Dispatch = true;
            return true;
        }
        public void RunOrderIsUnSelected(ListOrderViewModelItem selectedOrder)
        {

            selectedOrder.Dispatch = false;
        }
        void RunLoadOrderForDispatch()
        {
            using (var container = NestedContainer)
            {
                IOrderRepository _orderService = Using<IOrderRepository>(container);

                orderFailedToLoad = new List<Order>();
                ShowProgressBar = true;
                List<Order> orders = null;
                PageTitle = "Dispatch Pending Orders";
                if (SelectedRoute != null && SelectedRoute.Id != Guid.Empty &&
                    (SelectedSalesman == null || SelectedSalesman.Id == Guid.Empty))
                {
                    //load orders in that route
                    try
                    {
                        orders =
                            LoadPartiallyDispatchedOrders().Union(
                                _orderService.GetByOrderTypeAndDocumentStatus(OrderType.OutletToDistributor,
                                                                              DocumentStatus.OrderPendingDispatch)).
                                Where(
                                    n =>
                                    ((Outlet)
                                     n.IssuedOnBehalfOf).Route.Id ==
                                    SelectedRoute.Id).ToList();
                        //filter deactivated route n/or outlet
                        orders = FilterForDeactivatedOutletsOrRoutesOrSalesmen(orders);
                        orders.ForEach(GetOrderRouteSalesmen);

                        OrderedSalesmen.Clear();
                        Salesmen.Where(n => n.Id != Guid.Empty).OrderBy(n => n.Username).ToList()
                            .ForEach(n =>
                                         {
                                             if (OrderedSalesmen.All(q => q.Id != n.Id))
                                                 OrderedSalesmen.Add(n);
                                         });
                        Salesmen.Where(n => n.Id != Guid.Empty).ToList().ForEach(n => Salesmen.Remove(n));
                        //OrderedSalesmen;
                        OrderedSalesmen.ToList().ForEach(n => Salesmen.Add(n));
                    }
                    catch
                    {
                        MessageBox.Show(
                            "An error was encountered while filtering orders by route.\nOne or more of the orders may have route = null",
                            "Distributr: Fetch Orders For Dispatch", MessageBoxButton.OK);
                    }
                }
                else if (SelectedSalesman != null && SelectedSalesman.Id != Guid.Empty)
                {
                    //LoadRoutesSalesmen();

                    orders =
                        LoadPartiallyDispatchedOrders().Union(
                            _orderService.GetByOrderTypeAndDocumentStatus(OrderType.OutletToDistributor,
                                                                          DocumentStatus.OrderPendingDispatch)).Where(
                                                                              n =>
                                                                              n.DocumentIssuerUser.Id ==
                                                                              SelectedSalesman.Id).ToList();

                    //filter deactivated route n/or outlet
                    orders = FilterForDeactivatedOutletsOrRoutesOrSalesmen(orders);
                }
                else
                {
                    orders =
                        LoadPartiallyDispatchedOrders().Union(
                            _orderService.GetByOrderTypeAndDocumentStatus(OrderType.OutletToDistributor,
                                                                          DocumentStatus.OrderPendingDispatch)).ToList();

                    //filter deactivated route n/or outlet
                    orders = FilterForDeactivatedOutletsOrRoutesOrSalesmen(orders);
                    orders.ForEach(GetOrderRouteSalesmen);

                    OrderedSalesmen.Clear();
                    Salesmen.Where(n => n.Id != Guid.Empty).OrderBy(n => n.Username).ToList()
                        .ForEach(n =>
                                     {
                                         if (OrderedSalesmen.All(q => q.Id != n.Id))
                                             OrderedSalesmen.Add(n);
                                     });
                    Salesmen.Where(n => n.Id != Guid.Empty).ToList().ForEach(n => Salesmen.Remove(n));
                    OrderedSalesmen.ToList().ForEach(n => Salesmen.Add(n));
                }

                try
                {
                    var orderItems = new List<ListOrderViewModelItem>();
                    int seqNo = 1;
                    foreach (var n in orders.OrderByDescending(n => n.DocumentDateIssued))
                    {
                        try
                        {
                            var li = new ListOrderViewModelItem
                                         {
                                             SequenceNo = seqNo,
                                             CreatedBy =
                                                 n.DocumentIssuerUser == null
                                                     ? "---"
                                                     : n.DocumentIssuerUser.Username,
                                             DateRequired = n.DateRequired.ToString("dd-MMM-yyyy hh:mm tt"),
                                             DocumentRef = n.DocumentReference,
                                             TotalGross = n.TotalGross.ToString("#,###,###.00"),
                                             //TotalVat = n.TotalVat.ToString("G"),
                                             TotalNet = n.TotalNet.ToString("#,###,###.00"),
                                             TotalVat = n.TotalVat.ToString("#,###,###.00"),
                                             DocIssuerInfo = GetDocIssuerInfo(n),
                                             OrderId = n.Id,
                                             Status = n.Status.ToString(),
                                             Recipients = Salesmen,
                                             SelectedRecipient = Salesmen.First(s => s.Id == n.DocumentIssuerUser.Id),
                                             HasBackOrder = HasUnprocessedBackOrder(n),
                                             chkDispatchContent =
                                                 n.Status == DocumentStatus.OrderDispatchedToPhone ? "*" : ""
                                         };
                            orderItems.Add(li);
                            seqNo += 1;
                        }
                        catch
                        {
                            orderFailedToLoad.Add(n);
                        }
                    }

                    Orders.Clear();
                    //orderItems.ToList().ForEach(f => Orders.Add(f));
                    foreach (var item in orderItems)
                    {
                        Orders.Add(item);
                    }
                }
                catch
                {
                    MessageBox.Show("An error was encountered while loading orders for dispatch to grid.",
                                    "Distributr: Fetch Orders For Dispatch", MessageBoxButton.OK);
                }
                ShowProgressBar = false;
            }
        }