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(); } } }
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(); } }
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); }
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); }