private static IEnumerable <Expression <Func <SalesOrder, CustomerPickOrderReturn> > > SplitSelectPickOrderDetail()
        {
            var key = InventoryPickOrderProjectors.SelectKey();

            return(new Projectors <SalesOrder, CustomerPickOrderReturn>
            {
                o => new CustomerPickOrderReturn
                {
                    InventoryPickOrderKeyReturn = key.Invoke(o.InventoryShipmentOrder.InventoryPickOrder)
                },
                { SalesOrderItemProjectors.SplitSelect(), p => o => new CustomerPickOrderReturn
                  {
                      PickOrderItems = o.SalesOrderItems.Select(i => p.Invoke(i))
                  } }
            });
        }
        internal static IEnumerable <Expression <Func <SalesOrder, SalesOrderAcknowledgementReturn> > > SplitSelectAcknowledgement()
        {
            var key           = SelectKey();
            var shipment      = ShipmentInformationProjectors.SelectShipmentInformation();
            var pickOrderItem = SalesOrderItemProjectors.SplitSelect();

            return(new Projectors <SalesOrder, SalesOrderAcknowledgementReturn>
            {
                o => new SalesOrderAcknowledgementReturn
                {
                    SalesOrderKeyReturn = key.Invoke(o),
                    MovementNumber = o.InventoryShipmentOrder.MoveNum,

                    PurchaseOrderNumber = o.InventoryShipmentOrder.PurchaseOrderNumber,
                    DateReceived = o.InventoryShipmentOrder.DateReceived,
                    RequestedBy = o.InventoryShipmentOrder.RequestedBy,
                    TakenBy = o.InventoryShipmentOrder.TakenBy,
                    PaymentTerms = o.PaymentTerms,
                    Broker = new[] { o.Broker }.Select(b => b.Name).FirstOrDefault(),
                    SoldToShippingLabel = o.SoldTo,
                    OriginFacility = o.InventoryShipmentOrder.SourceFacility.Name
                },
                o => new SalesOrderAcknowledgementReturn
                {
                    ShipmentInformation = shipment.Invoke(o.InventoryShipmentOrder.ShipmentInformation)
                },
                { pickOrderItem, p => Projector <SalesOrder> .To(o => new SalesOrderAcknowledgementReturn
                    {
                        PickOrderItems = o.SalesOrderItems.Select(i => p.Invoke(i))
                    }) },
                o => new SalesOrderAcknowledgementReturn
                {
                    TotalQuantity = o.InventoryShipmentOrder.InventoryPickOrder.Items.Any() ? o.InventoryShipmentOrder.InventoryPickOrder.Items.Sum(i => i.Quantity) : 0,
                    NetWeight = o.InventoryShipmentOrder.InventoryPickOrder.Items.Any() ? o.InventoryShipmentOrder.InventoryPickOrder.Items.Sum(i => i.Quantity * i.PackagingProduct.Weight) : 0,
                    TotalGrossWeight = o.InventoryShipmentOrder.InventoryPickOrder.Items.Any() ? o.InventoryShipmentOrder.InventoryPickOrder.Items.Sum(i => i.Quantity * (i.PackagingProduct.Weight + i.PackagingProduct.PackagingWeight)) : 0,
                    PalletWeight = o.InventoryShipmentOrder.InventoryPickOrder.Items.Any() ? o.InventoryShipmentOrder.InventoryPickOrder.Items.Sum(i => i.Quantity * (i.PackagingProduct.PalletWeight)) : 0,
                    EstimatedShippingWeight = o.InventoryShipmentOrder.InventoryPickOrder.Items.Any() ? o.InventoryShipmentOrder.InventoryPickOrder.Items.Sum(i => i.Quantity * (i.PackagingProduct.Weight + i.PackagingProduct.PackagingWeight + i.PackagingProduct.PalletWeight)) : 0,
                }
            });
        }