public void GivenConfirmedOrderItemForGood_WhenOrderItemIsCancelled_ThenNonSerializedInventoryQuantitiesAreReleased() { this.InstantiateObjects(this.DatabaseSession); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(item.QuantityOrdered, item.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(0, item.ReservedFromInventoryItem.AvailableToPromise); var previous = item.ReservedFromInventoryItem; this.DatabaseSession.Derive(true); item.Cancel(); this.DatabaseSession.Derive(true); Assert.AreEqual(0, previous.QuantityCommittedOut); Assert.AreEqual(0, previous.AvailableToPromise); }
/** * * All invloved parties (Buyer and Seller) must be an Individual to use * WithPersonExternalDefaults method * **/ public static SalesOrderBuilder WithPersonExternalDefaults(this SalesOrderBuilder @this, Organisation sellerOrganisation) { var faker = @this.Session.Faker(); var shipToCustomer = faker.Random.ListItem(sellerOrganisation.ActiveCustomers.Where(v => v.GetType().Name == "Person").ToList()); var billToCustomer = shipToCustomer; var salesOrderItem_Default = new SalesOrderItemBuilder(@this.Session).WithDefaults().Build(); var salesOrderItem_Product = new SalesOrderItemBuilder(@this.Session).WithProductItemDefaults().Build(); var salesOrderItem_Part = new SalesOrderItemBuilder(@this.Session).WithPartItemDefaults().Build(); var paymentMethod = faker.Random.ListItem(@this.Session.Extent <PaymentMethod>()); @this.WithCustomerReference(faker.Random.Words(16)); @this.WithTakenBy(sellerOrganisation); @this.WithTakenByContactMechanism(sellerOrganisation.CurrentPartyContactMechanisms.Select(v => v.ContactMechanism).FirstOrDefault()); @this.WithTakenByContactPerson(sellerOrganisation.CurrentContacts.FirstOrDefault()); @this.WithDescription(faker.Lorem.Sentence()); @this.WithComment(faker.Lorem.Sentence()); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithBillToCustomer(billToCustomer); @this.WithBillToContactMechanism(billToCustomer.CurrentPartyContactMechanisms.Select(v => v.ContactMechanism).FirstOrDefault()); @this.WithShipToCustomer(shipToCustomer); @this.WithShipToAddress(shipToCustomer.ShippingAddress); @this.WithShipFromAddress(sellerOrganisation.ShippingAddress); @this.WithPaymentMethod(paymentMethod); @this.WithSalesOrderItem(salesOrderItem_Default); @this.WithSalesOrderItem(salesOrderItem_Product); @this.WithSalesOrderItem(salesOrderItem_Part); @this.WithSalesTerm(new IncoTermBuilder(@this.Session).WithDefaults().Build()); @this.WithSalesTerm(new InvoiceTermBuilder(@this.Session).WithDefaults().Build()); @this.WithSalesTerm(new OrderTermBuilder(@this.Session).WithDefaults().Build()); return(@this); }
public static SalesOrderItemBuilder WithDefaults(this SalesOrderItemBuilder @this) { var faker = @this.Session.Faker(); var invoiceItemTypes = @this.Session.Extent <InvoiceItemType>().ToList(); var otherInvoiceItemTypes = invoiceItemTypes.Except( invoiceItemTypes.Where(v => v.UniqueId.Equals(InvoiceItemTypes.ProductItemId) || v.UniqueId.Equals(InvoiceItemTypes.PartItemId)).ToList()) .ToList(); var unifiedGoodExtent = @this.Session.Extent <UnifiedGood>(); unifiedGoodExtent.Filter.AddEquals(M.UnifiedGood.InventoryItemKind.RoleType, new InventoryItemKinds(@this.Session).Serialised); var serializedProduct = unifiedGoodExtent.First(); @this.WithDescription(faker.Lorem.Sentences(2)); @this.WithComment(faker.Lorem.Sentence()); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithInvoiceItemType(faker.Random.ListItem(otherInvoiceItemTypes)); @this.WithProduct(serializedProduct); @this.WithSerialisedItem(serializedProduct.SerialisedItems.First); @this.WithNextSerialisedItemAvailability(faker.Random.ListItem(@this.Session.Extent <SerialisedItemAvailability>())); @this.WithQuantityOrdered(1); @this.WithAssignedUnitPrice(faker.Random.UInt()); return(@this); }
public void GivenPartyWithOpenOrders_WhenDeriving_ThenOpenOrderAmountIsUpdated() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; var organisation = new OrganisationBuilder(this.Session).WithName("customer").Build(); var customerRelationship = new CustomerRelationshipBuilder(this.Session).WithCustomer(organisation).Build(); this.Session.Derive(); var partyFinancial = organisation.PartyFinancialRelationshipsWhereParty.First(v => Equals(v.InternalOrganisation, customerRelationship.InternalOrganisation)); var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var postalAddress = new PostalAddressBuilder(this.Session) .WithAddress1("Kleine Nieuwedijkstraat 2") .WithPostalAddressBoundary(mechelen) .Build(); var good = new Goods(this.Session).FindBy(M.Good.Name, "good1"); this.Session.Derive(); var salesOrder1 = new SalesOrderBuilder(this.Session).WithBillToCustomer(organisation).WithShipToAddress(postalAddress).WithComment("salesorder1").Build(); var orderItem1 = new SalesOrderItemBuilder(this.Session) .WithProduct(good) .WithQuantityOrdered(10) .WithAssignedUnitPrice(10) .Build(); salesOrder1.AddSalesOrderItem(orderItem1); this.Session.Derive(); var salesOrder2 = new SalesOrderBuilder(this.Session).WithBillToCustomer(organisation).WithShipToAddress(postalAddress).WithComment("salesorder2").Build(); var orderItem2 = new SalesOrderItemBuilder(this.Session) .WithProduct(good) .WithQuantityOrdered(10) .WithAssignedUnitPrice(10) .Build(); salesOrder2.AddSalesOrderItem(orderItem2); this.Session.Derive(); var salesOrder3 = new SalesOrderBuilder(this.Session).WithBillToCustomer(organisation).WithShipToAddress(postalAddress).WithComment("salesorder3").Build(); var orderItem3 = new SalesOrderItemBuilder(this.Session) .WithProduct(good) .WithQuantityOrdered(10) .WithAssignedUnitPrice(10) .Build(); salesOrder3.AddSalesOrderItem(orderItem3); salesOrder3.Cancel(); this.Session.Derive(); Assert.Equal(242M, partyFinancial.OpenOrderAmount); }
public void GivenOrderRequirementCommitment_WhenDeriving_ThenRequiredRelationsMustExist() { var shipToCustomer = new OrganisationBuilder(this.DatabaseSession).WithName("shipToCustomer").Build(); var billToCustomer = new OrganisationBuilder(this.DatabaseSession).WithName("billToCustomer").Build(); new CustomerRelationshipBuilder(this.DatabaseSession) .WithCustomer(billToCustomer) .WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession) .WithCustomer(shipToCustomer) .WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation) .Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good = new GoodBuilder(this.DatabaseSession) .WithName("Gizmo") .WithSku("10101") .WithVatRate(vatRate21) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.DatabaseSession.Derive(true); var salesOrder = new SalesOrderBuilder(this.DatabaseSession) .WithShipToCustomer(shipToCustomer) .WithBillToCustomer(billToCustomer) .WithVatRegime(new VatRegimes(this.DatabaseSession).Export) .Build(); var goodOrderItem = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good).WithQuantityOrdered(1).Build(); salesOrder.AddSalesOrderItem(goodOrderItem); var customerRequirement = new CustomerRequirementBuilder(this.DatabaseSession).WithDescription("100 gizmo's").Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var builder = new OrderRequirementCommitmentBuilder(this.DatabaseSession); builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithOrderItem(goodOrderItem); builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithRequirement(customerRequirement); var tsts = builder.Build(); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); }
public void GivenOrderRequirementCommitment_WhenDeriving_ThenRequiredRelationsMustExist() { var shipToCustomer = new OrganisationBuilder(this.Session).WithName("shipToCustomer").Build(); var billToCustomer = new OrganisationBuilder(this.Session).WithName("billToCustomer").Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(billToCustomer) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(shipToCustomer) .Build(); var good = new Goods(this.Session).FindBy(M.Good.Name, "good1"); this.Session.Derive(); var salesOrder = new SalesOrderBuilder(this.Session) .WithShipToCustomer(shipToCustomer) .WithBillToCustomer(billToCustomer) .WithAssignedVatRegime(new VatRegimes(this.Session).ZeroRated) .Build(); var goodOrderItem = new SalesOrderItemBuilder(this.Session) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .WithProduct(good) .WithAssignedUnitPrice(1) .WithQuantityOrdered(1) .Build(); salesOrder.AddSalesOrderItem(goodOrderItem); var customerRequirement = new RequirementBuilder(this.Session).WithDescription("100 gizmo's").Build(); this.Session.Derive(); this.Session.Commit(); var builder = new OrderRequirementCommitmentBuilder(this.Session); builder.Build(); Assert.True(this.Session.Derive(false).HasErrors); this.Session.Rollback(); builder.WithOrderItem(goodOrderItem); builder.Build(); Assert.True(this.Session.Derive(false).HasErrors); this.Session.Rollback(); builder.WithRequirement(customerRequirement); var tsts = builder.Build(); Assert.False(this.Session.Derive(false).HasErrors); }
public void CreateWithProductItemDefaults() { var salesOrder = new SalesOrders(this.Session).Extent().FirstOrDefault(); var before = new SalesOrderItems(this.Session).Extent().ToArray(); var expected = new SalesOrderItemBuilder(this.Session).WithSerialisedProductDefaults().Build(); salesOrder.AddSalesOrderItem(expected); this.Session.Derive(); Assert.True(expected.ExistDescription); Assert.True(expected.ExistComment); Assert.True(expected.ExistInternalComment); Assert.True(expected.ExistInvoiceItemType); Assert.True(expected.ExistProduct); Assert.True(expected.ExistSerialisedItem); Assert.True(expected.ExistQuantityOrdered); Assert.True(expected.ExistAssignedUnitPrice); var expectedDescription = expected.Description; var expectedComment = expected.Comment; var expectedInternalComment = expected.InternalComment; var expectedInvoiceItemType = expected.InvoiceItemType; var expectedProduct = expected.Product; var expectedSerialisedItem = expected.SerialisedItem; var expectedQuantityOrdered = expected.QuantityOrdered; var expectedAssignedUnitPrice = expected.AssignedUnitPrice; this.salesOrderListPage.Table.DefaultAction(salesOrder); var salesOrderOverview = new SalesOrderOverviewComponent(this.salesOrderListPage.Driver); var salesOrderItemOverviewPanel = salesOrderOverview.SalesorderitemOverviewPanel.Click(); var salesOrderItemCreate = salesOrderItemOverviewPanel .CreateSalesOrderItem() .BuildForProductItemDefaults(expected); this.Session.Rollback(); salesOrderItemCreate.SAVE.Click(); this.Driver.WaitForAngular(); this.Session.Rollback(); var after = new SalesOrderItems(this.Session).Extent().ToArray(); Assert.Equal(after.Length, before.Length + 1); var actual = after.Except(before).First(); Assert.Equal(expectedDescription, actual.Description); Assert.Equal(expectedComment, actual.Comment); Assert.Equal(expectedInternalComment, actual.InternalComment); Assert.Equal(expectedInvoiceItemType, actual.InvoiceItemType); Assert.Equal(expectedProduct, actual.Product); Assert.Equal(expectedSerialisedItem, actual.SerialisedItem); Assert.Equal(expectedQuantityOrdered, actual.QuantityOrdered); Assert.Equal(expectedAssignedUnitPrice, actual.AssignedUnitPrice); }
/** * * All invloved parties (Buyer and Seller) must be an Organisation to use * WithOrganisationInternalDefaults method * **/ public static SalesOrderBuilder WithOrganisationInternalDefaults(this SalesOrderBuilder @this, Organisation sellerOrganisation) { var faker = @this.Session.Faker(); var internalOrganisations = @this.Session.Extent <Organisation>(); // Organisation of type Internal Organisation internalOrganisations.Filter.AddEquals(M.Organisation.IsInternalOrganisation.RoleType, true); // Filter out the sellerOrganisation var shipToCustomer = internalOrganisations.Except(new List <Organisation> { sellerOrganisation }).FirstOrDefault(); var billToCustomer = shipToCustomer; var endCustomer = faker.Random.ListItem(shipToCustomer.ActiveCustomers.Where(v => v.GetType().Name == "Organisation").ToList()); var endContact = endCustomer is Person endContactPerson ? endContactPerson : endCustomer.CurrentContacts.FirstOrDefault(); var shipToContact = shipToCustomer.CurrentContacts.FirstOrDefault(); var salesOrderItem_Default = new SalesOrderItemBuilder(@this.Session).WithDefaults().Build(); var salesOrderItem_Product = new SalesOrderItemBuilder(@this.Session).WithProductItemDefaults().Build(); var salesOrderItem_Part = new SalesOrderItemBuilder(@this.Session).WithPartItemDefaults().Build(); var paymentMethod = faker.Random.ListItem(@this.Session.Extent <PaymentMethod>()); @this.WithCustomerReference(faker.Random.Words(10)); @this.WithTakenBy(sellerOrganisation); @this.WithTakenByContactMechanism(sellerOrganisation.CurrentPartyContactMechanisms.Select(v => v.ContactMechanism).FirstOrDefault()); @this.WithTakenByContactPerson(sellerOrganisation.CurrentContacts.FirstOrDefault()); @this.WithDescription(faker.Lorem.Sentence()); @this.WithComment(faker.Lorem.Sentence()); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithBillToCustomer(billToCustomer); @this.WithBillToContactMechanism(billToCustomer.CurrentPartyContactMechanisms.Select(v => v.ContactMechanism).FirstOrDefault()); @this.WithBillToContactPerson(billToCustomer.CurrentContacts.FirstOrDefault()); @this.WithBillToEndCustomer(endCustomer); @this.WithBillToEndCustomerContactMechanism(endCustomer.CurrentPartyContactMechanisms.Select(v => v.ContactMechanism).FirstOrDefault()); @this.WithBillToEndCustomerContactPerson(endContact); @this.WithShipToEndCustomer(endCustomer); @this.WithShipToEndCustomerAddress(endCustomer.ShippingAddress); @this.WithShipToEndCustomerContactPerson(endContact); @this.WithShipToCustomer(shipToCustomer); @this.WithShipToAddress(shipToCustomer.ShippingAddress); @this.WithShipFromAddress(sellerOrganisation.ShippingAddress); @this.WithShipToContactPerson(shipToContact); @this.WithPaymentMethod(paymentMethod); @this.WithSalesOrderItem(salesOrderItem_Default); @this.WithSalesOrderItem(salesOrderItem_Product); @this.WithSalesOrderItem(salesOrderItem_Part); @this.WithSalesTerm(new IncoTermBuilder(@this.Session).WithDefaults().Build()); @this.WithSalesTerm(new InvoiceTermBuilder(@this.Session).WithDefaults().Build()); @this.WithSalesTerm(new OrderTermBuilder(@this.Session).WithDefaults().Build()); return(@this); }
public void GivenPackingingContent_WhenDeriving_ThenAssertQuantityPackedIsNotGreaterThanQuantityShipped() { var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithPostalAddressBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.Session).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(this.Session.Now()).WithCustomer(customer).Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); var good2 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good2"); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good1.Part).Build(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good2.Part).Build(); this.Session.Derive(); var order = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var item1 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithAssignedUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(2).WithAssignedUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.Session).WithProduct(good2).WithQuantityOrdered(5).WithAssignedUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); this.Session.Derive(); order.SetReadyForPosting(); this.Session.Derive(); order.Post(); this.Session.Derive(); order.Accept(); this.Session.Derive(); var shipment = (CustomerShipment)mechelenAddress.ShipmentsWhereShipToAddress[0]; var package = new ShipmentPackageBuilder(this.Session).Build(); package.AddPackagingContent(new PackagingContentBuilder(this.Session) .WithShipmentItem(shipment.ShipmentItems[0]) .WithQuantity(shipment.ShipmentItems[0].Quantity + 1) .Build()); Assert.True(this.Session.Derive(false).HasErrors); }
public void GivenPackingingContent_WhenDerived_ThenShipmentItemsQuantityPackedIsSet() { var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.Session).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(DateTime.UtcNow).WithCustomer(customer).Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); var good2 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good2"); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good1.Part).Build(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good1.Part).Build(); this.Session.Derive(); var order = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var item1 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.Session).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); this.Session.Derive(); order.Confirm(); this.Session.Derive(); var shipment = (CustomerShipment)mechelenAddress.ShipmentsWhereShipToAddress[0]; var package = new ShipmentPackageBuilder(this.Session).Build(); foreach (ShipmentItem shipmentItem in shipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); foreach (ShipmentItem shipmentItem in shipment.ShipmentItems) { Assert.Equal(shipmentItem.QuantityShipped, shipmentItem.Quantity); } }
public void GivenPartyWithOpenOrders_WhenDeriving_ThenOpenOrderAmountIsUpdated() { var organisation = new OrganisationBuilder(this.DatabaseSession).WithName("customer").Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); new CustomerRelationshipBuilder(this.DatabaseSession).WithCustomer(organisation).WithInternalOrganisation(internalOrganisation).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var postalAddress = new PostalAddressBuilder(this.DatabaseSession) .WithAddress1("Kleine Nieuwedijkstraat 2") .WithGeographicBoundary(mechelen) .Build(); var good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(new VatRateBuilder(this.DatabaseSession).WithRate(21).Build()) .WithName("good") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.DatabaseSession.Derive(true); var salesOrder1 = new SalesOrderBuilder(this.DatabaseSession).WithBillToCustomer(organisation).WithShipToAddress(postalAddress).WithComment("salesorder1").Build(); var orderItem1 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good) .WithQuantityOrdered(10) .WithActualUnitPrice(10) .Build(); salesOrder1.AddSalesOrderItem(orderItem1); var salesOrder2 = new SalesOrderBuilder(this.DatabaseSession).WithBillToCustomer(organisation).WithShipToAddress(postalAddress).WithComment("salesorder2").Build(); var orderItem2 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good) .WithQuantityOrdered(10) .WithActualUnitPrice(10) .Build(); salesOrder2.AddSalesOrderItem(orderItem2); var salesOrder3 = new SalesOrderBuilder(this.DatabaseSession).WithBillToCustomer(organisation).WithShipToAddress(postalAddress).WithComment("salesorder3").Build(); var orderItem3 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good) .WithQuantityOrdered(10) .WithActualUnitPrice(10) .Build(); salesOrder3.AddSalesOrderItem(orderItem3); salesOrder3.Cancel(); this.DatabaseSession.Derive(true); Assert.AreEqual(242M, organisation.OpenOrderAmount); }
public static SalesOrderItemBuilder WithNonSerialisedProductItemDefaults(this SalesOrderItemBuilder @this) { var faker = @this.Session.Faker(); var invoiceItemType = @this.Session.Extent <InvoiceItemType>().FirstOrDefault(v => v.UniqueId.Equals(InvoiceItemTypes.ProductItemId)); var unifiedGoodExtent = @this.Session.Extent <UnifiedGood>(); unifiedGoodExtent.Filter.AddEquals(M.UnifiedGood.InventoryItemKind.RoleType, new InventoryItemKinds(@this.Session).NonSerialised); var nonSerializedProduct = unifiedGoodExtent.First(); @this.WithDescription(faker.Lorem.Sentences(2)); @this.WithComment(faker.Lorem.Sentence()); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithInvoiceItemType(invoiceItemType); @this.WithProduct(nonSerializedProduct); @this.WithQuantityOrdered(1); @this.WithAssignedUnitPrice(faker.Random.UInt()); return(@this); }
public static SalesOrder CreateB2CSalesOrder(this Organisation @this, Faker faker) { var salesOrder = new SalesOrderBuilder(@this.Session()).WithPersonExternalDefaults(@this).Build(); @this.Session().Derive(); var productItem = new SalesOrderItemBuilder(@this.Session()).WithSerialisedProductDefaults().Build(); salesOrder.AddSalesOrderItem(productItem); @this.Session().Derive(); var partItem = new SalesOrderItemBuilder(@this.Session()).WithPartItemDefaults().Build(); salesOrder.AddSalesOrderItem(partItem); @this.Session().Derive(); var otherItem = new SalesOrderItemBuilder(@this.Session()).WithDefaults().Build(); salesOrder.AddSalesOrderItem(otherItem); @this.Session().Derive(); return(salesOrder); }
public void GivenCustomerBuyingFromDifferentStores_WhenShipping_ThenPickListIsCreatedForEachStore() { var store1 = new Stores(this.Session).FindBy(M.Store.Name, "store"); var store2 = new StoreBuilder(this.Session).WithName("second store") .WithDefaultFacility(new Facilities(this.Session).Extent().First) .WithDefaultShipmentMethod(new ShipmentMethods(this.Session).Ground) .WithDefaultCarrier(new Carriers(this.Session).Fedex) .WithSalesOrderNumberPrefix("") .WithOutgoingShipmentNumberPrefix("") .WithIsImmediatelyPacked(true) .Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).PhysicalCount).WithPart(good1.Part).Build(); var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithPostalAddressBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.Session).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(this.Session.Now()).WithCustomer(customer).Build(); this.Session.Derive(true); var order1 = new SalesOrderBuilder(this.Session) .WithStore(store1) .WithBillToCustomer(customer) .WithAssignedBillToContactMechanism(mechelenAddress) .WithShipToCustomer(customer) .Build(); var order1Item = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithAssignedUnitPrice(15).Build(); order1.AddSalesOrderItem(order1Item); this.Session.Derive(true); order1.SetReadyForPosting(); this.Session.Derive(true); order1.Post(); this.Session.Derive(); order1.Accept(); this.Session.Derive(); Assert.Single(customer.ShipmentsWhereShipToParty); var order2 = new SalesOrderBuilder(this.Session) .WithStore(store1) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var order2Item = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(2).WithAssignedUnitPrice(15).Build(); order2.AddSalesOrderItem(order2Item); this.Session.Derive(true); order2.SetReadyForPosting(); this.Session.Derive(true); order2.Post(); this.Session.Derive(); order2.Accept(); this.Session.Derive(); Assert.Single(customer.ShipmentsWhereShipToParty); var store1Shipment = (CustomerShipment)mechelenAddress.ShipmentsWhereShipToAddress.First(v => v.Store.Equals(store1)); store1Shipment.Pick(); this.Session.Derive(); var order3 = new SalesOrderBuilder(this.Session) .WithStore(store2) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var order3Item = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(5).WithAssignedUnitPrice(15).Build(); order3.AddSalesOrderItem(order3Item); this.Session.Derive(true); order3.SetReadyForPosting(); this.Session.Derive(true); order3.Post(); this.Session.Derive(); order3.Accept(); this.Session.Derive(); var store2Shipment = (CustomerShipment)mechelenAddress.ShipmentsWhereShipToAddress.First(v => v.Store.Equals(store2)); store2Shipment.Pick(); this.Session.Derive(); var store1PickList = customer.PickListsWhereShipToParty.FirstOrDefault(v => v.Store.Equals(store1)); var store2PickList = customer.PickListsWhereShipToParty.FirstOrDefault(v => v.Store.Equals(store2)); Assert.Equal(2, customer.PickListsWhereShipToParty.Count); Assert.NotNull(store1PickList); Assert.Equal(3, store1PickList.PickListItems[0].Quantity); Assert.NotNull(store2PickList); Assert.Equal(5, store2PickList.PickListItems[0].Quantity); }
public void GivenOrderItemWithoutShipToParty_WhenDeriving_ThenDerivedShipToPartyIsFromOrder() { this.InstantiateObjects(this.DatabaseSession); var salesOrder = new SalesOrderBuilder(this.DatabaseSession) .WithTakenByInternalOrganisation(this.internalOrganisation) .WithShipToCustomer(this.shipToCustomer) .WithBillToCustomer(this.billToCustomer) .Build(); var orderItem = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(this.good).WithQuantityOrdered(1).Build(); salesOrder.AddSalesOrderItem(orderItem); this.DatabaseSession.Derive(true); Assert.AreEqual(this.shipToCustomer, orderItem.ShipToParty); }
public void GivenOrderItemWithPendingShipmentAndAssignedPickList_WhenQuantityOrderedIsDecreased_ThenNegativePickListIsCreatedAndShipmentQuantityIsDecreased() { this.InstantiateObjects(this.DatabaseSession); var inventoryItem = (NonSerializedInventoryItem)this.part.InventoryItemsWherePart.First; inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(10).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(10) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)item.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; Assert.AreEqual(10, shipment.ShipmentItems[0].Quantity); var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; Assert.AreEqual(10, pickList.PickListItems[0].RequestedQuantity); pickList.Picker = new Persons(this.DatabaseSession).FindBy(Persons.Meta.LastName, "orderProcessor"); this.DatabaseSession.Derive(true); item.QuantityOrdered = 3; this.DatabaseSession.Derive(true); var negativePickList = this.order.ShipToCustomer.PickListsWhereShipToParty[1]; Assert.AreEqual(3, shipment.ShipmentItems[0].Quantity); Assert.AreEqual(10, pickList.PickListItems[0].RequestedQuantity); Assert.AreEqual(-7, negativePickList.PickListItems[0].RequestedQuantity); }
public void GivenOrderItemForProductWithoutCategory_WhenDerivingSalesRep_ThenSalesRepForCustomerIsSelected() { this.InstantiateObjects(this.DatabaseSession); var salesrep1 = new PersonBuilder(this.DatabaseSession).WithLastName("salesrep for child product category").Build(); var salesrep2 = new PersonBuilder(this.DatabaseSession).WithLastName("salesrep for parent category").Build(); var salesrep3 = new PersonBuilder(this.DatabaseSession).WithLastName("salesrep for everything else").Build(); var productCategoryParent = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("parent").Build(); var childProductCategory = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("child").WithParent(productCategoryParent).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession) .WithSalesRepresentative(salesrep1) .WithCustomer(this.order.ShipToCustomer) .WithProductCategory(childProductCategory) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .Build(); new SalesRepRelationshipBuilder(this.DatabaseSession) .WithSalesRepresentative(salesrep2) .WithCustomer(this.order.ShipToCustomer) .WithProductCategory(productCategoryParent) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .Build(); new SalesRepRelationshipBuilder(this.DatabaseSession) .WithSalesRepresentative(salesrep3) .WithCustomer(this.order.ShipToCustomer) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .Build(); var orderItem = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(orderItem); this.DatabaseSession.Derive(true); Assert.AreEqual(orderItem.SalesRep, salesrep3); }
public void GivenShipmentReceiptWhenDerivingThenInventoryItemQuantityOnHandIsUpdated() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithPostalAddressBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.Session).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(this.Session.Now()).WithCustomer(customer).Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); new InventoryItemTransactionBuilder(this.Session).WithQuantity(20).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good1.Part).Build(); this.Session.Derive(); var inventoryItem = good1.Part.InventoryItemsWherePart.First; var order1 = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithDeliveryDate(this.Session.Now()) .Build(); var salesItem = new SalesOrderItemBuilder(this.Session).WithDescription("item1").WithProduct(good1).WithQuantityOrdered(30).WithAssignedUnitPrice(15).Build(); order1.AddSalesOrderItem(salesItem); this.Session.Derive(); this.Session.Commit(); order1.SetReadyForPosting(); this.Session.Derive(); order1.Post(); this.Session.Derive(); order1.Accept(); this.Session.Derive(); var sessionInventoryItem = (NonSerialisedInventoryItem)this.Session.Instantiate(inventoryItem); var sessionSalesItem = (SalesOrderItem)this.Session.Instantiate(salesItem); var supplier = new OrganisationBuilder(this.Session).WithName("supplier").Build(); new SupplierRelationshipBuilder(this.Session).WithSupplier(supplier).Build(); Assert.Equal(20, sessionSalesItem.QuantityPendingShipment); Assert.Equal(30, sessionSalesItem.QuantityReserved); Assert.Equal(10, sessionSalesItem.QuantityShortFalled); var order = new PurchaseOrderBuilder(this.Session).WithTakenViaSupplier(supplier).Build(); var item1 = new PurchaseOrderItemBuilder(this.Session).WithPart(good1.Part).WithQuantityOrdered(10).Build(); order.AddPurchaseOrderItem(item1); this.Session.Derive(); this.Session.Commit(); order.SetReadyForProcessing(); order.OrderedBy.IsAutomaticallyReceived = true; order.QuickReceive(); this.Session.Derive(); this.Session.Commit(); Assert.Equal(30, sessionInventoryItem.QuantityOnHand); Assert.Equal(30, sessionSalesItem.QuantityPendingShipment); Assert.Equal(30, sessionSalesItem.QuantityReserved); Assert.Equal(0, sessionSalesItem.QuantityShortFalled); }
public void GivenManuallyScheduledOrderItemWithPendingShipmentAndAssignedPickList_WhenQuantityRequestsShippingIsDecreased_ThenNegativePickListIsCreatedAndShipmentQuantityIsDecreased() { this.InstantiateObjects(this.DatabaseSession); var inventoryItem = (NonSerializedInventoryItem)this.part.InventoryItemsWherePart.First; inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(10).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var manual = new OrderKindBuilder(this.DatabaseSession).WithDescription("manual").WithScheduleManually(true).Build(); var order1 = new SalesOrderBuilder(this.DatabaseSession) .WithShipToCustomer(this.shipToCustomer) .WithBillToCustomer(this.billToCustomer) .WithTakenByInternalOrganisation(this.internalOrganisation) .WithShipToAddress(this.shipToContactMechanismMechelen) .WithOrderKind(manual) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(10) .WithActualUnitPrice(5) .Build(); order1.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order1.Confirm(); this.DatabaseSession.Derive(true); item.QuantityShipNow = 10; this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)item.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; Assert.AreEqual(10, shipment.ShipmentItems[0].Quantity); var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; Assert.AreEqual(10, pickList.PickListItems[0].RequestedQuantity); pickList.Picker = new Persons(this.DatabaseSession).FindBy(Persons.Meta.LastName, "orderProcessor"); item.QuantityShipNow = -7; this.DatabaseSession.Derive(true); var negativePickList = order1.ShipToCustomer.PickListsWhereShipToParty[1]; Assert.AreEqual(3, item.QuantityPendingShipment); Assert.AreEqual(3, shipment.ShipmentItems[0].Quantity); Assert.AreEqual(10, pickList.PickListItems[0].RequestedQuantity); Assert.AreEqual(-7, negativePickList.PickListItems[0].RequestedQuantity); }
public static void Full(this Singleton @this, DirectoryInfo dataPath, Faker faker) { var dutchLocale = new Locales(@this.Session()).DutchNetherlands; @this.AddAdditionalLocale(dutchLocale); var administrator = new PersonBuilder(@this.Session()).WithUserName("administrator").Build(); new UserGroups(@this.Session()).Administrators.AddMember(administrator); new UserGroups(@this.Session()).Creators.AddMember(administrator); @this.Session().Derive(); 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 allorsLogo = dataPath + @"\www\admin\images\logo.png"; 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, invoiceCounterValue: 1, purchaseInvoiceCounterValue: 1, purchaseOrderNeedsApproval: true, purchaseOrderApprovalThresholdLevel1: 1000M, purchaseOrderApprovalThresholdLevel2: 5000M, serialisedItemSoldOn: new SerialisedItemSoldOns(@this.Session()).CustomerShipmentShip, 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: "a-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, serialisedItemSoldOn: new SerialisedItemSoldOns(@this.Session()).CustomerShipmentShip, collectiveWorkEffortInvoice: true); // Give Administrator access new EmploymentBuilder(@this.Session()).WithEmployee(administrator).WithEmployer(allors).Build(); @this.Settings.DefaultFacility = allors.FacilitiesWhereOwner.First; var allorsEmployee1 = allors.CreateEmployee("letmein", faker); var allorsEmployee2 = allors.CreateEmployee("letmein", faker); var allorsProductQuoteApprover = allors.CreateEmployee("letmein", faker); var allorsPurchaseInvoiceApprover = allors.CreateEmployee("letmein", faker); var allorsPurchaseOrderApproverLevel1 = allors.CreateEmployee("letmein", faker); var allorsPurchaseOrderApproverLevel2 = allors.CreateEmployee("letmein", faker); var dipuEmployee = dipu.CreateEmployee("letmein", faker); var dipuProductQuoteApprover = dipu.CreateEmployee("letmein", faker); var dipuPurchaseInvoiceApprover = dipu.CreateEmployee("letmein", faker); new FacilityBuilder(@this.Session()) .WithName("Allors warehouse 2") .WithFacilityType(new FacilityTypes(@this.Session()).Warehouse) .WithOwner(allors) .Build(); var vatRate = new VatRateBuilder(@this.Session()).WithRate(21).Build(); var manufacturer = new OrganisationBuilder(@this.Session()).WithManufacturerDefaults(faker).Build(); allors.CreateSupplier(faker); allors.CreateSupplier(faker); allors.CreateSubContractor(faker); allors.CreateSubContractor(faker); @this.Session().Derive(); var nonSerialisedPart1 = allors.CreateNonSerialisedNonUnifiedPart(faker); var nonSerialisedPart2 = allors.CreateNonSerialisedNonUnifiedPart(faker); var serialisedPart1 = allors.CreateSerialisedNonUnifiedPart(faker); var serialisedPart2 = allors.CreateSerialisedNonUnifiedPart(faker); var good1 = new NonUnifiedGoodBuilder(@this.Session()).WithNonSerialisedPartDefaults(allors).Build(); var good2 = new NonUnifiedGoodBuilder(@this.Session()).WithSerialisedPartDefaults(allors).Build(); var serialisedItem = new SerialisedItemBuilder(@this.Session()).WithDefaults(allors).Build(); serialisedPart1.AddSerialisedItem(serialisedItem); new InventoryItemTransactionBuilder(@this.Session()) .WithSerialisedItem(serialisedItem) .WithFacility(allors.FacilitiesWhereOwner.First) .WithQuantity(1) .WithReason(new InventoryTransactionReasons(@this.Session()).IncomingShipment) .WithSerialisedInventoryItemState(new SerialisedInventoryItemStates(@this.Session()).Good) .Build(); var good3 = new NonUnifiedGoodBuilder(@this.Session()).WithNonSerialisedPartDefaults(allors).Build(); var good4 = new NonUnifiedGoodBuilder(@this.Session()).WithSerialisedPartDefaults(allors).Build(); var productCategory1 = 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 productCategory2 = new ProductCategoryBuilder(@this.Session()) .WithInternalOrganisation(allors) .WithName("Big Gizmo's") .WithLocalisedName(new LocalisedTextBuilder(@this.Session()).WithText("Grote Gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory3 = new ProductCategoryBuilder(@this.Session()) .WithInternalOrganisation(allors) .WithName("Small gizmo's") .WithLocalisedName(new LocalisedTextBuilder(@this.Session()).WithText("Kleine gizmo's").WithLocale(dutchLocale).Build()) .WithProduct(good1) .WithProduct(good2) .WithProduct(good3) .WithProduct(good4) .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(productCategory1) .Build(); @this.Session().Derive(); var email2 = new EmailAddressBuilder(@this.Session()) .WithElectronicAddressString("*****@*****.**") .Build(); for (var i = 0; i < 10; i++) { var b2BCustomer = allors.CreateB2BCustomer(faker); @this.Session().Derive(); new FaceToFaceCommunicationBuilder(@this.Session()) .WithDescription($"Meeting {i}") .WithSubject($"meeting {i}") .WithEventPurpose(new CommunicationEventPurposes(@this.Session()).Meeting) .WithFromParty(allors.CurrentContacts.First) .WithToParty(b2BCustomer.CurrentContacts.First) .WithOwner(administrator) .WithActualStart(@this.Session().Now()) .Build(); new EmailCommunicationBuilder(@this.Session()) .WithDescription($"Email {i}") .WithSubject($"email {i}") .WithFromParty(allors.CurrentContacts.First) .WithToParty(b2BCustomer.CurrentContacts.First) .WithFromEmail(allors.GeneralEmail) .WithToEmail(email2) .WithEventPurpose(new CommunicationEventPurposes(@this.Session()).Meeting) .WithOwner(administrator) .WithActualStart(@this.Session().Now()) .Build(); new LetterCorrespondenceBuilder(@this.Session()) .WithDescription($"Letter {i}") .WithSubject($"letter {i}") .WithFromParty(administrator) .WithToParty(b2BCustomer.CurrentContacts.First) .WithEventPurpose(new CommunicationEventPurposes(@this.Session()).Meeting) .WithOwner(administrator) .WithActualStart(@this.Session().Now()) .Build(); new PhoneCommunicationBuilder(@this.Session()) .WithDescription($"Phone {i}") .WithSubject($"phone {i}") .WithFromParty(administrator) .WithToParty(b2BCustomer.CurrentContacts.First) .WithEventPurpose(new CommunicationEventPurposes(@this.Session()).Meeting) .WithOwner(administrator) .WithActualStart(@this.Session().Now()) .Build(); var requestForQuote = new RequestForQuoteBuilder(@this.Session()) .WithEmailAddress($"customer{i}@acme.com") .WithTelephoneNumber("+1 234 56789") .WithRecipient(allors) .Build(); var requestItem = new RequestItemBuilder(@this.Session()) .WithSerialisedItem(serialisedItem) .WithProduct(serialisedItem.PartWhereSerialisedItem.NonUnifiedGoodsWherePart.FirstOrDefault()) .WithComment($"Comment {i}") .WithQuantity(1) .Build(); requestForQuote.AddRequestItem(requestItem); var quote = new ProductQuoteBuilder(@this.Session()).WithSerializedDefaults(allors).Build(); var salesOrderItem1 = new SalesOrderItemBuilder(@this.Session()) .WithDescription("first item") .WithProduct(good1) .WithAssignedUnitPrice(3000) .WithQuantityOrdered(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).ProductItem) .Build(); var salesOrderItem2 = new SalesOrderItemBuilder(@this.Session()) .WithDescription("second item") .WithAssignedUnitPrice(2000) .WithQuantityOrdered(2) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).ProductItem) .Build(); var salesOrderItem3 = new SalesOrderItemBuilder(@this.Session()) .WithDescription("Fee") .WithAssignedUnitPrice(100) .WithQuantityOrdered(1) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).Fee) .Build(); var order = new SalesOrderBuilder(@this.Session()) .WithTakenBy(allors) .WithBillToCustomer(b2BCustomer) .WithBillToEndCustomerContactMechanism(b2BCustomer.BillingAddress) .WithSalesOrderItem(salesOrderItem1) .WithSalesOrderItem(salesOrderItem2) .WithSalesOrderItem(salesOrderItem3) .WithCustomerReference("a reference number") .WithDescription("Sale of 1 used Aircraft Towbar") .WithVatRegime(new VatRegimes(@this.Session()).Assessable) .Build(); var salesInvoiceItem1 = new SalesInvoiceItemBuilder(@this.Session()) .WithDescription("first item") .WithProduct(good1) .WithAssignedUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).ProductItem) .Build(); var salesInvoiceItem2 = new SalesInvoiceItemBuilder(@this.Session()) .WithDescription("second item") .WithAssignedUnitPrice(2000) .WithQuantity(2) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).ProductItem) .Build(); var salesInvoiceItem3 = new SalesInvoiceItemBuilder(@this.Session()) .WithDescription("Fee") .WithAssignedUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).Fee) .Build(); var exw = new IncoTermTypes(@this.Session()).Exw; var incoTerm = new IncoTermBuilder(@this.Session()).WithTermType(exw).WithTermValue("XW").Build(); var salesInvoice = new SalesInvoiceBuilder(@this.Session()) .WithBilledFrom(allors) .WithBillToCustomer(b2BCustomer) .WithBillToContactPerson(b2BCustomer.CurrentContacts.First) .WithBillToContactMechanism(b2BCustomer.BillingAddress) .WithSalesInvoiceItem(salesInvoiceItem1) .WithSalesInvoiceItem(salesInvoiceItem2) .WithSalesInvoiceItem(salesInvoiceItem3) .WithCustomerReference("a reference number") .WithDescription("Sale of 1 used Aircraft Towbar") .WithSalesInvoiceType(new SalesInvoiceTypes(@this.Session()).SalesInvoice) .WithSalesTerm(incoTerm) .WithVatRegime(new VatRegimes(@this.Session()).Assessable) .Build(); for (var j = 0; j < 3; j++) { var salesInvoiceItem = new SalesInvoiceItemBuilder(@this.Session()) .WithDescription("Extra Charge") .WithAssignedUnitPrice(100 + j) .WithQuantity(j) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).MiscCharge) .Build(); salesInvoice.AddSalesInvoiceItem(salesInvoiceItem); } } @this.Session().Derive(); for (var i = 0; i < 4; i++) { var supplier = faker.Random.ListItem(allors.CurrentSuppliers); var purchaseInvoiceItem1 = new PurchaseInvoiceItemBuilder(@this.Session()) .WithDescription("first item") .WithPart(nonSerialisedPart1) .WithAssignedUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).PartItem) .Build(); var purchaseInvoiceItem2 = new PurchaseInvoiceItemBuilder(@this.Session()) .WithDescription("second item") .WithAssignedUnitPrice(2000) .WithQuantity(2) .WithPart(nonSerialisedPart2) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).PartItem) .Build(); var purchaseInvoiceItem3 = new PurchaseInvoiceItemBuilder(@this.Session()) .WithDescription("Fee") .WithAssignedUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).Fee) .Build(); var purchaseInvoice = new PurchaseInvoiceBuilder(@this.Session()) .WithBilledTo(allors) .WithBilledFrom(supplier) .WithPurchaseInvoiceItem(purchaseInvoiceItem1) .WithPurchaseInvoiceItem(purchaseInvoiceItem2) .WithPurchaseInvoiceItem(purchaseInvoiceItem3) .WithCustomerReference("a reference number") .WithDescription("Purchase of 1 used Aircraft Towbar") .WithPurchaseInvoiceType(new PurchaseInvoiceTypes(@this.Session()).PurchaseInvoice) .WithVatRegime(new VatRegimes(@this.Session()).Assessable) .Build(); var purchaseOrderItem1 = new PurchaseOrderItemBuilder(@this.Session()) .WithDescription("first purchase order item") .WithPart(nonSerialisedPart1) .WithQuantityOrdered(1) .Build(); var purchaseOrder = new PurchaseOrderBuilder(@this.Session()) .WithOrderedBy(allors) .WithTakenViaSupplier(supplier) .WithPurchaseOrderItem(purchaseOrderItem1) .WithCustomerReference("reference " + i) .Build(); } var anOrganisation = new Organisations(@this.Session()).FindBy(M.Organisation.IsInternalOrganisation, false); var item = new SerialisedItemBuilder(@this.Session()) .WithSerialNumber("112") .WithSerialisedItemAvailability(new SerialisedItemAvailabilities(@this.Session()).Sold) .WithAvailableForSale(false) .WithOwnedBy(anOrganisation) .Build(); nonSerialisedPart2.AddSerialisedItem(item); var workTask = new WorkTaskBuilder(@this.Session()) .WithTakenBy(allors) .WithCustomer(anOrganisation) .WithName("maintenance") .Build(); new WorkEffortFixedAssetAssignmentBuilder(@this.Session()) .WithFixedAsset(item) .WithAssignment(workTask) .Build(); var workOrderPart1 = allors.CreateNonSerialisedNonUnifiedPart(faker); var workOrderPart2 = allors.CreateNonSerialisedNonUnifiedPart(faker); var workOrderPart3 = allors.CreateNonSerialisedNonUnifiedPart(faker); @this.Session().Derive(); var workOrder = new WorkTaskBuilder(@this.Session()) .WithName("Task") .WithTakenBy(allors) .WithFacility(new Facilities(@this.Session()).Extent().First) .WithCustomer(anOrganisation) .WithWorkEffortPurpose(new WorkEffortPurposes(@this.Session()).Maintenance) .WithSpecialTerms("Net 45 Days") .Build(); new WorkEffortFixedAssetAssignmentBuilder(@this.Session()) .WithFixedAsset(item) .WithAssignment(workOrder) .WithComment("Busted tailpipe") .Build(); workOrder.CreateInventoryAssignment(workOrderPart1, 11); workOrder.CreateInventoryAssignment(workOrderPart2, 12); workOrder.CreateInventoryAssignment(workOrderPart3, 13); //// Work Effort Time Entries var yesterday = DateTimeFactory.CreateDateTime(@this.Session().Now().AddDays(-1)); var laterYesterday = DateTimeFactory.CreateDateTime(yesterday.AddHours(3)); var today = DateTimeFactory.CreateDateTime(@this.Session().Now()); var laterToday = DateTimeFactory.CreateDateTime(today.AddHours(4)); var tomorrow = DateTimeFactory.CreateDateTime(@this.Session().Now().AddDays(1)); var laterTomorrow = DateTimeFactory.CreateDateTime(tomorrow.AddHours(6)); var standardRate = new RateTypes(@this.Session()).StandardRate; var overtimeRate = new RateTypes(@this.Session()).OvertimeRate; var frequencies = new TimeFrequencies(@this.Session()); var timeEntryYesterday1 = workOrder.CreateTimeEntry(yesterday, laterYesterday, frequencies.Day, standardRate); var timeEntryToday1 = workOrder.CreateTimeEntry(today, laterToday, frequencies.Hour, standardRate); var timeEntryTomorrow1 = workOrder.CreateTimeEntry(tomorrow, laterTomorrow, frequencies.Minute, overtimeRate); allorsEmployee1.TimeSheetWhereWorker.AddTimeEntry(timeEntryYesterday1); allorsEmployee1.TimeSheetWhereWorker.AddTimeEntry(timeEntryToday1); allorsEmployee1.TimeSheetWhereWorker.AddTimeEntry(timeEntryTomorrow1); var timeEntryYesterday2 = workOrder.CreateTimeEntry(yesterday, laterYesterday, frequencies.Day, standardRate); var timeEntryToday2 = workOrder.CreateTimeEntry(today, laterToday, frequencies.Hour, standardRate); var timeEntryTomorrow2 = workOrder.CreateTimeEntry(tomorrow, laterTomorrow, frequencies.Minute, overtimeRate); allorsEmployee2.TimeSheetWhereWorker.AddTimeEntry(timeEntryYesterday2); allorsEmployee2.TimeSheetWhereWorker.AddTimeEntry(timeEntryToday2); allorsEmployee2.TimeSheetWhereWorker.AddTimeEntry(timeEntryTomorrow2); var po = new PurchaseOrders(@this.Session()).Extent().First; foreach (PurchaseOrderItem purchaseOrderItem in po.PurchaseOrderItems) { new WorkEffortPurchaseOrderItemAssignmentBuilder(@this.Session()) .WithPurchaseOrderItem(purchaseOrderItem) .WithAssignment(workOrder) .WithQuantity(1) .Build(); } @this.Session().Derive(); }
public void GivenOrderItem_WhenObjectStateIsRejected_ThenItemMayNotBeCancelledOrRejectedOrDeleted() { var administrator = new PersonBuilder(this.DatabaseSession).WithFirstName("Koen").WithUserName("admin").Build(); var administrators = new UserGroups(this.DatabaseSession).Administrators; administrators.AddMember(administrator); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); this.InstantiateObjects(this.DatabaseSession); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("admin", "Forms"), new string[0]); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); item.Reject(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Rejected, item.CurrentObjectState); var acl = new AccessControlList(item, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.CanExecute(SalesOrderItems.Meta.Cancel)); Assert.IsFalse(acl.CanExecute(SalesOrderItems.Meta.Reject)); }
public void GivenConfirmedOrderItemForGood_WhenReservedFromInventoryItemChangesValue_ThenQuantitiesAreMovedFromOldToNewInventoryItem() { this.InstantiateObjects(this.DatabaseSession); var secondWarehouse = new WarehouseBuilder(this.DatabaseSession) .WithName("affiliate warehouse") .WithOwner(this.internalOrganisation) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(3, item.QuantityOrdered); Assert.AreEqual(0, item.QuantityPicked); Assert.AreEqual(0, item.QuantityShipped); Assert.AreEqual(0, item.QuantityPendingShipment); Assert.AreEqual(0, item.QuantityPendingShipment); Assert.AreEqual(3, item.QuantityReserved); Assert.AreEqual(3, item.QuantityShortFalled); Assert.AreEqual(0, item.QuantityRequestsShipping); Assert.AreEqual(3, item.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(0, item.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(0, item.ReservedFromInventoryItem.QuantityOnHand); var previous = item.ReservedFromInventoryItem; var current = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithFacility(secondWarehouse).WithPart(this.part).Build(); item.ReservedFromInventoryItem = current; this.DatabaseSession.Derive(true); Assert.AreEqual(3, item.QuantityOrdered); Assert.AreEqual(0, item.QuantityPicked); Assert.AreEqual(0, item.QuantityShipped); Assert.AreEqual(3, item.QuantityReserved); Assert.AreEqual(3, item.QuantityShortFalled); Assert.AreEqual(0, item.QuantityRequestsShipping); Assert.AreEqual(0, previous.QuantityCommittedOut); Assert.AreEqual(0, previous.AvailableToPromise); Assert.AreEqual(3, current.QuantityCommittedOut); Assert.AreEqual(0, current.AvailableToPromise); }
public void GivenOrderItem_WhenDeriving_ThenRequiredRelationsMustExist() { this.InstantiateObjects(this.DatabaseSession); var builder = new SalesOrderItemBuilder(this.DatabaseSession); var orderItem = builder.Build(); this.order.AddSalesOrderItem(orderItem); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithProduct(this.good); orderItem = builder.Build(); this.order.AddSalesOrderItem(orderItem); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); builder.WithProductFeature(this.feature1); orderItem = builder.Build(); this.order.AddSalesOrderItem(orderItem); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); }
public void GivenOrderItemWithPendingShipmentAndPendingPickList_WhenOrderItemIsCancelled_ThenPickListQuantityAndShipmentQuantityAreDecreased() { var inventoryItem = (NonSerializedInventoryItem)this.part.InventoryItemsWherePart.First; inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(10).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(new VatRateBuilder(this.DatabaseSession).WithRate(0).Build()) .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good2).Build(); good2inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(10).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); this.InstantiateObjects(this.DatabaseSession); var item1 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(2) .WithActualUnitPrice(5) .Build(); var item3 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good2) .WithQuantityOrdered(7) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item1); this.order.AddSalesOrderItem(item2); this.order.AddSalesOrderItem(item3); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)item1.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; Assert.AreEqual(2, shipment.ShipmentItems.Count); Assert.AreEqual(5, shipment.ShipmentItems[0].Quantity); Assert.AreEqual(7, shipment.ShipmentItems[1].Quantity); var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; Assert.AreEqual(5, pickList.PickListItems[0].RequestedQuantity); Assert.AreEqual(7, pickList.PickListItems[1].RequestedQuantity); item1.Cancel(); this.DatabaseSession.Derive(true); Assert.AreEqual(2, shipment.ShipmentItems.Count); Assert.AreEqual(2, shipment.ShipmentItems[0].Quantity); Assert.AreEqual(7, shipment.ShipmentItems[1].Quantity); Assert.AreEqual(2, pickList.PickListItems[0].RequestedQuantity); Assert.AreEqual(7, pickList.PickListItems[1].RequestedQuantity); item3.Cancel(); this.DatabaseSession.Derive(true); Assert.AreEqual(1, shipment.ShipmentItems.Count); Assert.AreEqual(2, shipment.ShipmentItems[0].Quantity); Assert.AreEqual(1, pickList.PickListItems.Count); Assert.AreEqual(2, pickList.PickListItems[0].RequestedQuantity); }
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 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", requestNumberPrefix: "a-RFQ", quoteNumberPrefix: "a-Q", productNumberPrefix: "A-", requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, invoiceCounterValue: 1); 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", requestNumberPrefix: "d-RFQ", quoteNumberPrefix: "d-Q", productNumberPrefix: "D-", requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, invoiceCounterValue: 1); singleton.Settings.DefaultFacility = allors.FacilitiesWhereOwner.First; this.SetupUser(allors, "*****@*****.**", "first", "allors employee", "letmein"); this.SetupUser(allors, "*****@*****.**", "second", "allors employee", "letmein"); this.SetupUser(dipu, "*****@*****.**", "first", "dipu employee", "letmein"); new FacilityBuilder(this.Session) .WithName("Allors warehouse 2") .WithFacilityType(new FacilityTypes(this.Session).Warehouse) .WithOwner(allors) .Build(); var manufacturer = new OrganisationBuilder(this.Session).WithName("Gizmo inc.").WithIsManufacturer(true).Build(); var productType = new ProductTypeBuilder(this.Session) .WithName($"Gizmo Serialized") .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) .WithName("brand1") .WithModel(new ModelBuilder(this.Session).WithName("model1").Build()) .Build(); var finishedGood = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new SkuIdentificationBuilder(this.Session) .WithIdentification("10101") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Sku).Build()) .WithName("finished good") .WithBrand(brand) .WithModel(brand.Models[0]) .WithManufacturedBy(manufacturer) .WithInventoryItemKind(new InventoryItemKinds(this.Session).NonSerialised) .Build(); var good1 = new NonUnifiedGoodBuilder(this.Session) .WithName("Tiny blue round gizmo") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Zeer kleine blauwe ronde gizmo").WithLocale(dutchLocale).Build()) .WithDescription("Perfect blue with nice curves") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Perfect blauw met mooie rondingen").WithLocale(dutchLocale).Build()) .WithVatRate(vatRate) .WithPart(finishedGood) .Build(); new InventoryItemTransactionBuilder(this.Session).WithPart(finishedGood).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).Build(); var finishedGood2 = new NonUnifiedPartBuilder(this.Session) .WithName("finished good2") .WithInventoryItemKind(new InventoryItemKinds(this.Session).Serialised) .WithProductType(productType) .WithProductIdentification(new SkuIdentificationBuilder(this.Session) .WithIdentification("10102") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Sku).Build()) .WithManufacturedBy(manufacturer) .Build(); var good2 = new NonUnifiedGoodBuilder(this.Session) .WithName("Tiny red round gizmo") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Zeer kleine rode ronde gizmo").WithLocale(dutchLocale).Build()) .WithDescription("Perfect red with nice curves") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Perfect rood met mooie rondingen").WithLocale(dutchLocale).Build()) .WithVatRate(vatRate) .WithPart(finishedGood2) .Build(); var serialisedItem = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build(); finishedGood2.AddSerialisedItem(serialisedItem); new SerialisedInventoryItemBuilder(this.Session).WithPart(finishedGood2).WithSerialisedItem(serialisedItem).WithFacility(allors.StoresWhereInternalOrganisation.First.DefaultFacility).Build(); var finishedGood3 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new SkuIdentificationBuilder(this.Session) .WithIdentification("10103") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Sku).Build()) .WithName("finished good3") .WithInventoryItemKind(new InventoryItemKinds(this.Session).NonSerialised) .WithManufacturedBy(manufacturer) .Build(); var good3 = new NonUnifiedGoodBuilder(this.Session) .WithName("Tiny green round gizmo") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Zeer kleine groene ronde gizmo").WithLocale(dutchLocale).Build()) .WithDescription("Perfect red with nice curves") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Perfect groen met mooie rondingen").WithLocale(dutchLocale).Build()) .WithVatRate(vatRate) .WithPart(finishedGood3) .Build(); var productCategory1 = 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 productCategory2 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Big Gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Grote Gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory3 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Small gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Kleine gizmo's").WithLocale(dutchLocale).Build()) .WithProduct(good1) .WithProduct(good2) .WithProduct(good3) .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(productCategory1) .Build(); this.Session.Derive(); for (int i = 0; i < 1; i++) { var acmePostalAddress = new PostalAddressBuilder(this.Session) .WithAddress1($"Acme{i} address 1") .WithPostalBoundary(new PostalBoundaryBuilder(this.Session).WithLocality($"Acme{i} city").WithPostalCode("1111").WithCountry(us).Build()) .Build(); var acmeBillingAddress = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(acmePostalAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).GeneralCorrespondence) .WithUseAsDefault(true) .Build(); var acmeInquiries = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(new TelecommunicationsNumberBuilder(this.Session).WithCountryCode("+1").WithContactNumber("111 222 333").Build()) .WithContactPurpose(new ContactMechanismPurposes(this.Session).GeneralPhoneNumber) .WithContactPurpose(new ContactMechanismPurposes(this.Session).OrderInquiriesPhone) .WithUseAsDefault(true) .Build(); var acme = new OrganisationBuilder(this.Session) .WithName($"Acme{i}") .WithLocale(new Locales(this.Session).EnglishUnitedStates) .WithPartyContactMechanism(acmeBillingAddress) .WithPartyContactMechanism(acmeInquiries) .Build(); var contact1Email = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(new EmailAddressBuilder(this.Session).WithElectronicAddressString($"employee1@acme{i}.com").Build()) .WithContactPurpose(new ContactMechanismPurposes(this.Session).PersonalEmailAddress) .WithUseAsDefault(true) .Build(); var contact2PhoneNumber = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(new TelecommunicationsNumberBuilder(this.Session).WithCountryCode("+1").WithAreaCode("123").WithContactNumber("456").Build()) .WithContactPurpose(new ContactMechanismPurposes(this.Session).GeneralPhoneNumber) .WithUseAsDefault(true) .Build(); var contact1 = new PersonBuilder(this.Session) .WithFirstName($"John{i}") .WithLastName($"Doe{i}") .WithGender(new GenderTypes(this.Session).Male) .WithLocale(new Locales(this.Session).EnglishUnitedStates) .WithPartyContactMechanism(contact1Email) .Build(); var contact2 = new PersonBuilder(this.Session) .WithFirstName($"Jane{i}") .WithLastName($"Doe{i}") .WithGender(new GenderTypes(this.Session).Male) .WithLocale(new Locales(this.Session).EnglishUnitedStates) .WithPartyContactMechanism(contact2PhoneNumber) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(acme) .WithInternalOrganisation(allors) .WithFromDate(DateTime.UtcNow) .Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(acme) .WithInternalOrganisation(allors) .WithFromDate(DateTime.UtcNow) .Build(); new OrganisationContactRelationshipBuilder(this.Session) .WithOrganisation(acme) .WithContact(contact1) .WithContactKind(new OrganisationContactKinds(this.Session).FindBy(M.OrganisationContactKind.Description, "General contact")) .WithFromDate(DateTime.UtcNow) .Build(); new OrganisationContactRelationshipBuilder(this.Session) .WithOrganisation(acme) .WithContact(contact2) .WithContactKind(new OrganisationContactKinds(this.Session).FindBy(M.OrganisationContactKind.Description, "General contact")) .WithFromDate(DateTime.UtcNow) .Build(); var administrator = (Person) new UserGroups(this.Session).Administrators.Members.First; new FaceToFaceCommunicationBuilder(this.Session) .WithDescription($"Meeting {i}") .WithSubject($"meeting {i}") .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithFromParty(contact1) .WithToParty(contact2) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new EmailCommunicationBuilder(this.Session) .WithDescription($"Email {i}") .WithSubject($"email {i}") .WithFromEmail(email2) .WithToEmail(email2) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new LetterCorrespondenceBuilder(this.Session) .WithDescription($"Letter {i}") .WithSubject($"letter {i}") .WithFromParty(administrator) .WithToParty(contact1) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new PhoneCommunicationBuilder(this.Session) .WithDescription($"Phone {i}") .WithSubject($"phone {i}") .WithFromParty(administrator) .WithToParty(contact1) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); var salesOrderItem1 = new SalesOrderItemBuilder(this.Session) .WithDescription("first item") .WithProduct(good1) .WithActualUnitPrice(3000) .WithQuantityOrdered(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var salesOrderItem2 = new SalesOrderItemBuilder(this.Session) .WithDescription("second item") .WithActualUnitPrice(2000) .WithQuantityOrdered(2) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var salesOrderItem3 = new SalesOrderItemBuilder(this.Session) .WithDescription("Fee") .WithActualUnitPrice(100) .WithQuantityOrdered(1) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).Fee) .Build(); var order = new SalesOrderBuilder(this.Session) .WithTakenBy(allors) .WithBillToCustomer(acme) .WithBillToEndCustomerContactMechanism(acmeBillingAddress.ContactMechanism) .WithSalesOrderItem(salesOrderItem1) .WithSalesOrderItem(salesOrderItem2) .WithSalesOrderItem(salesOrderItem3) .WithCustomerReference("a reference number") .WithDescription("Sale of 1 used Aircraft Towbar") .WithVatRegime(new VatRegimes(this.Session).Assessable) .Build(); var salesInvoiceItem1 = new SalesInvoiceItemBuilder(this.Session) .WithDescription("first item") .WithProduct(good1) .WithActualUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var salesInvoiceItem2 = new SalesInvoiceItemBuilder(this.Session) .WithDescription("second item") .WithActualUnitPrice(2000) .WithQuantity(2) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var salesInvoiceItem3 = new SalesInvoiceItemBuilder(this.Session) .WithDescription("Fee") .WithActualUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).Fee) .Build(); var salesInvoice = new SalesInvoiceBuilder(this.Session) .WithBilledFrom(allors) .WithInvoiceNumber("1") .WithBillToCustomer(acme) .WithBillToContactMechanism(acme.PartyContactMechanisms[0].ContactMechanism) .WithBillToEndCustomerContactMechanism(acmeBillingAddress.ContactMechanism) .WithSalesInvoiceItem(salesInvoiceItem1) .WithSalesInvoiceItem(salesInvoiceItem2) .WithSalesInvoiceItem(salesInvoiceItem3) .WithCustomerReference("a reference number") .WithDescription("Sale of 1 used Aircraft Towbar") .WithSalesInvoiceType(new SalesInvoiceTypes(this.Session).SalesInvoice) .WithVatRegime(new VatRegimes(this.Session).Assessable) .Build(); var purchaseInvoiceItem1 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("first item") .WithProduct(good1) .WithActualUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var purchaseInvoiceItem2 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("second item") .WithActualUnitPrice(2000) .WithQuantity(2) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var purchaseInvoiceItem3 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("Fee") .WithActualUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).Fee) .Build(); var purchaseInvoice = new PurchaseInvoiceBuilder(this.Session) .WithBilledTo(allors) .WithInvoiceNumber("1") .WithBilledFrom(acme) .WithPurchaseInvoiceItem(purchaseInvoiceItem1) .WithPurchaseInvoiceItem(purchaseInvoiceItem2) .WithPurchaseInvoiceItem(purchaseInvoiceItem3) .WithCustomerReference("a reference number") .WithDescription("Purchase of 1 used Aircraft Towbar") .WithPurchaseInvoiceType(new PurchaseInvoiceTypes(this.Session).PurchaseInvoice) .WithVatRegime(new VatRegimes(this.Session).Assessable) .Build(); } this.Session.Derive(); }
public void GivenNonSerialisedNonUnifiedPart_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 NonUnifiedPartBuilder(this.Session).WithNonSerialisedDefaults(this.InternalOrganisation).Build(); var good = new NonUnifiedGoodBuilder(this.Session) .WithName(part.Name) .WithPart(part) .WithVatRate(new VatRates(this.Session).Zero) .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(good).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(good).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(good).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(good).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(good).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); }
public void GivenOrderItemForGoodWithNotEnoughStockAvailable_WhenConfirming_ThenQuantitiesReservedAndRequestsShippingAreEqualToInventoryAvailableToPromise() { this.InstantiateObjects(this.DatabaseSession); var inventoryItem = (NonSerializedInventoryItem)this.DatabaseSession.Instantiate(this.good.FinishedGood.InventoryItemsWherePart[0]); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(110).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var item1 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(120) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item1); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(120, item1.QuantityOrdered); Assert.AreEqual(0, item1.QuantityPicked); Assert.AreEqual(0, item1.QuantityShipped); Assert.AreEqual(110, item1.QuantityPendingShipment); Assert.AreEqual(120, item1.QuantityReserved); Assert.AreEqual(10, item1.QuantityShortFalled); Assert.AreEqual(0, item1.QuantityRequestsShipping); Assert.AreEqual(120, item1.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(0, item1.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(110, item1.ReservedFromInventoryItem.QuantityOnHand); var item2 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(10) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item2); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(120, item1.QuantityOrdered); Assert.AreEqual(0, item1.QuantityPicked); Assert.AreEqual(0, item1.QuantityShipped); Assert.AreEqual(110, item1.QuantityPendingShipment); Assert.AreEqual(120, item1.QuantityReserved); Assert.AreEqual(10, item1.QuantityShortFalled); Assert.AreEqual(0, item1.QuantityRequestsShipping); Assert.AreEqual(10, item2.QuantityOrdered); Assert.AreEqual(0, item2.QuantityPicked); Assert.AreEqual(0, item2.QuantityShipped); Assert.AreEqual(0, item2.QuantityPendingShipment); Assert.AreEqual(10, item2.QuantityReserved); Assert.AreEqual(10, item2.QuantityShortFalled); Assert.AreEqual(0, item2.QuantityRequestsShipping); Assert.AreEqual(130, item2.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(0, item2.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(110, item2.ReservedFromInventoryItem.QuantityOnHand); }
public void GivenSalesOrderBelowOrderThreshold_WhenOrderIsConfirmed_ThenOrderIsNotShipped() { Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation.StoresWhereOwner.First.OrderThreshold = 1; var assessable = new VatRegimes(this.DatabaseSession).Assessable; var vatRate0 = new VatRateBuilder(this.DatabaseSession).WithRate(0).Build(); assessable.VatRate = vatRate0; var good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate0) .WithName("good1") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); var inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good).Build(); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).ShippingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.DatabaseSession) .WithCustomer(customer) .WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation) .Build(); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithVatRegime(assessable) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good) .WithQuantityOrdered(1) .WithActualUnitPrice(0.1M) .Build(); order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).RequestsApproval, order.CurrentObjectState); }
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 GivenShipmentReceiptWhenDerivingThenInventoryItemQuantityOnHandIsUpdated() { var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).ShippingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var good = new GoodBuilder(this.DatabaseSession) .WithName("Good") .WithSku("10101") .WithVatRate(new VatRateBuilder(this.DatabaseSession).WithRate(21).Build()) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good).Build(); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(20).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var order1 = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithDeliveryDate(DateTime.UtcNow) .Build(); var salesItem = new SalesOrderItemBuilder(this.DatabaseSession).WithDescription("item1").WithProduct(good).WithQuantityOrdered(30).WithActualUnitPrice(15).Build(); order1.AddSalesOrderItem(salesItem); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); order1.Confirm(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var sessionInventoryItem = (NonSerializedInventoryItem)this.DatabaseSession.Instantiate(inventoryItem); var sessionSalesItem = (SalesOrderItem)this.DatabaseSession.Instantiate(salesItem); var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); new SupplierRelationshipBuilder(this.DatabaseSession).WithSupplier(supplier).WithInternalOrganisation(internalOrganisation).Build(); Assert.AreEqual(20, sessionSalesItem.QuantityPendingShipment); Assert.AreEqual(30, sessionSalesItem.QuantityReserved); Assert.AreEqual(10, sessionSalesItem.QuantityShortFalled); var order = new PurchaseOrderBuilder(this.DatabaseSession).WithTakenViaSupplier(supplier).Build(); var item1 = new PurchaseOrderItemBuilder(this.DatabaseSession).WithProduct(good).WithQuantityOrdered(10).Build(); order.AddPurchaseOrderItem(item1); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); order.Confirm(); var shipment = new PurchaseShipmentBuilder(this.DatabaseSession).WithShipFromParty(supplier).Build(); var shipmentItem = new ShipmentItemBuilder(this.DatabaseSession).WithGood(good).Build(); shipment.AddShipmentItem(shipmentItem); new ShipmentReceiptBuilder(this.DatabaseSession) .WithQuantityAccepted(10) .WithShipmentItem(shipmentItem) .WithOrderItem(item1) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); shipment.AppsComplete(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); Assert.AreEqual(30, sessionInventoryItem.QuantityOnHand); Assert.AreEqual(30, sessionSalesItem.QuantityPendingShipment); Assert.AreEqual(30, sessionSalesItem.QuantityReserved); Assert.AreEqual(0, sessionSalesItem.QuantityShortFalled); }
public void GivenSalesOrder_WhenDerivingSalesReps_ThenSalesRepsAreCollectedFromSalesOrderItems() { var salesrep1 = new PersonBuilder(this.DatabaseSession).WithLastName("salesrep for child product category").Build(); var salesrep2 = new PersonBuilder(this.DatabaseSession).WithLastName("salesrep for parent category").Build(); var salesrep3 = new PersonBuilder(this.DatabaseSession).WithLastName("salesrep for everything else").Build(); var parentProductCategory = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("parent").Build(); var childProductCategory = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("child").WithParent(parentProductCategory).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var customer = new OrganisationBuilder(this.DatabaseSession).WithName("company").Build(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession) .WithSalesRepresentative(salesrep1) .WithCustomer(customer) .WithProductCategory(childProductCategory) .Build(); new SalesRepRelationshipBuilder(this.DatabaseSession) .WithSalesRepresentative(salesrep2) .WithCustomer(customer) .WithProductCategory(parentProductCategory) .Build(); new SalesRepRelationshipBuilder(this.DatabaseSession) .WithSalesRepresentative(salesrep3) .WithCustomer(customer) .Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithName("good") .WithVatRate(new VatRateBuilder(this.DatabaseSession).WithRate(21).Build()) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithProductCategory(childProductCategory) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithName("good") .WithVatRate(new VatRateBuilder(this.DatabaseSession).WithRate(21).Build()) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithProductCategory(parentProductCategory) .Build(); var good3 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithName("good") .WithVatRate(new VatRateBuilder(this.DatabaseSession).WithRate(21).Build()) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good1) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); order.AddSalesOrderItem(item1); this.DatabaseSession.Derive(true); Assert.AreEqual(1, order.SalesReps.Count); Assert.Contains(salesrep1, order.SalesReps); var item2 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good2) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); order.AddSalesOrderItem(item2); this.DatabaseSession.Derive(true); Assert.AreEqual(2, order.SalesReps.Count); Assert.Contains(salesrep1, order.SalesReps); Assert.Contains(salesrep2, order.SalesReps); var item3 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good3) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); order.AddSalesOrderItem(item3); this.DatabaseSession.Derive(true); Assert.AreEqual(3, order.SalesReps.Count); Assert.Contains(salesrep1, order.SalesReps); Assert.Contains(salesrep2, order.SalesReps); Assert.Contains(salesrep3, order.SalesReps); }
public void GivenOrderItem_WhenBuild_ThenPostBuildRelationsMustExist() { this.InstantiateObjects(this.DatabaseSession); var item = new SalesOrderItemBuilder(this.DatabaseSession).Build(); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Created, item.CurrentObjectState); }
public void GivenSalesOrder_WhenOrderItemIsWithoutBasePrice_ThenItemIsInvalid() { var billToCustomer = new PersonBuilder(this.DatabaseSession).WithLastName("person1").Build(); var shipToCustomer = new PersonBuilder(this.DatabaseSession).WithLastName("person2").Build(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(billToCustomer).WithInternalOrganisation(internalOrganisation).Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(shipToCustomer).WithInternalOrganisation(internalOrganisation).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var part1 = new FinishedGoodBuilder(this.DatabaseSession).WithName("part1").Build(); var part2 = new FinishedGoodBuilder(this.DatabaseSession).WithName("part2").Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithFinishedGood(part1) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate21) .WithName("good1") .WithFinishedGood(part2) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(billToCustomer) .WithShipToCustomer(shipToCustomer) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(3).WithActualUnitPrice(15).Build(); var item4 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(4).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); order.AddSalesOrderItem(item4); order.Confirm(); this.DatabaseSession.Derive(true); item4.RemoveActualUnitPrice(); this.DatabaseSession.Derive(true); Assert.AreEqual(0, item4.UnitBasePrice); Assert.AreEqual(3, order.ValidOrderItems.Count); Assert.Contains(item1, order.ValidOrderItems); Assert.Contains(item2, order.ValidOrderItems); Assert.Contains(item3, order.ValidOrderItems); }
public void GivenOrderItem_WhenObjectStateIsPartiallyShipped_ThenProductChangeIsNotAllowed() { var administrator = new PersonBuilder(this.DatabaseSession).WithFirstName("Koen").WithUserName("admin").Build(); var administrators = new UserGroups(this.DatabaseSession).Administrators; administrators.AddMember(administrator); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); this.InstantiateObjects(this.DatabaseSession); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("admin", "Forms"), new string[0]); var inventoryItem = (NonSerializedInventoryItem)this.part.InventoryItemsWherePart[0]; inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(1).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)this.order.ShipToAddress.ShipmentsWhereShipToAddress[0]; var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; pickList.Picker = new Persons(this.DatabaseSession).FindBy(Persons.Meta.LastName, "orderProcessor"); pickList.SetPicked(); this.DatabaseSession.Derive(true); var package = new ShipmentPackageBuilder(this.DatabaseSession).Build(); shipment.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in shipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.DatabaseSession).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.DatabaseSession.Derive(true); shipment.Ship(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).PartiallyShipped, item.CurrentObjectState); var acl = new AccessControlList(item, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.CanWrite(SalesOrderItems.Meta.Product)); }
public void GivenConfirmedOrder_WhenOrderIsCancelled_ThenNonSerializedInventoryQuantitiesAreReleased() { var billToCustomer = new PersonBuilder(this.DatabaseSession).WithLastName("person1").Build(); var shipToCustomer = new PersonBuilder(this.DatabaseSession).WithLastName("person2").Build(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(billToCustomer).WithInternalOrganisation(internalOrganisation).Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(shipToCustomer).WithInternalOrganisation(internalOrganisation).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var shipToContactMechanism = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var part1 = new FinishedGoodBuilder(this.DatabaseSession).WithName("part1").Build(); var part2 = new FinishedGoodBuilder(this.DatabaseSession).WithName("part2").Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithFinishedGood(part1) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate21) .WithName("good1") .WithFinishedGood(part2) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(billToCustomer) .WithShipToCustomer(shipToCustomer) .WithShipToAddress(shipToContactMechanism) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(3).WithActualUnitPrice(15).Build(); var item4 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(4).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); order.AddSalesOrderItem(item4); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(3, item1.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(0, item1.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(7, item3.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(0, item3.ReservedFromInventoryItem.AvailableToPromise); order.Cancel(); this.DatabaseSession.Derive(true); Assert.AreEqual(0, item1.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(0, item1.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(0, item3.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(0, item3.ReservedFromInventoryItem.AvailableToPromise); }
public void GivenConfirmedOrderItemForGood_WhenQuantityOrderedIsDecreased_ThenQuantityMayNotBeLessThanQuantityShippped() { this.InstantiateObjects(this.DatabaseSession); var manual = new OrderKindBuilder(this.DatabaseSession).WithDescription("manual").WithScheduleManually(true).Build(); var testPart = new FinishedGoodBuilder(this.DatabaseSession).WithName("part1").Build(); var testgood = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(this.vatRate21) .WithName("good1") .WithFinishedGood(testPart) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good1InventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithPart(testPart).Build(); good1InventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(110).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(testgood) .WithQuantityOrdered(120) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item); this.order.OrderKind = manual; this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); item.QuantityShipNow = 100; this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)this.order.ShipToAddress.ShipmentsWhereShipToAddress[0]; var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; pickList.Picker = new Persons(this.DatabaseSession).FindBy(Persons.Meta.LastName, "orderProcessor"); pickList.SetPicked(); this.DatabaseSession.Derive(true); var package = new ShipmentPackageBuilder(this.DatabaseSession).Build(); shipment.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in shipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.DatabaseSession).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.DatabaseSession.Derive(true); shipment.Ship(); this.DatabaseSession.Derive(true); Assert.AreEqual(100, item.QuantityShipped); item.QuantityOrdered = 90; var derivationLog = this.DatabaseSession.Derive(); Assert.IsTrue(derivationLog.HasErrors); }
public void GivenSalesOrderForCustomerExceedingCreditLimit_WhenOrderIsConfirmed_ThenOrderRequestsApproval() { var productItem = new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem; var contactMechanism = new ContactMechanisms(this.DatabaseSession).Extent().First; var assessable = new VatRegimes(this.DatabaseSession).Assessable; var vatRate0 = new VatRateBuilder(this.DatabaseSession).WithRate(0).Build(); assessable.VatRate = vatRate0; var good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate0) .WithName("good1") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); var inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good).Build(); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).ShippingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.DatabaseSession) .WithCustomer(customer) .WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation) .WithCreditLimit(100M) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .WithInvoiceDate(DateTime.UtcNow.AddYears(-1)) .Build(); var invoiceItem = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good).WithQuantity(10).WithActualUnitPrice(11).WithSalesInvoiceItemType(productItem).Build(); invoice.AddSalesInvoiceItem(invoiceItem); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithVatRegime(assessable) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good) .WithQuantityOrdered(10) .WithActualUnitPrice(5) .Build(); order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).RequestsApproval, order.CurrentObjectState); Assert.AreEqual(0, item.QuantityReserved); Assert.AreEqual(0, item.QuantityPendingShipment); Assert.AreEqual(0, item.QuantityRequestsShipping); Assert.AreEqual(0, item.QuantityShortFalled); order.Approve(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).InProcess, order.CurrentObjectState); Assert.AreEqual(10, item.QuantityReserved); Assert.AreEqual(10, item.QuantityPendingShipment); Assert.AreEqual(0, item.QuantityRequestsShipping); Assert.AreEqual(0, item.QuantityShortFalled); }
public void GivenConfirmedOrderItemForGood_WhenShipmentIsCreated_ThenQuantitiesRequestsShippingIsSetToZero() { this.InstantiateObjects(this.DatabaseSession); var inventoryItem = (NonSerializedInventoryItem)this.DatabaseSession.Instantiate(this.good.FinishedGood.InventoryItemsWherePart[0]); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(110).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(100) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(100, item.QuantityOrdered); Assert.AreEqual(0, item.QuantityPicked); Assert.AreEqual(0, item.QuantityShipped); Assert.AreEqual(100, item.QuantityPendingShipment); Assert.AreEqual(100, item.QuantityReserved); Assert.AreEqual(0, item.QuantityShortFalled); Assert.AreEqual(0, item.QuantityRequestsShipping); Assert.AreEqual(100, item.ReservedFromInventoryItem.QuantityCommittedOut); Assert.AreEqual(10, item.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(110, item.ReservedFromInventoryItem.QuantityOnHand); Assert.AreEqual(100, item.OrderShipmentsWhereSalesOrderItem[0].Quantity); }
public void GivenSalesOrderForItemsThatAreAvailable_WhenShipped_ThenOrderIsCompleted() { var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).ShippingAddress) .WithUseAsDefault(true) .Build(); var billToMechelen = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).BillingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).WithPartyContactMechanism(billToMechelen).Build(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate21) .WithName("good2") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); var good1InventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good1).Build(); good1InventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var good2InventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good2).Build(); good2InventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithShipToAddress(mechelenAddress) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)mechelenAddress.ShipmentsWhereShipToAddress[0]; var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; pickList.Picker = new Persons(this.DatabaseSession).FindBy(Persons.Meta.LastName, "orderProcessor"); pickList.SetPicked(); this.DatabaseSession.Derive(true); var package = new ShipmentPackageBuilder(this.DatabaseSession).Build(); shipment.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in shipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.DatabaseSession).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.DatabaseSession.Derive(true); shipment.Ship(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).Completed, order.CurrentObjectState); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).Shipped, order.CurrentShipmentStatus.SalesOrderObjectState); Assert.IsFalse(order.ExistCurrentPaymentStatus); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Completed, item1.CurrentObjectState); Assert.IsFalse(item1.ExistCurrentPaymentStatus); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item1.CurrentShipmentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Completed, item2.CurrentObjectState); Assert.IsFalse(item2.ExistCurrentPaymentStatus); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item2.CurrentShipmentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Completed, item3.CurrentObjectState); Assert.IsFalse(item3.ExistCurrentPaymentStatus); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item3.CurrentShipmentStatus.SalesOrderItemObjectState); }
public void GivenManuallyScheduledOrderItem_WhenScheduled_ThenQuantityCannotExceedInventoryAvailableToPromise() { this.InstantiateObjects(this.DatabaseSession); var inventoryItem = (NonSerializedInventoryItem)this.part.InventoryItemsWherePart.First; inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(3).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var manual = new OrderKindBuilder(this.DatabaseSession).WithDescription("manual").WithScheduleManually(true).Build(); var order1 = new SalesOrderBuilder(this.DatabaseSession) .WithShipToCustomer(this.shipToCustomer) .WithBillToCustomer(this.billToCustomer) .WithShipToAddress(this.shipToContactMechanismMechelen) .WithTakenByInternalOrganisation(this.internalOrganisation) .WithOrderKind(manual) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(5) .WithActualUnitPrice(5) .Build(); order1.AddSalesOrderItem(item1); this.DatabaseSession.Derive(true); order1.Confirm(); this.DatabaseSession.Derive(true); item1.QuantityShipNow = 5; var derivationLog = this.DatabaseSession.Derive(); Assert.IsTrue(derivationLog.HasErrors); Assert.Contains(SalesOrderItems.Meta.QuantityShipNow, derivationLog.Errors[0].RoleTypes); item1.QuantityShipNow = 3; derivationLog = this.DatabaseSession.Derive(); Assert.IsFalse(derivationLog.HasErrors); Assert.AreEqual(3, item1.QuantityPendingShipment); }
public void GivenPickList_WhenPicked_ThenInventoryIsAdjustedAndOrderItemsQuantityPickedIsSet() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var supplier = new OrganisationBuilder(this.Session).WithName("supplier").Build(); var customer = new PersonBuilder(this.Session).WithLastName("person1").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(DateTime.UtcNow).WithCustomer(customer).Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); var good2 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good2"); new SupplierOfferingBuilder(this.Session) .WithPart(good1.Part) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .WithPrice(7) .Build(); this.Session.Derive(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good1.Part).Build(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good2.Part).Build(); this.Session.Derive(); var good1Inventory = (NonSerialisedInventoryItem)good1.Part.InventoryItemsWherePart.First; var good2Inventory = (NonSerialisedInventoryItem)good2.Part.InventoryItemsWherePart.First; var colorWhite = new ColourBuilder(this.Session) .WithName("white") .Build(); var extraLarge = new SizeBuilder(this.Session) .WithName("Extra large") .Build(); var order = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithVatRegime(new VatRegimes(this.Session).Export) .Build(); var item1 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.Session).WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductFeatureItem).WithProductFeature(colorWhite).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.Session).WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductFeatureItem).WithProductFeature(extraLarge).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); item1.AddOrderedWithFeature(item2); item1.AddOrderedWithFeature(item3); var item4 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item5 = new SalesOrderItemBuilder(this.Session).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); order.AddSalesOrderItem(item4); order.AddSalesOrderItem(item5); this.Session.Derive(); order.Confirm(); this.Session.Derive(); var shipment = (CustomerShipment)mechelenAddress.ShipmentsWhereShipToAddress[0]; var pickList = good1.Part.InventoryItemsWherePart[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; pickList.Picker = new People(this.Session).FindBy(M.Person.LastName, "orderProcessor"); //// item5: only 4 out of 5 are actually picked foreach (PickListItem pickListItem in pickList.PickListItems) { if (pickListItem.RequestedQuantity == 5) { pickListItem.ActualQuantity = 4; } } pickList.SetPicked(); this.Session.Derive(); //// all orderitems have same physical finished good, so there is only one picklist item. Assert.Equal(1, item1.QuantityPicked); Assert.Equal(0, item1.QuantityReserved); Assert.Equal(0, item1.QuantityRequestsShipping); Assert.Equal(2, item4.QuantityPicked); Assert.Equal(0, item4.QuantityReserved); Assert.Equal(0, item4.QuantityRequestsShipping); Assert.Equal(4, item5.QuantityPicked); Assert.Equal(1, item5.QuantityReserved); Assert.Equal(0, item5.QuantityRequestsShipping); Assert.Equal(97, good1Inventory.QuantityOnHand); Assert.Equal(0, good1Inventory.QuantityCommittedOut); Assert.Equal(96, good2Inventory.QuantityOnHand); Assert.Equal(1, good2Inventory.QuantityCommittedOut); }
public void GivenOrderItemForGoodWithoutSelectedInventoryItem_WhenConfirming_ThenReservedFromInventoryItemIsFromDefaultFacility() { this.InstantiateObjects(this.DatabaseSession); var good2PurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR")) .WithFromDate(DateTime.UtcNow) .WithPrice(7) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(this.vatRate21) .WithName("good2") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithSupplier(this.supplier) .WithFromDate(DateTime.UtcNow) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good2) .WithFromDate(DateTime.UtcNow) .WithSupplier(this.supplier) .WithProductPurchasePrice(good2PurchasePrice) .Build(); //// good with part as inventory item var item1 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good2) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item1); this.order.AddSalesOrderItem(item2); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(new Warehouses(this.DatabaseSession).FindBy(Warehouses.Meta.Name, "facility"), item1.ReservedFromInventoryItem.Facility); Assert.AreEqual(new Warehouses(this.DatabaseSession).FindBy(Warehouses.Meta.Name, "facility"), item2.ReservedFromInventoryItem.Facility); }
public void GivenPickList_WhenActualQuantityPickedIsLess_ThenShipmentItemQuantityIsAdjusted() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var supplier = new OrganisationBuilder(this.Session).WithName("supplier").Build(); var customer = new PersonBuilder(this.Session).WithLastName("person1").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(DateTime.UtcNow).WithCustomer(customer).Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); var good2 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good2"); new SupplierOfferingBuilder(this.Session) .WithPart(good1.Part) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithPrice(7) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .Build(); new SupplierOfferingBuilder(this.Session) .WithPart(good2.Part) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithPrice(7) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .Build(); this.Session.Derive(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good1.Part).Build(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good2.Part).Build(); this.Session.Derive(); var order = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var item1 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.Session).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); this.Session.Derive(); order.Confirm(); this.Session.Derive(); var pickList = good1.Part.InventoryItemsWherePart[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; pickList.Picker = new People(this.Session).FindBy(M.Person.LastName, "orderProcessor"); //// item3: only 4 out of 5 are actually picked PickListItem adjustedPicklistItem = null; foreach (PickListItem pickListItem in pickList.PickListItems) { if (pickListItem.RequestedQuantity == 5) { adjustedPicklistItem = pickListItem; } } var itemIssuance = adjustedPicklistItem.ItemIssuancesWherePickListItem[0]; var shipmentItem = adjustedPicklistItem.ItemIssuancesWherePickListItem[0].ShipmentItem; Assert.Equal(5, itemIssuance.Quantity); Assert.Equal(5, shipmentItem.Quantity); adjustedPicklistItem.ActualQuantity = 4; pickList.SetPicked(); this.Session.Derive(); Assert.Equal(4, itemIssuance.Quantity); Assert.Equal(4, shipmentItem.Quantity); }
public void GivenOrderItemWithOrderedWithFeature_WhenDeriving_ThenOrderedWithFeatureOrderItemMustBeForProductFeature() { this.InstantiateObjects(this.DatabaseSession); var salesOrder = new SalesOrderBuilder(this.DatabaseSession) .WithTakenByInternalOrganisation(this.internalOrganisation) .WithShipToAddress(this.shipToContactMechanismMechelen) .WithBillToCustomer(this.billToCustomer) .Build(); var productOrderItem = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); var productFeatureOrderItem = new SalesOrderItemBuilder(this.DatabaseSession) .WithProductFeature(this.feature1) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); productOrderItem.AddOrderedWithFeature(productFeatureOrderItem); salesOrder.AddSalesOrderItem(productOrderItem); salesOrder.AddSalesOrderItem(productFeatureOrderItem); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); productFeatureOrderItem.RemoveProductFeature(); productFeatureOrderItem.Product = this.good; Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); }
public void GivenSalesOrder_WhenShipmentIsCreated_ThenOrderItemsAreAddedToPickList() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var supplier = new OrganisationBuilder(this.Session).WithName("supplier").Build(); var customer = new PersonBuilder(this.Session).WithLastName("person1").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(DateTime.UtcNow).WithCustomer(customer).Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); var good2 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good2"); new SupplierOfferingBuilder(this.Session) .WithPart(good1.Part) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .WithPrice(7) .Build(); new SupplierOfferingBuilder(this.Session) .WithPart(good2.Part) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .WithPrice(7) .Build(); this.Session.Derive(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).PhysicalCount).WithPart(good1.Part).Build(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).PhysicalCount).WithPart(good2.Part).Build(); this.Session.Derive(); var good1Inventory = good1.Part.InventoryItemsWherePart.First; var good2Inventory = good2.Part.InventoryItemsWherePart.First; var order = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var item1 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.Session).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); this.Session.Derive(); order.Confirm(); this.Session.Derive(); var pickList = good1.Part.InventoryItemsWherePart[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; Assert.Equal(2, pickList.PickListItems.Count); var extent1 = pickList.PickListItems; extent1.Filter.AddEquals(M.PickListItem.InventoryItem, good1Inventory); Assert.Equal(3, extent1.First.RequestedQuantity); var extent2 = pickList.PickListItems; extent2.Filter.AddEquals(M.PickListItem.InventoryItem, good2Inventory); Assert.Equal(5, extent2.First.RequestedQuantity); }
public void GivenOrderItemWithoutCustomer_WhenDeriving_ShipToAddressIsNull() { this.InstantiateObjects(this.DatabaseSession); var salesOrder = new SalesOrderBuilder(this.DatabaseSession).Build(); var orderItem = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(this.good).WithQuantityOrdered(1).Build(); salesOrder.AddSalesOrderItem(orderItem); this.DatabaseSession.Derive(true); Assert.IsNull(orderItem.ShipToAddress); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); }
public void GivenMultipleOrders_WhenCombinedPickListIsPicked_ThenSingleShipmentIsPickedState() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var supplier = new OrganisationBuilder(this.Session).WithName("supplier").Build(); var customer = new PersonBuilder(this.Session).WithLastName("person1").WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(DateTime.UtcNow).WithCustomer(customer).Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); var good2 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good2"); new SupplierOfferingBuilder(this.Session) .WithPart(good1.Part) .WithFromDate(DateTime.UtcNow) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .WithPrice(7) .WithSupplier(supplier) .Build(); new SupplierOfferingBuilder(this.Session) .WithPart(good2.Part) .WithFromDate(DateTime.UtcNow) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .WithPrice(7) .WithSupplier(supplier) .Build(); this.Session.Derive(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).PhysicalCount).WithPart(good1.Part).Build(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).PhysicalCount).WithPart(good2.Part).Build(); this.Session.Derive(); var order1 = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var item1 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.Session).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order1.AddSalesOrderItem(item1); order1.AddSalesOrderItem(item2); order1.AddSalesOrderItem(item3); this.Session.Derive(); order1.Confirm(); this.Session.Derive(); var order2 = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var itema = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var itemb = new SalesOrderItemBuilder(this.Session).WithProduct(good2).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); order2.AddSalesOrderItem(itema); order2.AddSalesOrderItem(itemb); this.Session.Derive(); order2.Confirm(); this.Session.Derive(); var pickList = good1.Part.InventoryItemsWherePart[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; pickList.Picker = new People(this.Session).FindBy(M.Person.LastName, "orderProcessor"); pickList.SetPicked(); this.Session.Derive(); Assert.Single(customer.ShipmentsWhereBillToParty); var customerShipment = (CustomerShipment)customer.ShipmentsWhereBillToParty.First; Assert.Equal(new CustomerShipmentStates(this.Session).Picked, customerShipment.CustomerShipmentState); }
public void GivenOrderItemWithoutVatRegime_WhenDeriving_ThenDerivedVatRegimeIsFromOrder() { this.InstantiateObjects(this.DatabaseSession); var salesOrder = new SalesOrderBuilder(this.DatabaseSession) .WithTakenByInternalOrganisation(this.internalOrganisation) .WithShipToCustomer(this.shipToCustomer) .WithBillToCustomer(this.billToCustomer) .WithShipToAddress(this.shipToContactMechanismMechelen) .WithVatRegime(new VatRegimes(this.DatabaseSession).Export) .Build(); var orderItem = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(this.good).WithQuantityOrdered(1).Build(); salesOrder.AddSalesOrderItem(orderItem); this.DatabaseSession.Derive(true); Assert.AreEqual(salesOrder.VatRegime, orderItem.VatRegime); }
public void GivenInventoryItem_WhenQuantityOnHandIsRaised_ThenSalesOrderItemsWithQuantityShortFalledAreUpdated() { var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var category = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("category").Build(); var good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithPrimaryProductCategory(category) .Build(); var inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good).Build(); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(5).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).ShippingAddress) .WithUseAsDefault(true) .Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("customer").WithPartyContactMechanism(shipToMechelen).Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var order1 = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithDeliveryDate(DateTime.UtcNow) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithDescription("item1").WithProduct(good).WithQuantityOrdered(10).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession).WithDescription("item2").WithProduct(good).WithQuantityOrdered(20).WithActualUnitPrice(15).Build(); order1.AddSalesOrderItem(item1); order1.AddSalesOrderItem(item2); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); order1.Confirm(); this.DatabaseSession.Derive(true); var order2 = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithDeliveryDate(DateTime.UtcNow.AddDays(1)) .Build(); var item3 = new SalesOrderItemBuilder(this.DatabaseSession).WithDescription("item3").WithProduct(good).WithQuantityOrdered(10).WithActualUnitPrice(15).Build(); var item4 = new SalesOrderItemBuilder(this.DatabaseSession).WithDescription("item4").WithProduct(good).WithQuantityOrdered(20).WithActualUnitPrice(15).Build(); order2.AddSalesOrderItem(item3); order2.AddSalesOrderItem(item4); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); order2.Confirm(); this.DatabaseSession.Derive(true); //Assert.AreEqual(0, item1.QuantityRequestsShipping); //Assert.AreEqual(5, item1.QuantityPendingShipment); //Assert.AreEqual(10, item1.QuantityReserved); //Assert.AreEqual(5, item1.QuantityShortFalled); //Assert.AreEqual(0, item2.QuantityRequestsShipping); //Assert.AreEqual(0, item2.QuantityPendingShipment); //Assert.AreEqual(20, item2.QuantityReserved); //Assert.AreEqual(20, item2.QuantityShortFalled); //Assert.AreEqual(0, item3.QuantityRequestsShipping); //Assert.AreEqual(0, item3.QuantityPendingShipment); //Assert.AreEqual(10, item3.QuantityReserved); //Assert.AreEqual(10, item3.QuantityShortFalled); //Assert.AreEqual(0, item4.QuantityRequestsShipping); //Assert.AreEqual(0, item4.QuantityPendingShipment); //Assert.AreEqual(20, item4.QuantityReserved); //Assert.AreEqual(20, item4.QuantityShortFalled); Assert.AreEqual(0, item1.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(5, item1.ReservedFromInventoryItem.QuantityOnHand); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(15).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); //// Orderitems are sorted as follows: item1, item2, item3, item4 //Assert.AreEqual(0, item1.QuantityRequestsShipping); //Assert.AreEqual(10, item1.QuantityPendingShipment); //Assert.AreEqual(10, item1.QuantityReserved); //Assert.AreEqual(0, item1.QuantityShortFalled); //Assert.AreEqual(0, item2.QuantityRequestsShipping); //Assert.AreEqual(10, item2.QuantityPendingShipment); //Assert.AreEqual(20, item2.QuantityReserved); //Assert.AreEqual(10, item2.QuantityShortFalled); //Assert.AreEqual(0, item3.QuantityRequestsShipping); //Assert.AreEqual(0, item3.QuantityPendingShipment); //Assert.AreEqual(10, item3.QuantityReserved); //Assert.AreEqual(10, item3.QuantityShortFalled); //Assert.AreEqual(0, item4.QuantityRequestsShipping); //Assert.AreEqual(0, item4.QuantityPendingShipment); //Assert.AreEqual(20, item4.QuantityReserved); //Assert.AreEqual(20, item4.QuantityShortFalled); Assert.AreEqual(0, item1.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(20, item1.ReservedFromInventoryItem.QuantityOnHand); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(85).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); //// Orderitems are sorted as follows: item2, item1, item4, item 3 Assert.AreEqual(0, item1.QuantityRequestsShipping); Assert.AreEqual(10, item1.QuantityPendingShipment); Assert.AreEqual(10, item1.QuantityReserved); Assert.AreEqual(0, item1.QuantityShortFalled); Assert.AreEqual(0, item2.QuantityRequestsShipping); Assert.AreEqual(20, item2.QuantityPendingShipment); Assert.AreEqual(20, item2.QuantityReserved); Assert.AreEqual(0, item2.QuantityShortFalled); Assert.AreEqual(0, item3.QuantityRequestsShipping); Assert.AreEqual(10, item3.QuantityPendingShipment); Assert.AreEqual(10, item3.QuantityReserved); Assert.AreEqual(0, item3.QuantityShortFalled); Assert.AreEqual(0, item4.QuantityRequestsShipping); Assert.AreEqual(20, item4.QuantityPendingShipment); Assert.AreEqual(20, item4.QuantityReserved); Assert.AreEqual(0, item4.QuantityShortFalled); Assert.AreEqual(45, item1.ReservedFromInventoryItem.AvailableToPromise); Assert.AreEqual(105, item1.ReservedFromInventoryItem.QuantityOnHand); }
public void GivenOrderItemWithPendingShipmentAndItemsShortFalled_WhenQuantityOrderedIsDecreased_ThenItemsShortFalledIsDecreasedAndShipmentIsLeftUnchanged() { this.InstantiateObjects(this.DatabaseSession); var inventoryItem = (NonSerializedInventoryItem)this.part.InventoryItemsWherePart.First; inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(10).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(30) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(20, item.QuantityShortFalled); var shipment = (CustomerShipment)item.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; Assert.AreEqual(10, shipment.ShipmentItems[0].Quantity); var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; Assert.AreEqual(10, pickList.PickListItems[0].RequestedQuantity); item.QuantityOrdered = 11; this.DatabaseSession.Derive(true); Assert.AreEqual(1, item.QuantityShortFalled); Assert.AreEqual(10, shipment.ShipmentItems[0].Quantity); Assert.AreEqual(10, pickList.PickListItems[0].RequestedQuantity); item.QuantityOrdered = 9; this.DatabaseSession.Derive(true); Assert.AreEqual(0, item.QuantityShortFalled); Assert.AreEqual(9, shipment.ShipmentItems[0].Quantity); Assert.AreEqual(9, pickList.PickListItems[0].RequestedQuantity); }
public void GivenPickList_WhenActualQuantityPickedIsLess_ThenShipmentItemQuantityIsAdjusted() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithPostalAddressBoundary(mechelen) .WithAddress1("Haverwerf 15").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).ShippingAddress) .WithUseAsDefault(true) .Build(); var supplier = new OrganisationBuilder(this.Session).WithName("supplier").Build(); var customer = new PersonBuilder(this.Session).WithLastName("person1") .WithPartyContactMechanism(shipToMechelen).Build(); new CustomerRelationshipBuilder(this.Session).WithFromDate(this.Session.Now()).WithCustomer(customer) .Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier) .WithFromDate(this.Session.Now()) .Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); var good2 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good2"); new SupplierOfferingBuilder(this.Session) .WithPart(good1.Part) .WithSupplier(supplier) .WithFromDate(this.Session.Now()) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithPrice(7) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .Build(); new SupplierOfferingBuilder(this.Session) .WithPart(good2.Part) .WithSupplier(supplier) .WithFromDate(this.Session.Now()) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithPrice(7) .WithCurrency(new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR")) .Build(); this.Session.Derive(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100) .WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good1.Part).Build(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100) .WithReason(new InventoryTransactionReasons(this.Session).Unknown).WithPart(good2.Part).Build(); this.Session.Derive(); var order = new SalesOrderBuilder(this.Session) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var item1 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(1).WithAssignedUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.Session).WithProduct(good1).WithQuantityOrdered(2).WithAssignedUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.Session).WithProduct(good2).WithQuantityOrdered(5).WithAssignedUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); this.Session.Derive(); order.SetReadyForPosting(); this.Session.Derive(); order.Post(); this.Session.Derive(); order.Accept(); this.Session.Derive(); var shipment = (CustomerShipment)mechelenAddress.ShipmentsWhereShipToAddress[0]; shipment.Pick(); this.Session.Derive(); var pickList = good1.Part.InventoryItemsWherePart[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; pickList.Picker = this.OrderProcessor; //// item3: only 4 out of 5 are actually picked PickListItem adjustedPicklistItem = null; foreach (PickListItem pickListItem in pickList.PickListItems) { if (pickListItem.Quantity == 5) { adjustedPicklistItem = pickListItem; } } var itemIssuance = adjustedPicklistItem.ItemIssuancesWherePickListItem[0]; var shipmentItem = adjustedPicklistItem.ItemIssuancesWherePickListItem[0].ShipmentItem; Assert.Equal(2, shipment.ShipmentItems.Count); Assert.Equal(5, itemIssuance.Quantity); Assert.Equal(5, shipmentItem.Quantity); Assert.Equal(5, item3.QuantityPendingShipment); adjustedPicklistItem.QuantityPicked = 4; pickList.SetPicked(); this.Session.Derive(); // When SalesOrder is derived 1 quantity is requested for shipping (because inventory is available and quantity ordered (5) is greater then quantity pending shipment (4) // A new shipment item is created with quantity 1 and QuantityPendingShipment remains 5 Assert.Equal(4, itemIssuance.Quantity); Assert.Equal(4, shipmentItem.Quantity); Assert.Equal(3, shipment.ShipmentItems.Count); Assert.Equal(1, shipment.ShipmentItems.Last().Quantity); Assert.Equal(5, item3.QuantityPendingShipment); }