private void ChangeSalesman(OrderDispatchItemSummary selected)
 {
     using (var c = NestedContainer)
     {
         var newSalesman = Using<IChangeSalesmanToDeliveryPopUp>(c).ShowPopUp(selected.OrderRoute);
         if( newSalesman!=null)
         {
             var item= OrderDispatchItemSummaryList.FirstOrDefault(s => s.OrderId == selected.OrderId);
             if (item != null) item.ChangeToSalesman = newSalesman;
         }
     }
 }
        private void LoadOrderPendingDispatch()
        {
            OrderDispatchItemSummaryList.Clear();
            using (var container = NestedContainer)
            {
                DateTime startDate = DateTime.Now.AddDays(-30);
                Guid? routeId = (SelectedRoute != null && SelectedRoute.Id != Guid.Empty) ? SelectedRoute.Id : (Guid?) null;
                Guid? salesmanId = (SelectedSalesman != null && SelectedSalesman.Id != Guid.Empty) ? SelectedSalesman.Id : (Guid?) null;

                var order = Using<IMainOrderRepository>(container).GetPendingDispatch(routeId,salesmanId);
                var costCentreRepository = Using<ICostCentreRepository>(container);
                var priceService = Using<IDiscountProWorkflow>(container);
                
                int sequenceNo = 1;
                foreach (var item in order)
                {
                    var outlet = costCentreRepository.GetById(item.OutletId) as Outlet;
                    var salesman = costCentreRepository.GetById(item.SalesmanId) as DistributorSalesman;
                    var vitem = new OrderDispatchItemSummary
                                    {
                                        GrossAmount =item.GrossAmount.GetTotalGross(),
                                        IsChecked = false,
                                        NetAmount = item.NetAmount.GetTotalGross(),
                                        OrderId = item.OrderId,
                                        OrderReference = item.OrderReference,
                                        OutstandingAmount = item.OutstandingAmount,
                                        PaidAmount = item.PaidAmount,
                                        Required = item.Required,
                                        Salesman = item.Salesman,
                                        Status = item.Status,
                                        TotalVat = item.TotalVat,
                                        SequenceNo = sequenceNo
                                    };
                    if (outlet != null)
                        vitem.OrderRoute = outlet.Route;
                    if (salesman != null) 
                        vitem.ChangeToSalesman = salesman;
                    OrderDispatchItemSummaryList.Add(vitem);
                    sequenceNo++;
                }
            }
        }
        private async Task ProcessDispatch(OrderDispatchItemSummary item)
        {
           await Task.Run(() =>
                              {
                                 using(var c = NestedContainer)
                                 {
                                     var mainOrderRepository = Using<IMainOrderRepository>(c);
                                     var mainOrderworkflow = Using<IOrderWorkflow>(c);
                                     MainOrder order = mainOrderRepository.GetById(item.OrderId);
                                     Config config = Using<IConfigService>(c).Load();
                                     Guid costCentreApplicationid = config.CostCentreApplicationId;
                                     order.ChangeccId(costCentreApplicationid);
                                     if(item.ChangeToSalesman!=null)
                                     {
                                         var envelope = new CommandEnvelope();
                                         envelope.DocumentId = order.Id;
                                         envelope.RecipientCostCentreId = item.ChangeToSalesman.Id;
                                         envelope.DocumentTypeId = (int) DocumentType.Order;
                                         envelope.EnvelopeGeneratedTick = DateTime.Now.Ticks;
                                         envelope.GeneratedByCostCentreId = config.CostCentreId;
                                         envelope.Id = Guid.NewGuid();
                                         envelope.ParentDocumentId = order.Id;
                                         envelope.IsSystemEnvelope = true;
                                         var  commandEnvelopeRouter = Using< IOutgoingCommandEnvelopeRouter >(c);
                                         order.ChangeSaleman(item.ChangeToSalesman);
                                         ReRouteDocumentCommand cmd = new ReRouteDocumentCommand();
                                         cmd.CommandGeneratedByCostCentreApplicationId = config.CostCentreApplicationId;
                                         cmd.CommandId = Guid.NewGuid();
                                         cmd.DocumentId = order.Id;
                                         cmd.ReciepientCostCentreId = item.ChangeToSalesman.Id;
                                         envelope.CommandsList.Add(new CommandEnvelopeItem(1, cmd));
                                         commandEnvelopeRouter.RouteCommandEnvelope(envelope);
                                     }
                                     order.DispatchPendingLineItems();
                                     mainOrderworkflow.Submit(order,config);
                                 }

                              }

                ).ConfigureAwait(false);
            //t.Wait();
           // return t;
        }