/// <summary>
        /// Gets the requested quantity change of line item in shipments
        /// </summary>
        /// <param name="lineItem">The line item.</param>
        /// <returns>The requested quantity change.</returns>
        private decimal GetLineItemRequestedQty(LineItem lineItem)
        {
            decimal lineItemRequestedQty = 0;
            OperationKeySerializer operationKeySerializer = new OperationKeySerializer();
            var operationKeys = new List <string>();
            var orderForm     = lineItem.Parent;

            foreach (Shipment sh in orderForm.Shipments)
            {
                operationKeys.AddRange(sh.GetInventoryOperationKey(orderForm.LineItems.IndexOf(lineItem)));
            }

            InventoryRequestType requestType     = default(InventoryRequestType);
            InventoryChange      inventoryChange = null;

            foreach (string key in operationKeys)
            {
                operationKeySerializer.TryDeserialize(key, out requestType, out inventoryChange);

                switch (requestType)
                {
                case InventoryRequestType.Purchase:
                    lineItemRequestedQty += inventoryChange.PurchaseRequestedChange;
                    break;

                case InventoryRequestType.Backorder:
                    lineItemRequestedQty += inventoryChange.BackorderRequestedChange;
                    break;

                case InventoryRequestType.Preorder:
                    lineItemRequestedQty += inventoryChange.PreorderRequestedChange;
                    break;
                }
            }

            return(lineItemRequestedQty);
        }
 private InventoryRequestItem CreateRequestItem(int index, InventoryRequestType requestType, string entryCode, string warehouseCode, decimal delta)
 {
     //We currently do not use operation key and context
     return(new InventoryRequestItem(index, requestType, entryCode, warehouseCode, delta, string.Empty, null));
 }
 /// <summary>
 /// Get inventory requests for shipment
 /// </summary>
 /// <param name="shipment">The shipment</param>
 /// <param name="itemIndexStart">The start index</param>
 /// <param name="type">The inventory request type</param>
 /// <returns>List inventory request item of a shipment</returns>
 private IEnumerable<InventoryRequestItem> GetRequestInventory(Shipment shipment, int itemIndexStart, InventoryRequestType type)
 {
     return shipment.OperationKeysMap.SelectMany(c => c.Value).Select(key =>
             new InventoryRequestItem()
             {
                 ItemIndex = itemIndexStart++,
                 OperationKey = key,
                 RequestType = type
             });
 }
 private InventoryRequestItem CreateRequestItem(int index, InventoryRequestType requestType, string entryCode, string warehouseCode, decimal delta)
 {
     //We currently do not use operation key and context
     return new InventoryRequestItem(index, requestType, entryCode, warehouseCode, delta, string.Empty, null);
 }
 /// <summary>
 /// Get inventory request for the line item.
 /// </summary>
 /// <param name="shipment">The shipment</param>
 /// <param name="lineItemIndex">The line item index</param>
 /// <param name="itemIndexStart">The start index for request item</param>
 /// <param name="type">The inventory request type</param>
 /// <returns>List inventory request item for a line item</returns>
 private IEnumerable <InventoryRequestItem> GetLineItemRequestInventory(Shipment shipment, int lineItemIndex, int itemIndexStart, InventoryRequestType type)
 {
     return(shipment.OperationKeysMap.Where(c => c.Key == lineItemIndex).SelectMany(c => c.Value).Select(key =>
                                                                                                         new InventoryRequestItem()
     {
         ItemIndex = itemIndexStart++,
         OperationKey = key,
         RequestType = type
     }));
 }