public void Creates_new_Inventory_record_as_expected_if_Adjustment_quantity_is_positive_and_Inventory_record_does_not_previously_exist()
            {
                //Arrange
                const int    adjustmentQuantity   = 12;
                const string toteKey              = "";
                var          userToken            = TestUser.UserName;
                var          lotKey               = new LotKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <Lot>(l => l.EmptyLot()));
                var          packagingProductKey  = new PackagingProductKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <PackagingProduct>());
                var          warehouseLocationKey = new LocationKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <Location>());
                var          treatmentKey         = new InventoryTreatmentKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <InventoryTreatment>());
                var          inventoryKey         = new InventoryKey(lotKey, packagingProductKey, warehouseLocationKey, treatmentKey, toteKey);

                //Act
                var result = Service.CreateInventoryAdjustment(new Params
                {
                    UserToken            = userToken,
                    InventoryAdjustments = new List <IInventoryAdjustmentParameters>
                    {
                        new Params.ParamsItem(inventoryKey)
                        {
                            Adjustment = adjustmentQuantity
                        }
                    }
                });

                //Assert
                result.AssertSuccess();
                Assert.AreEqual(adjustmentQuantity, RVCUnitOfWork.InventoryRepository.FindByKey(inventoryKey).Quantity);
            }
Esempio n. 2
0
        public void Returns_non_successful_result_if_any_Quantity_is_less_than_or_equal_to_0()
        {
            //Arrange
            const int quantity = 0;
            var       orderKey = CreateKeyFromOrder(TestHelper.CreateObjectGraphAndInsertIntoDatabase <TOrder>(InitializeOrder, o => o.InventoryPickOrder.Items = new List <InventoryPickOrderItem>
            {
                TestHelper.CreateObjectGraph <InventoryPickOrderItem>(i => i.InventoryPickOrder = null),
                TestHelper.CreateObjectGraph <InventoryPickOrderItem>(i => i.InventoryPickOrder = null),
                TestHelper.CreateObjectGraph <InventoryPickOrderItem>(i => i.InventoryPickOrder = null)
            }));
            var chileProductKey     = new ChileProductKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <ChileProduct>()).KeyValue;
            var packagingProductKey = new PackagingProductKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <PackagingProduct>()).KeyValue;
            var treatmentKey        = new InventoryTreatmentKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <InventoryTreatment>()).KeyValue;

            Assert.IsNotEmpty(RVCUnitOfWork.InventoryPickOrderItemRepository.All());

            //Act
            var result = GetResult(new SetInventoryPickOrderParameters(orderKey.KeyValue)
            {
                UserToken = TestUser.UserName,
                InventoryPickOrderItems = new List <ISetInventoryPickOrderItemParameters>
                {
                    new SetInventoryPickOrderItemParameters
                    {
                        ProductKey   = chileProductKey,
                        PackagingKey = packagingProductKey,
                        TreatmentKey = treatmentKey,
                        Quantity     = quantity
                    }
                }
            });

            //Assert
            result.AssertNotSuccess();
        }
Esempio n. 3
0
        public void Will_set_InventoryPickOrderItems_in_database_as_expected()
        {
            //Arrange
            var order    = TestHelper.CreateObjectGraphAndInsertIntoDatabase <TOrder>(InitializeOrder, o => GetPickOrderFromOrder(o).Items = null);
            var orderKey = CreateKeyFromOrder(order);

            TestHelper.CreateObjectGraphAndInsertIntoDatabase <InventoryPickOrderItem>(i => i.InventoryPickOrder = null, i => ConstrainItemToOrder(i, GetPickOrderFromOrder(order)));
            var       chileProductKey0     = new ChileProductKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <ChileProduct>()).KeyValue;
            var       packagingProductKey0 = new PackagingProductKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <PackagingProduct>()).KeyValue;
            var       treatmentKey0        = new InventoryTreatmentKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <InventoryTreatment>()).KeyValue;
            const int expectedQuantity0    = 10;
            var       chileProductKey1     = new ChileProductKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <ChileProduct>()).KeyValue;
            var       packagingProductKey1 = new PackagingProductKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <PackagingProduct>()).KeyValue;
            var       treatmentKey1        = new InventoryTreatmentKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <InventoryTreatment>()).KeyValue;
            const int expectedQuantity1    = 20;

            //Act
            var testParams = new SetInventoryPickOrderParameters(orderKey.KeyValue)
            {
                UserToken = TestUser.UserName,
                InventoryPickOrderItems = new List <ISetInventoryPickOrderItemParameters>
                {
                    new SetInventoryPickOrderItemParameters
                    {
                        ProductKey   = chileProductKey0,
                        PackagingKey = packagingProductKey0,
                        TreatmentKey = treatmentKey0,
                        Quantity     = expectedQuantity0
                    },
                    new SetInventoryPickOrderItemParameters
                    {
                        ProductKey   = chileProductKey1,
                        PackagingKey = packagingProductKey1,
                        TreatmentKey = treatmentKey1,
                        Quantity     = expectedQuantity1
                    }
                }
            };
            var result = GetResult(testParams);

            //Assert
            result.AssertSuccess();
            var items = RVCUnitOfWork.InventoryPickOrderRepository.Filter(i => true, i => i.Items).Single().Items.ToList();

            Assert.AreEqual(testParams.InventoryPickOrderItems.Count(), items.Count);
            testParams.InventoryPickOrderItems.ForEach(i => items.Single(r =>
                                                                         i.ProductKey == new ProductKey((IProductKey)r).KeyValue&&
                                                                         i.PackagingKey == new PackagingProductKey(r).KeyValue&&
                                                                         i.TreatmentKey == new InventoryTreatmentKey(r).KeyValue&&
                                                                         i.Quantity == r.Quantity));
        }
        internal static Expression <Func <InventoryTransaction, bool> > ByInventoryKey(IInventoryKey inventoryKey)
        {
            var lot       = new LotKey(inventoryKey).FindByPredicate;
            var location  = new LocationKey(inventoryKey).FindByPredicate;
            var packaging = new PackagingProductKey(inventoryKey).FindByPredicate;
            var treatment = new InventoryTreatmentKey(inventoryKey).FindByPredicate;

            return(Projector <InventoryTransaction> .To(i =>
                                                        lot.Invoke(i.SourceLot) &&
                                                        location.Invoke(i.Location) &&
                                                        packaging.Invoke(i.PackagingProduct) &&
                                                        treatment.Invoke(i.Treatment) &&
                                                        i.ToteKey == inventoryKey.InventoryKey_ToteKey));
        }
Esempio n. 5
0
 public CreateTreatmentOrderConductorParameters(TParams parameters) : base(parameters)
 {
     if (Result.Success)
     {
         if (parameters.TreatmentKey != null)
         {
             var treatmentKeyResult = KeyParserHelper.ParseResult <IInventoryTreatmentKey>(parameters.TreatmentKey);
             if (!treatmentKeyResult.Success)
             {
                 Result = treatmentKeyResult;
                 return;
             }
             TreatmentKey = treatmentKeyResult.ResultingObject.ToInventoryTreatmentKey();
         }
     }
 }
        internal void Initialize()
        {
            var pickedItems = PickedItemSelect.GroupBy(i => new
            {
                productKey   = i.LotSelect.ProductKey,
                packagingKey = new PackagingProductKey(i.Item),
                treatmentKey = new InventoryTreatmentKey(i.Item)
            }, i => i.Item.Quantity)
                              .ToDictionary(g => g.Key, g => g.Sum());

            foreach (var item in Items.Cast <PendingPickOrderItem>())
            {
                var productKey   = new ProductKey((IProductKey)item.DataModel);
                var packagingKey = new PackagingProductKey(item.DataModel);
                var treatmentKey = new InventoryTreatmentKey(item.DataModel);

                var noMatch = false;
                while (item.QuantityPicked < item.QuantityOrdered && !noMatch)
                {
                    var key = pickedItems.Keys.FirstOrDefault(k => k.productKey.Equals(productKey) && k.packagingKey.Equals(packagingKey) && k.treatmentKey.Equals(treatmentKey));
                    if (key == null)
                    {
                        noMatch = true;
                    }
                    else
                    {
                        var pick = Math.Min(pickedItems[key], item.QuantityOrdered - item.QuantityPicked);
                        item.QuantityPicked += pick;
                        pickedItems[key]    -= pick;
                        if (pickedItems[key] == 0)
                        {
                            pickedItems.Remove(key);
                        }
                    }
                }
            }
        }