public ModifyInventoryParameters(ILotKey lotKey, IPackagingProductKey packagingProductKey, ILocationKey locationKey, IInventoryTreatmentKey inventoryTreatmentKey, string toteKey, int adjustQuantity)
        {
            if (lotKey == null)
            {
                throw new ArgumentNullException("lotKey");
            }
            if (packagingProductKey == null)
            {
                throw new ArgumentNullException("packagingProductKey");
            }
            if (locationKey == null)
            {
                throw new ArgumentNullException("locationKey");
            }
            if (inventoryTreatmentKey == null)
            {
                throw new ArgumentNullException("inventoryTreatmentKey");
            }

            InventoryKey          = new InventoryKey(lotKey, packagingProductKey, locationKey, inventoryTreatmentKey, toteKey);
            LotKey                = lotKey.ToLotKey();
            PackagingProductKey   = packagingProductKey.ToPackagingProductKey();
            LocationKey           = locationKey.ToLocationKey();
            InventoryTreatmentKey = inventoryTreatmentKey.ToInventoryTreatmentKey();

            ModifyQuantity = adjustQuantity;
        }
        private static Expression <Func <Inventory, bool> > ValidForTreatmentOrder(IInventoryTreatmentKey treatment, ITreatmentOrderUnitOfWork unitOfWork)
        {
            var lotsAreEqual   = LotProjectors.SelectLotsAreEqual();
            var validTreatment = treatment.ToInventoryTreatmentKey().FindByPredicate
                                 .Or(Data.Models.StaticRecords.StaticInventoryTreatments.NoTreatment.ToInventoryTreatmentKey().FindByPredicate);

            var treatmentOrders = unitOfWork.TreatmentOrderRepository.All();
            var lots            = unitOfWork.LotRepository.All();

            return(i => lots
                   .Where(l => lotsAreEqual.Invoke(i.Lot, l))
                   .SelectMany(l => l.Inventory.Select(n => n.Treatment).Concat(l.PickedInventory.Select(p => p.Treatment)))
                   .Concat(treatmentOrders
                           .Where(o =>
                                  o.InventoryShipmentOrder.OrderStatus != OrderStatus.Void &&
                                  o.InventoryShipmentOrder.PickedInventory.Items.Any(l => lotsAreEqual.Invoke(l.Lot, i.Lot)))
                           .Select(o => o.Treatment))
                   .All(t => validTreatment.Invoke(t)));
        }