private void SyncInventoryItem()
        {
            var derivation    = new Derivations.Default.Derivation(this.Strategy.Session);
            var facility      = this.Facility ?? this.Part.DefaultFacility;
            var unitOfMeasure = this.UnitOfMeasure ?? this.Part.UnitOfMeasure;

            if (this.Part.InventoryItemKind.IsSerialised && (this.Quantity < -1 || this.Quantity > 1))
            {
                var message = "Invalid transaction";
                derivation.Validation.AddError(this, this.Meta.SerialisedItem, message);
            }

            if (this.Part.InventoryItemKind.IsSerialised)
            {
                var inventoryItems = this.SerialisedItem.SerialisedInventoryItemsWhereSerialisedItem;
                inventoryItems.Filter.AddEquals(M.InventoryItem.Part, this.Part);
                inventoryItems.Filter.AddEquals(M.InventoryItem.Facility, facility);
                var inventoryItem = inventoryItems.First;

                if (inventoryItem == null)
                {
                    var builder = new SerialisedInventoryItemBuilder(this.Strategy.Session)
                                  .WithFacility(facility)
                                  .WithUnitOfMeasure(unitOfMeasure)
                                  .WithSerialisedItem(this.SerialisedItem)
                                  .WithPart(this.Part)
                                  .WithSerialisedInventoryItemState(this.SerialisedInventoryItemState);

                    if (this.ExistLot)
                    {
                        builder.WithLot(this.Lot);
                    }

                    this.InventoryItem = builder.Build();
                }
            }
            else if (this.Part.InventoryItemKind.IsNonSerialised)
            {
                var inventoryItems = this.Part.InventoryItemsWherePart;
                inventoryItems.Filter.AddEquals(M.InventoryItem.Facility, facility);
                var inventoryItem = inventoryItems.First;

                if (inventoryItem == null)
                {
                    var builder = new NonSerialisedInventoryItemBuilder(this.Strategy.Session)
                                  .WithFacility(facility)
                                  .WithUnitOfMeasure(unitOfMeasure)
                                  .WithPart(this.Part)
                                  .WithNonSerialisedInventoryItemState(this.NonSerialisedInventoryItemState);

                    if (this.ExistLot)
                    {
                        builder.WithLot(this.Lot);
                    }

                    this.InventoryItem = builder.Build();
                }
            }
        }
Esempio n. 2
0
        private void SyncInventoryItem(IDerivation derivation)
        {
            var facility      = this.Facility ?? this.Part.DefaultFacility;
            var unitOfMeasure = this.UnitOfMeasure ?? this.Part.UnitOfMeasure;

            if (this.Part.InventoryItemKind.IsSerialized && this.Quantity <= 0)
            {
                var message = "Invalid transaction";
                derivation.Validation.AddError(this, this.Meta.SerialisedItem, message);
            }

            if (this.Part.InventoryItemKind.IsSerialized && this.Quantity > 0)
            {
                var builder = new SerialisedInventoryItemBuilder(this.strategy.Session)
                              .WithFacility(facility)
                              .WithUnitOfMeasure(unitOfMeasure)
                              .WithSerialisedItem(this.SerialisedItem)
                              .WithPart(this.Part)
                              .WithSerialisedInventoryItemState(this.SerialisedInventoryItemState);

                if (this.ExistLot)
                {
                    builder.WithLot(this.Lot);
                }

                this.InventoryItem = builder.Build();
            }
            else if (this.Part.InventoryItemKind.IsNonSerialized)
            {
                var builder = new NonSerialisedInventoryItemBuilder(this.strategy.Session)
                              .WithFacility(facility)
                              .WithUnitOfMeasure(unitOfMeasure)
                              .WithPart(this.Part)
                              .WithNonSerialisedInventoryItemState(this.NonSerialisedInventoryItemState);

                if (this.ExistLot)
                {
                    builder.WithLot(this.Lot);
                }

                this.InventoryItem = builder.Build();
            }
        }
Esempio n. 3
0
        public void GivenInventoryItem_WhenBuild_ThenPostBuildRelationsMustExist()
        {
            // Arrange
            var available = new SerialisedInventoryItemStates(this.Session).Available;
            var warehouse = new Facilities(this.Session).FindBy(M.Facility.FacilityType, new FacilityTypes(this.Session).Warehouse);
            var kinds     = new InventoryItemKinds(this.Session);

            var serialItem   = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build();
            var finishedGood = CreatePart("1", kinds.Serialised);

            finishedGood.AddSerialisedItem(serialItem);
            var serialInventoryItem = new SerialisedInventoryItemBuilder(this.Session).WithSerialisedItem(serialItem).WithPart(finishedGood).Build();

            // Act
            this.Session.Derive(true);

            // Assert
            Assert.Equal(available, serialInventoryItem.SerialisedInventoryItemState);
            Assert.Equal(warehouse, serialInventoryItem.Facility);
        }
Esempio n. 4
0
        public void GivenInventoryItem_WhenDeriving_ThenRequiredRelationsMustExist()
        {
            // Arrange
            var serialItem = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build();
            var part       = new NonUnifiedPartBuilder(this.Session).WithName("part")
                             .WithInventoryItemKind(new InventoryItemKinds(this.Session).Serialised)
                             .WithProductIdentification(new PartNumberBuilder(this.Session)
                                                        .WithIdentification("P1")
                                                        .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build())
                             .WithSerialisedItem(serialItem)
                             .Build();

            this.Session.Derive(true);
            this.Session.Commit();

            var builder = new SerialisedInventoryItemBuilder(this.Session).WithPart(part);

            builder.Build();

            // Act
            var derivation = this.Session.Derive(false);

            // Assert
            Assert.True(derivation.HasErrors);

            // Re-arrange
            this.Session.Rollback();

            builder.WithSerialisedItem(serialItem);
            builder.Build();

            // Act
            derivation = this.Session.Derive(false);

            // Assert
            Assert.False(derivation.HasErrors);
        }