public void GivenSerializedItem_WhenDerived_ThenSuppliedByPartyNameIsSetFromSupplierOffering() { var supplier = this.InternalOrganisation.ActiveSuppliers.First; var unifiedGood = new UnifiedGoodBuilder(this.Session).WithSerialisedDefaults(this.InternalOrganisation).Build(); this.Session.Derive(); new SupplierOfferingBuilder(this.Session) .WithSupplier(supplier) .WithPart(unifiedGood) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithPrice(1) .Build(); this.Session.Derive(); var newItem = new SerialisedItemBuilder(this.Session).WithForSaleDefaults(this.InternalOrganisation).Build(); unifiedGood.AddSerialisedItem(newItem); this.Session.Derive(); Assert.Equal(supplier.PartyName, newItem.SuppliedByPartyName); }
/* * Create PurchaseOrder with both Serialized & NonSerialized PurchaseOrder Items */ public static PurchaseOrder CreatePurchaseOrderWithBothItems(this Organisation @this, Faker faker) { var serializedPart = new UnifiedGoodBuilder(@this.Session()).WithSerialisedDefaults(@this).Build(); var serializedItem = new SerialisedItemBuilder(@this.Session()).WithDefaults(@this).Build(); serializedPart.AddSerialisedItem(serializedItem); var nonSerializedPart = new NonUnifiedPartBuilder(@this.Session()).WithNonSerialisedDefaults(@this).Build(); var purchaseOrder = new PurchaseOrderBuilder(@this.Session()).WithDefaults(@this).Build(); new SupplierOfferingBuilder(@this.Session()) .WithPart(nonSerializedPart) .WithSupplier(purchaseOrder.TakenViaSupplier) .WithFromDate(@this.Session().Now().AddMinutes(-1)) .WithUnitOfMeasure(new UnitsOfMeasure(@this.Session()).Piece) .WithPrice(faker.Random.Decimal(0, 10)) .Build(); var nonSerializedPartItem = new PurchaseOrderItemBuilder(@this.Session()).WithNonSerializedPartDefaults(nonSerializedPart).Build(); var serializedPartItem = new PurchaseOrderItemBuilder(@this.Session()).WithSerializedPartDefaults(serializedPart, serializedItem).Build(); purchaseOrder.AddPurchaseOrderItem(nonSerializedPartItem); purchaseOrder.AddPurchaseOrderItem(serializedPartItem); return(purchaseOrder); }
public static PurchaseOrderItemBuilder WithSerializedProductDefaults(this PurchaseOrderItemBuilder @this, Organisation internalOrganisation) { var faker = @this.Session.Faker(); var serializedProduct = new UnifiedGoodBuilder(@this.Session).WithSerialisedDefaults(internalOrganisation).Build(); var serializedItem = new SerialisedItemBuilder(@this.Session).WithDefaults(internalOrganisation).Build(); var quoteItem = new QuoteItemBuilder(@this.Session).WithSerializedDefaults(internalOrganisation).Build(); var customer = faker.Random.ListItem(internalOrganisation.ActiveCustomers); /*@this.WithDescription(faker.Lorem.Sentences(2)); * @this.WithComment(faker.Lorem.Sentence()); * @this.WithInternalComment(faker.Lorem.Sentence()); * @this.WithInvoiceItemType(new InvoiceItemTypes(@this.Session).ProductItem); * @this.WithProduct(serializedProduct); * @this.WithSerialisedItem(serializedItem); * @this.WithQuantityOrdered(faker.Random.UInt(5, 15)); * @this.WithQuoteItem(quoteItem); * @this.WithAssignedDeliveryDate(@this.Session.Now().AddDays(5)); * @this.WithShippingInstruction(faker.Lorem.Sentences(3)); * @this.WithMessage(faker.Lorem.Sentence()); * @this.WithShipFromAddress(customer.ShippingAddress); * @this.WithAssignedShipToAddress(customer.ShippingAddress); * @this.WithQuantityReturned(faker.Random.Decimal()); * @this.WithAssignedShipToParty(customer);*/ return(@this); }
public void GivenInventoryItemForUnifiedGood_WhenQuantityOnHandIsRaised_ThenSalesOrderItemWithQuantityShortFalledIsUpdated() { var internalOrganisation = new Organisations(this.Session).Extent().First(v => Equals(v.Name, "internalOrganisation")); var unifiedGood = new UnifiedGoodBuilder(this.Session).WithNonSerialisedDefaults(internalOrganisation).Build(); var customer = internalOrganisation.CreateB2BCustomer(this.Session.Faker()); this.Session.Derive(); this.CreateInventoryTransaction(5, new InventoryTransactionReasons(this.Session).Unknown, unifiedGood); this.Session.Derive(); var order = this.CreateSalesOrder(customer, customer, this.Session.Now()); var salesItem1 = this.CreateSalesOrderItem("item1", unifiedGood, 10, 15); order.AddSalesOrderItem(salesItem1); this.Session.Derive(); order.SetReadyForPosting(); this.Session.Derive(true); order.Post(); this.Session.Derive(); order.Accept(); this.Session.Derive(); Assert.Equal(0, salesItem1.ReservedFromNonSerialisedInventoryItem.AvailableToPromise); Assert.Equal(5, salesItem1.ReservedFromNonSerialisedInventoryItem.QuantityOnHand); Assert.Equal(0, salesItem1.QuantityRequestsShipping); Assert.Equal(5, salesItem1.QuantityPendingShipment); Assert.Equal(10, salesItem1.QuantityReserved); Assert.Equal(5, salesItem1.QuantityShortFalled); Assert.Equal(0, salesItem1.ReservedFromNonSerialisedInventoryItem.AvailableToPromise); Assert.Equal(5, salesItem1.ReservedFromNonSerialisedInventoryItem.QuantityOnHand); // Re-arrange this.CreateInventoryTransaction(15, new InventoryTransactionReasons(this.Session).Unknown, unifiedGood); // Act this.Session.Derive(true); Assert.Equal(0, salesItem1.QuantityRequestsShipping); Assert.Equal(10, salesItem1.QuantityPendingShipment); Assert.Equal(10, salesItem1.QuantityReserved); Assert.Equal(0, salesItem1.QuantityShortFalled); Assert.Equal(10, salesItem1.ReservedFromNonSerialisedInventoryItem.AvailableToPromise); Assert.Equal(20, salesItem1.ReservedFromNonSerialisedInventoryItem.QuantityOnHand); }
public void GivenOrderItemForSerialisedPart_WhenDerived_ThenOrderQuantityMustBeEqualTo1() { this.InstantiateObjects(this.Session); var serialisedPart = new UnifiedGoodBuilder(this.Session).WithSerialisedDefaults(this.InternalOrganisation).Build(); this.Session.Derive(); this.Session.Commit(); var item = new PurchaseOrderItemBuilder(this.Session) .WithPart(serialisedPart) .WithSerialNumber("1") .WithQuantityOrdered(0) .WithAssignedUnitPrice(1) .Build(); this.order.AddPurchaseOrderItem(item); var expectedErrorMessage = ErrorMessages.InvalidQuantity; var errors = new List <IDerivationError>(this.Session.Derive(false).Errors); Assert.Single(errors.FindAll(e => e.Message.Equals(expectedErrorMessage))); this.Session.Rollback(); item = new PurchaseOrderItemBuilder(this.Session) .WithPart(serialisedPart) .WithSerialNumber("1") .WithQuantityOrdered(2) .WithAssignedUnitPrice(1) .Build(); this.order.AddPurchaseOrderItem(item); errors = new List <IDerivationError>(this.Session.Derive(false).Errors); Assert.Single(errors.FindAll(e => e.Message.Equals(expectedErrorMessage))); this.Session.Rollback(); item = new PurchaseOrderItemBuilder(this.Session) .WithPart(serialisedPart) .WithAssignedUnitPrice(1) .WithQuantityOrdered(1) .WithSerialNumber("1") .Build(); this.order.AddPurchaseOrderItem(item); Assert.False(this.Session.Derive(false).HasErrors); }
public static RequestItemBuilder WithNonSerializedDefaults(this RequestItemBuilder @this, Organisation internalOrganisation) { var faker = @this.Session.Faker(); var finishedGood = new UnifiedGoodBuilder(@this.Session).WithNonSerialisedDefaults(internalOrganisation).Build(); @this.WithComment(faker.Lorem.Sentence()); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithMaximumAllowedPrice(faker.Random.UInt()); @this.WithQuantity(faker.Random.UShort()); @this.WithProduct(finishedGood); @this.WithRequiredByDate(@this.Session.Now().AddDays(7)); return(@this); }
/* * Create PurchaseOrder with Serialized PurchaseOrderItem */ public static PurchaseOrder CreatePurchaseOrderWithSerializedItem(this Organisation @this) { var serializedPart = new UnifiedGoodBuilder(@this.Session()).WithSerialisedDefaults(@this).Build(); var serializedItem = new SerialisedItemBuilder(@this.Session()).WithDefaults(@this).Build(); serializedPart.AddSerialisedItem(serializedItem); var purchaseOrder = new PurchaseOrderBuilder(@this.Session()).WithDefaults(@this).Build(); var item = new PurchaseOrderItemBuilder(@this.Session()).WithSerializedPartDefaults(serializedPart, serializedItem).Build(); purchaseOrder.AddPurchaseOrderItem(item); return(purchaseOrder); }
public void GivenSerializedItem_WhenAddingWithSameSerialNumber_ThenError() { var good = new UnifiedGoodBuilder(this.Session).WithSerialisedDefaults(this.InternalOrganisation).Build(); var serialNumber = good.SerialisedItems.First.SerialNumber; var newItem = new SerialisedItemBuilder(this.Session).WithSerialNumber(serialNumber).Build(); good.AddSerialisedItem(newItem); var expectedErrorMessage = ErrorMessages.SameSerialNumber; var errors = new List <string>(this.Session.Derive(false).Errors.Select(v => v.Message)); Assert.Contains(expectedErrorMessage, errors); }
public static UnifiedGood CreateUnifiedWithGoodInventoryAvailableForSale(this Organisation @this, Faker faker) { var unifiedGood = new UnifiedGoodBuilder(@this.Session()).WithSerialisedDefaults(@this).Build(); var serialisedItem = new SerialisedItemBuilder(@this.Session()).WithForSaleDefaults(@this).Build(); unifiedGood.AddSerialisedItem(serialisedItem); new InventoryItemTransactionBuilder(@this.Session()) .WithSerialisedItem(serialisedItem) .WithFacility(@this.FacilitiesWhereOwner.First) .WithQuantity(1) .WithReason(new InventoryTransactionReasons(@this.Session()).IncomingShipment) .WithSerialisedInventoryItemState(new SerialisedInventoryItemStates(@this.Session()).Good) .Build(); return(unifiedGood); }
public static QuoteItemBuilder WithSerializedDefaults(this QuoteItemBuilder @this, Organisation internalOrganisation) { var faker = @this.Session.Faker(); var serializedProduct = new UnifiedGoodBuilder(@this.Session).WithSerialisedDefaults(internalOrganisation).Build(); @this.WithDetails(faker.Lorem.Sentence()); @this.WithComment(faker.Lorem.Sentence()); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithEstimatedDeliveryDate(@this.Session.Now().AddDays(5)); @this.WithInvoiceItemType(new InvoiceItemTypes(@this.Session).ProductItem); @this.WithProduct(serializedProduct); @this.WithSerialisedItem(serializedProduct.SerialisedItems.First); @this.WithUnitOfMeasure(new UnitsOfMeasure(@this.Session).Piece); @this.WithAssignedUnitPrice(faker.Random.UInt()); @this.WithQuantity(1); return(@this); }
public static UnifiedGoodBuilder WithSerialisedDefaults(this UnifiedGoodBuilder @this, Organisation internalOrganisation) { var faker = @this.Session.Faker(); var dutchLocale = new Locales(@this.Session).DutchNetherlands; var nonSerialisedProductType = new ProductTypes(@this.Session).FindBy(M.ProductType.Name, "nonSerialisedProductType"); if (nonSerialisedProductType == null) { var size = new SerialisedItemCharacteristicTypeBuilder(@this.Session) .WithName("Size") .WithLocalisedName(new LocalisedTextBuilder(@this.Session).WithText("Afmeting").WithLocale(dutchLocale).Build()) .Build(); var weight = new SerialisedItemCharacteristicTypeBuilder(@this.Session) .WithName("Weight") .WithLocalisedName(new LocalisedTextBuilder(@this.Session).WithText("Gewicht").WithLocale(dutchLocale).Build()) .WithUnitOfMeasure(new UnitsOfMeasure(@this.Session).Kilogram) .Build(); nonSerialisedProductType = new ProductTypeBuilder(@this.Session) .WithName("serialisedProductType") .WithSerialisedItemCharacteristicType(size) .WithSerialisedItemCharacteristicType(weight) .Build(); } var replacementValue = Convert.ToDecimal(faker.Commerce.Price()); var lifetime = faker.Random.Int(0, 20); @this.WithName(faker.Commerce.ProductName()); @this.WithDescription(faker.Lorem.Sentence()); @this.WithComment(faker.Lorem.Sentence()); @this.WithLifeTime(lifetime); @this.WithDepreciationYears(faker.Random.Int(0, lifetime)); @this.WithReplacementValue(replacementValue); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithInventoryItemKind(new InventoryItemKinds(@this.Session).Serialised); @this.WithKeywords(faker.Lorem.Sentence()); @this.WithUnitOfMeasure(new UnitsOfMeasure(@this.Session).Piece); @this.WithPrimaryPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 200, height: 56)).Build()); @this.WithPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 200, height: 56)).Build()); @this.WithPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 200, height: 56)).Build()); @this.WithPublicElectronicDocument(new MediaBuilder(@this.Session).WithInFileName("doc1.en.pdf").WithInData(faker.Random.Bytes(1000)).Build()); @this.WithPrivateElectronicDocument(new MediaBuilder(@this.Session).WithInFileName("doc2.en.pdf").WithInData(faker.Random.Bytes(1000)).Build()); @this.WithProductIdentification(new SkuIdentificationBuilder(@this.Session).WithDefaults().Build()); @this.WithProductIdentification(new EanIdentificationBuilder(@this.Session).WithDefaults().Build()); @this.WithProductIdentification(new ManufacturerIdentificationBuilder(@this.Session).WithDefaults().Build()); @this.WithSerialisedItem(new SerialisedItemBuilder(@this.Session).WithDefaults(internalOrganisation).Build()); @this.WithVatRate(faker.Random.ListItem(@this.Session.Extent <VatRate>())); foreach (Locale additionalLocale in @this.Session.GetSingleton().AdditionalLocales) { @this.WithLocalisedName(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Word()).WithLocale(additionalLocale).Build()); @this.WithLocalisedDescription(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Sentence()).WithLocale(additionalLocale).Build()); @this.WithLocalisedComment(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Sentence()).WithLocale(additionalLocale).Build()); @this.WithLocalisedKeyword(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Sentence()).WithLocale(additionalLocale).Build()); var localisedDocument = new MediaBuilder(@this.Session).WithInFileName($"doc1.{additionalLocale.Country.IsoCode}.pdf").WithInData(faker.Random.Bytes(1000)).Build(); @this.WithPublicLocalisedElectronicDocument(new LocalisedMediaBuilder(@this.Session).WithMedia(localisedDocument).WithLocale(additionalLocale).Build()); @this.WithPrivateLocalisedElectronicDocument(new LocalisedMediaBuilder(@this.Session).WithMedia(localisedDocument).WithLocale(additionalLocale).Build()); } return(@this); }
public void Execute() { var singleton = this.Session.GetSingleton(); var dutchLocale = new Locales(this.Session).DutchNetherlands; singleton.AddAdditionalLocale(dutchLocale); var euro = new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR"); var be = new Countries(this.Session).FindBy(M.Country.IsoCode, "BE"); var us = new Countries(this.Session).FindBy(M.Country.IsoCode, "US"); var email2 = new EmailAddressBuilder(this.Session) .WithElectronicAddressString("*****@*****.**") .Build(); var allorsLogo = this.DataPath + @"\www\admin\images\logo.png"; var serialisedItemSoldOns = new SerialisedItemSoldOn[] { new SerialisedItemSoldOns(this.Session).SalesInvoiceSend, new SerialisedItemSoldOns(this.Session).PurchaseInvoiceConfirm }; var allors = Organisations.CreateInternalOrganisation( session: this.Session, name: "Allors BVBA", address: "Kleine Nieuwedijkstraat 4", postalCode: "2800", locality: "Mechelen", country: be, phone1CountryCode: "+32", phone1: "2 335 2335", phone1Purpose: new ContactMechanismPurposes(this.Session).GeneralPhoneNumber, phone2CountryCode: string.Empty, phone2: string.Empty, phone2Purpose: null, emailAddress: "*****@*****.**", websiteAddress: "www.allors.com", taxNumber: "BE 0476967014", bankName: "ING", facilityName: "Allors warehouse 1", bic: "BBRUBEBB", iban: "BE89 3200 1467 7685", currency: euro, logo: allorsLogo, storeName: "Allors Store", billingProcess: new BillingProcesses(this.Session).BillingForOrderItems, outgoingShipmentNumberPrefix: "a-CS", salesInvoiceNumberPrefix: "a-SI", salesOrderNumberPrefix: "a-SO", purchaseOrderNumberPrefix: "a-PO", purchaseInvoiceNumberPrefix: "a-PI", requestNumberPrefix: "a-RFQ", quoteNumberPrefix: "a-Q", productNumberPrefix: "A-", workEffortPrefix: "a-WO-", creditNoteNumberPrefix: "a-CN-", isImmediatelyPicked: true, autoGenerateShipmentPackage: true, isImmediatelyPacked: true, isAutomaticallyShipped: true, autoGenerateCustomerShipment: true, isAutomaticallyReceived: false, autoGeneratePurchaseShipment: false, useCreditNoteSequence: true, requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, purchaseOrderCounterValue: 1, purchaseInvoiceCounterValue: 1, invoiceCounterValue: 1, purchaseOrderNeedsApproval: true, purchaseOrderApprovalThresholdLevel1: 1000M, purchaseOrderApprovalThresholdLevel2: 5000M, serialisedItemSoldOns: serialisedItemSoldOns, collectiveWorkEffortInvoice: true); var dipu = Organisations.CreateInternalOrganisation( session: this.Session, name: "Dipu BVBA", address: "Kleine Nieuwedijkstraat 2", postalCode: "2800", locality: "Mechelen", country: be, phone1CountryCode: "+32", phone1: "2 15 49 49 49", phone1Purpose: new ContactMechanismPurposes(this.Session).GeneralPhoneNumber, phone2CountryCode: string.Empty, phone2: string.Empty, phone2Purpose: null, emailAddress: "*****@*****.**", websiteAddress: "www.dipu.com", taxNumber: "BE 0445366489", bankName: "ING", facilityName: "Dipu Facility", bic: "BBRUBEBB", iban: "BE23 3300 6167 6391", currency: euro, logo: allorsLogo, storeName: "Dipu Store", billingProcess: new BillingProcesses(this.Session).BillingForOrderItems, outgoingShipmentNumberPrefix: "d-CS", salesInvoiceNumberPrefix: "d-SI", salesOrderNumberPrefix: "d-SO", purchaseOrderNumberPrefix: "d-PO", purchaseInvoiceNumberPrefix: "d-PI", requestNumberPrefix: "d-RFQ", quoteNumberPrefix: "d-Q", productNumberPrefix: "D-", workEffortPrefix: "d-WO-", creditNoteNumberPrefix: "d-CN-", isImmediatelyPicked: true, autoGenerateShipmentPackage: true, isImmediatelyPacked: true, isAutomaticallyShipped: true, autoGenerateCustomerShipment: true, isAutomaticallyReceived: false, autoGeneratePurchaseShipment: false, useCreditNoteSequence: true, requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, purchaseOrderCounterValue: 1, purchaseInvoiceCounterValue: 1, invoiceCounterValue: 1, purchaseOrderNeedsApproval: false, purchaseOrderApprovalThresholdLevel1: null, purchaseOrderApprovalThresholdLevel2: null, serialisedItemSoldOns: serialisedItemSoldOns, collectiveWorkEffortInvoice: true); singleton.Settings.DefaultFacility = allors.FacilitiesWhereOwner.First; var faker = this.Session.Faker(); allors.CreateEmployee("letmein", faker); allors.CreateAdministrator("letmein", faker); var allorsB2BCustomer = allors.CreateB2BCustomer(this.Session.Faker()); var allorsB2CCustomer = allors.CreateB2CCustomer(this.Session.Faker()); allors.CreateSupplier(this.Session.Faker()); allors.CreateSubContractor(this.Session.Faker()); new CustomerRelationshipBuilder(this.Session) .WithCustomer(allorsB2BCustomer) .WithInternalOrganisation(dipu) .WithFromDate(this.Session.Now()) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(allorsB2CCustomer) .WithInternalOrganisation(dipu) .WithFromDate(this.Session.Now()) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(dipu) .WithInternalOrganisation(allors) .WithFromDate(this.Session.Now()) .Build(); dipu.CreateEmployee("letmein", faker); dipu.CreateAdministrator("letmein", faker); var dipuB2BCustomer = dipu.CreateB2BCustomer(this.Session.Faker()); var dipuB2CCustomer = dipu.CreateB2CCustomer(this.Session.Faker()); dipu.CreateSupplier(this.Session.Faker()); dipu.CreateSubContractor(this.Session.Faker()); new CustomerRelationshipBuilder(this.Session) .WithCustomer(dipuB2BCustomer) .WithInternalOrganisation(allors) .WithFromDate(this.Session.Now()) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(dipuB2CCustomer) .WithInternalOrganisation(allors) .WithFromDate(this.Session.Now()) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(allors) .WithInternalOrganisation(dipu) .WithFromDate(this.Session.Now()) .Build(); this.Session.Derive(); var facility = new FacilityBuilder(this.Session) .WithName("Allors warehouse 2") .WithFacilityType(new FacilityTypes(this.Session).Warehouse) .WithOwner(allors) .Build(); var store = new StoreBuilder(this.Session).WithName("store") .WithInternalOrganisation(allors) .WithDefaultFacility(facility) .WithDefaultShipmentMethod(new ShipmentMethods(this.Session).Ground) .WithDefaultCarrier(new Carriers(this.Session).Fedex) .Build(); var productType = new ProductTypeBuilder(this.Session) .WithName($"Gizmo Serialised") .WithSerialisedItemCharacteristicType(new SerialisedItemCharacteristicTypeBuilder(this.Session) .WithName("Size") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Afmeting").WithLocale(dutchLocale).Build()) .Build()) .WithSerialisedItemCharacteristicType(new SerialisedItemCharacteristicTypeBuilder(this.Session) .WithName("Weight") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Gewicht").WithLocale(dutchLocale).Build()) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Kilogram) .Build()) .Build(); var vatRate = new VatRateBuilder(this.Session).WithRate(21).Build(); var brand = new BrandBuilder(this.Session).WithDefaults().Build(); var good_1 = new UnifiedGoodBuilder(this.Session).WithNonSerialisedDefaults(allors).Build(); this.Session.Derive(); new InventoryItemTransactionBuilder(this.Session) .WithPart(good_1) .WithQuantity(100) .WithReason(new InventoryTransactionReasons(this.Session).Unknown) .Build(); var good_2 = new NonUnifiedGoodBuilder(this.Session) .WithSerialisedPartDefaults(allors) .Build(); var serialisedItem1 = new SerialisedItemBuilder(this.Session).WithDefaults(allors).Build(); good_2.Part.AddSerialisedItem(serialisedItem1); this.Session.Derive(); new SerialisedInventoryItemBuilder(this.Session) .WithPart(good_2.Part) .WithSerialisedItem(serialisedItem1) .WithFacility(allors.StoresWhereInternalOrganisation.First.DefaultFacility) .Build(); var good_3 = new NonUnifiedGoodBuilder(this.Session) .WithNonSerialisedPartDefaults(allors) .Build(); var good_4 = new UnifiedGoodBuilder(this.Session).WithSerialisedDefaults(allors).Build(); var productCategory_1 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Best selling gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Meest verkochte gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory_2 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Big Gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Grote Gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory_3 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Small gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Kleine gizmo's").WithLocale(dutchLocale).Build()) .WithProduct(good_1) .WithProduct(good_2) .WithProduct(good_3) .WithProduct(good_4) .Build(); new CatalogueBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("New gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Nieuwe gizmo's").WithLocale(dutchLocale).Build()) .WithDescription("Latest in the world of Gizmo's") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Laatste in de wereld van Gizmo's").WithLocale(dutchLocale).Build()) .WithProductCategory(productCategory_1) .Build(); this.Session.Derive(); var administrator = (Person) new UserGroups(this.Session).Administrators.Members.First; new FaceToFaceCommunicationBuilder(this.Session) .WithDescription($"Meeting") .WithSubject($"meeting") .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithFromParty(allors.ActiveEmployees.First) .WithToParty(allors.ActiveCustomers.First) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new EmailCommunicationBuilder(this.Session) .WithDescription($"Email") .WithSubject($"email") .WithFromParty(allors.ActiveEmployees.First) .WithToParty(allors.ActiveCustomers.First) .WithFromEmail(allors.ActiveEmployees.First.GeneralEmail) .WithToEmail(allors.ActiveCustomers.First.GeneralEmail) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new LetterCorrespondenceBuilder(this.Session) .WithDescription($"Letter") .WithSubject($"letter") .WithFromParty(administrator) .WithToParty(allors.ActiveCustomers.First) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new PhoneCommunicationBuilder(this.Session) .WithDescription($"Phone") .WithSubject($"phone") .WithFromParty(administrator) .WithToParty(allors.ActiveCustomers.First) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new SalesOrderBuilder(this.Session).WithOrganisationInternalDefaults(allors).Build(); new SalesOrderBuilder(this.Session).WithOrganisationExternalDefaults(allors).Build(); new SalesOrderBuilder(this.Session).WithPersonInternalDefaults(allors).Build(); new SalesOrderBuilder(this.Session).WithPersonExternalDefaults(allors).Build(); new SalesInvoiceBuilder(this.Session).WithSalesExternalB2BInvoiceDefaults(allors).Build(); new SupplierOfferingBuilder(this.Session) .WithPart(good_1) .WithSupplier(allors.ActiveSuppliers.First) .WithFromDate(this.Session.Now().AddMinutes(-1)) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithPrice(7) .WithCurrency(euro) .Build(); var purchaseInvoiceItem_1 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("first item") .WithPart(good_1) .WithAssignedUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var purchaseInvoiceItem_2 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("second item") .WithAssignedUnitPrice(2000) .WithQuantity(2) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var purchaseInvoiceItem_3 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("Service") .WithAssignedUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).Service) .Build(); var purchaseInvoice = new PurchaseInvoiceBuilder(this.Session) .WithBilledTo(allors) .WithInvoiceNumber("1") .WithBilledFrom(allors.ActiveSuppliers.First) .WithPurchaseInvoiceItem(purchaseInvoiceItem_1) .WithPurchaseInvoiceItem(purchaseInvoiceItem_2) .WithPurchaseInvoiceItem(purchaseInvoiceItem_3) .WithCustomerReference("a reference number") .WithDescription("Purchase of 1 used Aircraft Towbar") .WithPurchaseInvoiceType(new PurchaseInvoiceTypes(this.Session).PurchaseInvoice) .WithVatRegime(new VatRegimes(this.Session).Assessable21) .Build(); var purchaseOrderItem_1 = new PurchaseOrderItemBuilder(this.Session) .WithDescription("first purchase order item") .WithPart(good_1) .WithQuantityOrdered(1) .Build(); var purchaseOrder = new PurchaseOrderBuilder(this.Session) .WithOrderedBy(allors) .WithTakenViaSupplier(allors.ActiveSuppliers.First) .WithPurchaseOrderItem(purchaseOrderItem_1) .WithCustomerReference("reference 123") .WithStoredInFacility(facility) .Build(); var workTask = new WorkTaskBuilder(this.Session) .WithTakenBy(allors) .WithCustomer(allors.ActiveCustomers.First) .WithName("maintenance") .Build(); new PositionTypeBuilder(this.Session) .WithTitle("Mechanic") .WithUniqueId(new Guid("E62A8F4B-8045-472E-AB18-E39C51A02696")) .Build(); new PositionTypeRateBuilder(this.Session) .WithRate(100) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFrequency(new TimeFrequencies(this.Session).Hour) .Build(); this.Session.Derive(); // Serialized RFQ with Serialized Unified-Good var serializedRFQ = new RequestForQuoteBuilder(this.Session).WithSerializedDefaults(allors).Build(); // NonSerialized RFQ with NonSerialized Unified-Good var nonSerializedRFQ = new RequestForQuoteBuilder(this.Session).WithNonSerializedDefaults(allors).Build(); var quote = new ProductQuoteBuilder(this.Session) .WithIssuer(allors) .WithDescription("quote") .WithReceiver(allors.ActiveCustomers.First) .WithFullfillContactMechanism(allors.ActiveCustomers.First.GeneralCorrespondence) .Build(); this.Session.Derive(); var quoteItem = new QuoteItemBuilder(this.Session) .WithProduct(new Goods(this.Session).Extent().First) .WithQuantity(1) .WithAssignedUnitPrice(10) .Build(); quote.AddQuoteItem(quoteItem); this.Session.Derive(); var salesOrder = new SalesOrderBuilder(this.Session) .WithTakenBy(allors) .WithShipToCustomer(allors.ActiveCustomers.First) .Build(); this.Session.Derive(); var salesOrderItem = new SalesOrderItemBuilder(this.Session) .WithProduct(good_1) .WithQuantityOrdered(1) .WithAssignedUnitPrice(10) .Build(); salesOrder.AddSalesOrderItem(salesOrderItem); this.Session.Derive(); new CustomerShipmentBuilder(this.Session).WithDefaults(allors).Build(); this.Session.Derive(); new PurchaseShipmentBuilder(this.Session).WithDefaults(allors).Build(); this.Session.Derive(); }
public void GivenNonSerialisedUnifiedGood_WhenPurchased_ThenAverageCostIsCalculated() { this.InternalOrganisation.IsAutomaticallyReceived = true; var secondFacility = new FacilityBuilder(this.Session) .WithFacilityType(new FacilityTypes(this.Session).Warehouse) .WithName("second facility") .WithOwner(this.InternalOrganisation) .Build(); var supplier = this.InternalOrganisation.ActiveSuppliers.First; var customer = this.InternalOrganisation.ActiveCustomers.First; var part = new UnifiedGoodBuilder(this.Session).WithNonSerialisedDefaults(this.InternalOrganisation).Build(); this.Session.Derive(); var purchaseOrder1 = new PurchaseOrderBuilder(this.Session) .WithTakenViaSupplier(supplier) .WithDeliveryDate(this.Session.Now()) .Build(); this.Session.Derive(); // Beginning inventory: 150 items at 8 euro received in 2 facilities var purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(100).WithAssignedUnitPrice(8M).Build(); purchaseOrder1.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder1.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder1.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); var purchaseOrder2 = new PurchaseOrderBuilder(this.Session) .WithTakenViaSupplier(supplier) .WithFacility(secondFacility) .WithDeliveryDate(this.Session.Now()) .Build(); this.Session.Derive(); // Beginning inventory: 150 items at 8 euro purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(50).WithAssignedUnitPrice(8M).Build(); purchaseOrder2.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder2.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder2.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); Assert.Equal(150, part.QuantityOnHand); Assert.Equal(8, part.PartWeightedAverage.AverageCost); purchaseOrder1.Revise(); this.Session.Derive(); // Purchase: 75 items at 8.1 euro purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(75).WithAssignedUnitPrice(8.1M).Build(); purchaseOrder1.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder1.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder1.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); Assert.Equal(225, part.QuantityOnHand); Assert.Equal(8.03M, part.PartWeightedAverage.AverageCost); var salesOrder = new SalesOrderBuilder(this.Session) .WithTakenBy(this.InternalOrganisation) .WithShipToCustomer(customer) .Build(); this.Session.Derive(); // Sell 50 items for 20 euro var salesItem1 = new SalesOrderItemBuilder(this.Session).WithProduct(part).WithQuantityOrdered(50).WithAssignedUnitPrice(20M).Build(); salesOrder.AddSalesOrderItem(salesItem1); this.Session.Derive(); salesOrder.SetReadyForPosting(); this.Session.Derive(); salesOrder.Post(); this.Session.Derive(); salesOrder.Accept(); this.Session.Derive(); salesOrder.Ship(); this.Session.Derive(); var customerShipment = salesItem1.OrderShipmentsWhereOrderItem.First.ShipmentItem.ShipmentWhereShipmentItem as CustomerShipment; customerShipment.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); var package = new ShipmentPackageBuilder(this.Session).Build(); customerShipment.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in customerShipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); customerShipment.Ship(); this.Session.Derive(); Assert.Equal(175, part.QuantityOnHand); Assert.Equal(8.03M, part.PartWeightedAverage.AverageCost); Assert.Equal(401.5M, salesItem1.CostOfGoodsSold); // Again Sell 50 items for 20 euro salesOrder.Revise(); this.Session.Derive(); var salesItem2 = new SalesOrderItemBuilder(this.Session).WithProduct(part).WithQuantityOrdered(50).WithAssignedUnitPrice(20M).Build(); salesOrder.AddSalesOrderItem(salesItem2); this.Session.Derive(); salesOrder.SetReadyForPosting(); this.Session.Derive(); salesOrder.Post(); this.Session.Derive(); salesOrder.Accept(); this.Session.Derive(); salesOrder.Ship(); this.Session.Derive(); var customerShipment2 = salesItem2.OrderShipmentsWhereOrderItem.First.ShipmentItem.ShipmentWhereShipmentItem as CustomerShipment; customerShipment2.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); var package2 = new ShipmentPackageBuilder(this.Session).Build(); customerShipment2.AddShipmentPackage(package2); foreach (ShipmentItem shipmentItem in customerShipment2.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); customerShipment2.Ship(); this.Session.Derive(); Assert.Equal(125, part.QuantityOnHand); Assert.Equal(8.03M, part.PartWeightedAverage.AverageCost); Assert.Equal(401.5M, salesItem1.CostOfGoodsSold); // Purchase: 50 items at 8.25 euro purchaseOrder1.Revise(); this.Session.Derive(); purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(50).WithAssignedUnitPrice(8.25M).Build(); purchaseOrder1.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder1.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder1.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); Assert.Equal(175, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); // Use 65 items in a workorder var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(this.InternalOrganisation).Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(65) .Build(); this.Session.Derive(true); Assert.Equal(110, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); Assert.Equal(525.85M, inventoryAssignment.CostOfGoodsSold); // Cancel workeffort inventory assignment inventoryAssignment.Delete(); this.Session.Derive(true); Assert.Equal(175, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); // Use 35 items in a workorder inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(35) .Build(); this.Session.Derive(true); this.Session.Derive(true); Assert.Equal(140, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); Assert.Equal(283.15M, inventoryAssignment.CostOfGoodsSold); // Use 30 items in a workorder form second facility inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First(v => v.Facility.Equals(secondFacility))) .WithQuantity(30) .Build(); this.Session.Derive(true); Assert.Equal(110, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); Assert.Equal(242.7M, inventoryAssignment.CostOfGoodsSold); // Purchase: 90 items at 8.35 euro var purchaseOrder3 = new PurchaseOrderBuilder(this.Session) .WithTakenViaSupplier(supplier) .WithDeliveryDate(this.Session.Now()) .Build(); this.Session.Derive(); purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(90).WithAssignedUnitPrice(8.35M).Build(); purchaseOrder3.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder3.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder3.Send(); this.Session.Derive(); purchaseOrder3.QuickReceive(); this.Session.Derive(); // Purchase: 50 items at 8.45 euro var purchaseOrder4 = new PurchaseOrderBuilder(this.Session) .WithTakenViaSupplier(supplier) .WithDeliveryDate(this.Session.Now()) .Build(); this.Session.Derive(); purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(50).WithAssignedUnitPrice(8.45M).Build(); purchaseOrder4.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder4.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder4.Send(); this.Session.Derive(); purchaseOrder4.QuickReceive(); this.Session.Derive(); Assert.Equal(250, part.QuantityOnHand); Assert.Equal(8.26M, part.PartWeightedAverage.AverageCost); // Ship 10 items to customer (without sales order) var outgoingShipment = new CustomerShipmentBuilder(this.Session) .WithShipToParty(customer) .WithShipToAddress(customer.ShippingAddress) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .Build(); this.Session.Derive(true); var outgoingItem = new ShipmentItemBuilder(this.Session).WithGood(part).WithQuantity(10).Build(); outgoingShipment.AddShipmentItem(outgoingItem); this.Session.Derive(true); outgoingShipment.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); package = new ShipmentPackageBuilder(this.Session).Build(); customerShipment2.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in outgoingShipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); outgoingShipment.Ship(); this.Session.Derive(); Assert.Equal(240, part.QuantityOnHand); Assert.Equal(8.26M, part.PartWeightedAverage.AverageCost); // Receive 10 items at 8.55 from supplier (without purchase order) var incomingShipment = new PurchaseShipmentBuilder(this.Session) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .WithShipFromParty(supplier) .Build(); this.Session.Derive(); var incomingItem = new ShipmentItemBuilder(this.Session).WithPart(part).WithQuantity(10).WithUnitPurchasePrice(8.55M).Build(); incomingShipment.AddShipmentItem(incomingItem); this.Session.Derive(); incomingShipment.Receive(); this.Session.Derive(); Assert.Equal(250, part.QuantityOnHand); Assert.Equal(8.27M, part.PartWeightedAverage.AverageCost); // Receive 100 items at 7.9 from supplier (without purchase order) incomingShipment = new PurchaseShipmentBuilder(this.Session) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .WithShipFromParty(supplier) .Build(); this.Session.Derive(); incomingItem = new ShipmentItemBuilder(this.Session).WithPart(part).WithQuantity(100).WithUnitPurchasePrice(7.9M).Build(); incomingShipment.AddShipmentItem(incomingItem); this.Session.Derive(); incomingShipment.Receive(); this.Session.Derive(); Assert.Equal(350, part.QuantityOnHand); Assert.Equal(8.17M, part.PartWeightedAverage.AverageCost); // Ship all items to customer (without sales order) outgoingShipment = new CustomerShipmentBuilder(this.Session) .WithShipToParty(customer) .WithShipFromFacility(part.DefaultFacility) .WithShipToAddress(customer.ShippingAddress) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .Build(); this.Session.Derive(true); outgoingItem = new ShipmentItemBuilder(this.Session).WithGood(part).WithQuantity(330).Build(); outgoingShipment.AddShipmentItem(outgoingItem); this.Session.Derive(true); outgoingShipment.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); package = new ShipmentPackageBuilder(this.Session).Build(); customerShipment2.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in outgoingShipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); outgoingShipment.Ship(); this.Session.Derive(); // Ship all items to customer (without sales order) outgoingShipment = new CustomerShipmentBuilder(this.Session) .WithShipToParty(customer) .WithShipFromFacility(secondFacility) .WithShipToAddress(customer.ShippingAddress) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .Build(); this.Session.Derive(true); outgoingItem = new ShipmentItemBuilder(this.Session).WithGood(part).WithQuantity(20).Build(); outgoingShipment.AddShipmentItem(outgoingItem); this.Session.Derive(true); outgoingShipment.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); package = new ShipmentPackageBuilder(this.Session).Build(); customerShipment2.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in outgoingShipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); outgoingShipment.Ship(); this.Session.Derive(); Assert.Equal(0, part.QuantityOnHand); Assert.Equal(8.17M, part.PartWeightedAverage.AverageCost); purchaseOrder1.Revise(); this.Session.Derive(); // Purchase 150 items at 8 euro purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(150).WithAssignedUnitPrice(8M).Build(); purchaseOrder1.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder1.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder1.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); Assert.Equal(150, part.QuantityOnHand); Assert.Equal(8, part.PartWeightedAverage.AverageCost); }