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 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 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 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 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 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 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 GivenSalesOrder_WhenConfirmed_ThenCurrentOrderStatusMustBeDerived() { var customer = new PersonBuilder(this.DatabaseSession).WithFirstName("Koen").Build(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").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()) .WithTakenByInternalOrganisation(internalOrganisation) .Build(); this.DatabaseSession.Derive(true); Assert.AreEqual(1, order.OrderStatuses.Count); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).Provisional, order.CurrentOrderStatus.SalesOrderObjectState); order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(2, order.OrderStatuses.Count); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).InProcess, order.CurrentOrderStatus.SalesOrderObjectState); }
public void GivenPickList_WhenActualQuantityPickedIsLess_ThenShipmentItemQuantityIsAdjusted() { 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 supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("person1").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(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate21) .WithName("good2") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good1PurchasePrice = 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 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(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good1) .WithProductPurchasePrice(good1PurchasePrice) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good2) .WithProductPurchasePrice(good2PurchasePrice) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); this.DatabaseSession.Derive(true); var good1Inventory = (NonSerializedInventoryItem)good1.InventoryItemsWhereGood[0]; good1Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var good2Inventory = (NonSerializedInventoryItem)good2.InventoryItemsWhereGood[0]; good2Inventory.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) .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 pickList = good1.InventoryItemsWhereGood[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; pickList.Picker = new Persons(this.DatabaseSession).FindBy(Persons.Meta.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.AreEqual(5, itemIssuance.Quantity); Assert.AreEqual(5, shipmentItem.Quantity); adjustedPicklistItem.ActualQuantity = 4; pickList.SetPicked(); this.DatabaseSession.Derive(true); Assert.AreEqual(4, itemIssuance.Quantity); Assert.AreEqual(4, shipmentItem.Quantity); }
public void GivenCustomerShipmentWithValueBelowThreshold_WhenShippingToBelgium_TheninvoiceIncludesCosts() { var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); new ShippingAndHandlingComponentBuilder(this.DatabaseSession) .WithFromDate(DateTime.UtcNow) .WithGeographicBoundary(mechelen) .WithShipmentMethod(new ShipmentMethods(this.DatabaseSession).Ground) .WithShipmentValue(new ShipmentValueBuilder(this.DatabaseSession).WithThroughAmount(300M).Build()) .WithCost(15M) .Build(); new ShippingAndHandlingComponentBuilder(this.DatabaseSession) .WithFromDate(DateTime.UtcNow) .WithShipmentValue(new ShipmentValueBuilder(this.DatabaseSession).WithThroughAmount(300M).Build()) .WithShipmentMethod(new ShipmentMethods(this.DatabaseSession).Ground) .WithCost(20M) .Build(); new ShippingAndHandlingComponentBuilder(this.DatabaseSession) .WithFromDate(DateTime.UtcNow) .WithShipmentValue(new ShipmentValueBuilder(this.DatabaseSession).WithThroughAmount(300M).Build()) .WithShipmentMethod(new ShipmentMethods(this.DatabaseSession).FirstClassAir) .WithCost(50M) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithVatRate(vatRate21) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good1).Build(); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).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 billToContactMechanismMechelen = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Mechelen").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); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithBillToContactMechanism(billToContactMechanismMechelen) .WithShipToCustomer(customer) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)item.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; 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); var invoice = customer.SalesInvoicesWhereBillToCustomer.First; Assert.AreEqual(15M, invoice.ShippingAndHandlingCharge.Amount); }
public void GivenCustomerShipmentWithQuantityPackagedDifferentFromShippingQuantity_WhenTrySetStateToShipped_ThenActionIsNotAllowed() { var assessable = new VatRegimes(this.DatabaseSession).Assessable; var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(0).Build(); assessable.VatRate = vatRate21; var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithName("good1") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithVatRate(vatRate21).Build(); var inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good1).Build(); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).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(); 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); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithVatRegime(assessable) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)item.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; 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); item.QuantityOrdered = 4; this.DatabaseSession.Derive(true); shipment.Ship(); Assert.AreEqual(new CustomerShipmentObjectStates(this.DatabaseSession).Picked, shipment.CurrentObjectState); }
public void GivenCustomerShipmentOnHold_WhenShipmentValueRisesAboveThreshold_ThenShipmentAndPendigPicklistAreReleased() { Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation.StoresWhereOwner.First.ShipmentThreshold = 100; var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithVatRate(vatRate21) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good1).Build(); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).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); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)item.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; Assert.AreEqual(new CustomerShipmentObjectStates(this.DatabaseSession).OnHold, shipment.CurrentObjectState); Assert.AreEqual(new PickListObjectStates(this.DatabaseSession).OnHold, pickList.CurrentObjectState); item.QuantityOrdered = 10; this.DatabaseSession.Derive(true); Assert.AreEqual(new CustomerShipmentObjectStates(this.DatabaseSession).Created, shipment.CurrentObjectState); Assert.AreEqual(new PickListObjectStates(this.DatabaseSession).Created, pickList.CurrentObjectState); }
public void GivenCustomerBuyingFromDifferentStores_WhenShipping_ThenDifferentShipmentIsCreatedForEachStore() { new StoreBuilder(this.DatabaseSession).WithName("second store") .WithDefaultFacility(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation.FacilitiesWhereOwner.First) .WithOwner(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation) .WithDefaultShipmentMethod(new ShipmentMethods(this.DatabaseSession).Ground) .WithDefaultCarrier(new Carriers(this.DatabaseSession).Fedex) .WithSalesOrderNumberPrefix("") .WithOutgoingShipmentNumberPrefix("") .Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithVatRate(vatRate21) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var inventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good1).Build(); inventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).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(); 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); var order1 = new SalesOrderBuilder(this.DatabaseSession) .WithStore(new Stores(this.DatabaseSession).FindBy(Stores.Meta.Name, "store")) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var order1Item = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); order1.AddSalesOrderItem(order1Item); this.DatabaseSession.Derive(true); order1.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(1, customer.ShipmentsWhereShipToParty.Count); Assert.AreEqual(1, customer.PickListsWhereShipToParty.Count); var order2 = new SalesOrderBuilder(this.DatabaseSession) .WithStore(new Stores(this.DatabaseSession).FindBy(Stores.Meta.Name, "store")) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var order2Item = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); order2.AddSalesOrderItem(order2Item); this.DatabaseSession.Derive(true); order2.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(1, customer.ShipmentsWhereShipToParty.Count); Assert.AreEqual(1, customer.PickListsWhereShipToParty.Count); var order3 = new SalesOrderBuilder(this.DatabaseSession) .WithStore(new Stores(this.DatabaseSession).FindBy(Stores.Meta.Name, "second store")) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var order3Item = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); order3.AddSalesOrderItem(order3Item); this.DatabaseSession.Derive(true); order3.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(2, customer.ShipmentsWhereShipToParty.Count); Assert.AreEqual(1, customer.PickListsWhereShipToParty.Count); }
public void GivenCustomerShipment_WhenDeriving_ThenTotalShipmentValueIsCalculated() { Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation.StoresWhereOwner.First.ShipmentThreshold = 100; var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithVatRate(vatRate21) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good1InventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good1).Build(); good1InventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).Build()); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10202") .WithName("good2") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithVatRate(vatRate21) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2InventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good2).Build(); good2InventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Theft).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(); 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); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)item1.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; Assert.AreEqual(75, shipment.ShipmentValue); item1.QuantityOrdered = 3; this.DatabaseSession.Derive(true); Assert.AreEqual(45, shipment.ShipmentValue); var item2 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(10).WithActualUnitPrice(10).Build(); order.AddSalesOrderItem(item2); this.DatabaseSession.Derive(true); Assert.AreEqual(145, shipment.ShipmentValue); }
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 void GivenCustomerShipment_WhenAllItemsArePutIntoShipmentPackages_ThenCustomerShipmentStateIsPacked() { var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.DatabaseSession).WithAddress1("Haverwerf 15").WithGeographicBoundary(mechelen).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 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).Ruined).Build()); var good2InventoryItem = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good2).Build(); good2InventoryItem.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).Build()); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .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]; customer.PickListsWhereShipToParty.First.SetPicked(); 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); Assert.AreEqual(new CustomerShipmentObjectStates(this.DatabaseSession).Packed, shipment.CurrentObjectState); }
public void GivenMultipleOrders_WhenCombinedPickListIsPicked_ThenSingleShipmentIsPickedState() { var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf").Build(); var shipToMechelen = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).ShippingAddress) .WithUseAsDefault(true) .Build(); var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("person1").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 vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate21) .WithName("good2") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good1PurchasePrice = 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 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(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good1) .WithProductPurchasePrice(good1PurchasePrice) .WithFromDate(DateTime.UtcNow) .WithSupplier(supplier) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good2) .WithProductPurchasePrice(good2PurchasePrice) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); this.DatabaseSession.Derive(true); var good1Inventory = (NonSerializedInventoryItem)good1.InventoryItemsWhereGood[0]; good1Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).Build()); this.DatabaseSession.Derive(true); var good2Inventory = (NonSerializedInventoryItem)good2.InventoryItemsWhereGood[0]; good2Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).Build()); this.DatabaseSession.Derive(true); var order1 = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .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(); order1.AddSalesOrderItem(item1); order1.AddSalesOrderItem(item2); order1.AddSalesOrderItem(item3); this.DatabaseSession.Derive(true); order1.Confirm(); this.DatabaseSession.Derive(true); var order2 = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .Build(); var itema = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var itemb = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); order2.AddSalesOrderItem(itema); order2.AddSalesOrderItem(itemb); this.DatabaseSession.Derive(true); order2.Confirm(); this.DatabaseSession.Derive(true); var pickList = good1.InventoryItemsWhereGood[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; pickList.Picker = new Persons(this.DatabaseSession).FindBy(Persons.Meta.LastName, "orderProcessor"); pickList.SetPicked(); this.DatabaseSession.Derive(true); Assert.AreEqual(1, customer.ShipmentsWhereBillToParty.Count); var customerShipment = customer.ShipmentsWhereBillToParty.First; Assert.AreEqual(new CustomerShipmentObjectStates(this.DatabaseSession).Picked, customerShipment.CurrentObjectState); }
public void GivenSalesOrder_WhenConfirmed_ThenShipmentItemsAreCreated() { 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 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).WithFirstName("Koen").WithPartyContactMechanism(shipToMechelen).Build(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).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(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 = customer.ShipmentsWhereBillToParty.First; Assert.AreEqual(2, shipment.ShipmentItems.Count); Assert.AreEqual(1, item1.OrderShipmentsWhereSalesOrderItem[0].Quantity); Assert.AreEqual(2, item2.OrderShipmentsWhereSalesOrderItem[0].Quantity); Assert.AreEqual(5, item3.OrderShipmentsWhereSalesOrderItem[0].Quantity); }
public void GivenPickList_WhenPicked_ThenInventoryIsAdjustedAndOrderItemsQuantityPickedIsSet() { 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 supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("person1").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(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate21) .WithName("good2") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good1PurchasePrice = 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 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(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good1) .WithProductPurchasePrice(good1PurchasePrice) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good2) .WithProductPurchasePrice(good2PurchasePrice) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); this.DatabaseSession.Derive(true); var good1Inventory = (NonSerializedInventoryItem)good1.InventoryItemsWhereGood[0]; good1Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var good2Inventory = (NonSerializedInventoryItem)good2.InventoryItemsWhereGood[0]; good2Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var colorWhite = new ColourBuilder(this.DatabaseSession) .WithName("white") .WithLocalisedName(new LocalisedTextBuilder(this.DatabaseSession) .WithText("white") .WithLocale(Singleton.Instance(this.DatabaseSession).DefaultLocale) .Build()) .Build(); var extraLarge = new SizeBuilder(this.DatabaseSession) .WithName("extra large") .WithLocalisedName(new LocalisedTextBuilder(this.DatabaseSession) .WithText("Extra large") .WithLocale(Singleton.Instance(this.DatabaseSession).DefaultLocale) .Build()) .Build(); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithVatRegime(new VatRegimes(this.DatabaseSession).Export) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession).WithProductFeature(colorWhite).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.DatabaseSession).WithProductFeature(extraLarge).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); item1.AddOrderedWithFeature(item2); item1.AddOrderedWithFeature(item3); var item4 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item5 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); order.AddSalesOrderItem(item4); order.AddSalesOrderItem(item5); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)mechelenAddress.ShipmentsWhereShipToAddress[0]; var pickList = good1.InventoryItemsWhereGood[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; pickList.Picker = new Persons(this.DatabaseSession).FindBy(Persons.Meta.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.DatabaseSession.Derive(true); //// all orderitems have same physical finished good, so there is only one picklist item. Assert.AreEqual(new CustomerShipmentObjectStates(this.DatabaseSession).Picked, shipment.CurrentShipmentStatus.CustomerShipmentObjectState); Assert.AreEqual(new PickListObjectStates(this.DatabaseSession).Picked, pickList.CurrentPickListStatus.PickListObjectState); Assert.AreEqual(1, item1.QuantityPicked); Assert.AreEqual(0, item1.QuantityReserved); Assert.AreEqual(0, item1.QuantityRequestsShipping); Assert.AreEqual(2, item4.QuantityPicked); Assert.AreEqual(0, item4.QuantityReserved); Assert.AreEqual(0, item4.QuantityRequestsShipping); Assert.AreEqual(4, item5.QuantityPicked); Assert.AreEqual(1, item5.QuantityReserved); Assert.AreEqual(0, item5.QuantityRequestsShipping); Assert.AreEqual(97, good1Inventory.QuantityOnHand); Assert.AreEqual(0, good1Inventory.QuantityCommittedOut); Assert.AreEqual(96, good2Inventory.QuantityOnHand); Assert.AreEqual(1, good2Inventory.QuantityCommittedOut); }
public void GivenSalesOrder_WhenObjectStateIsOnHold_ThenCheckTransitions() { var customer = new PersonBuilder(this.DatabaseSession).WithFirstName("Koen").WithUserName("customer").Build(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); this.DatabaseSession.Derive(true); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("customer", "Forms"), new string[0]); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); order.Hold(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).OnHold, order.CurrentObjectState); var acl = new AccessControlList(order, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanExecute(SalesOrders.Meta.Cancel)); Assert.IsTrue(acl.CanExecute(SalesOrders.Meta.Continue)); Assert.IsFalse(acl.CanExecute(SalesOrders.Meta.Confirm)); Assert.IsFalse(acl.CanExecute(SalesOrders.Meta.Reject)); Assert.IsFalse(acl.CanExecute(SalesOrders.Meta.Approve)); Assert.IsFalse(acl.CanExecute(SalesOrders.Meta.Hold)); }
public void GivenSalesOrder_WhenShipmentIsCreated_ThenOrdertemsAreAddedToPickList() { 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 supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); var customer = new PersonBuilder(this.DatabaseSession).WithLastName("person1").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(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate21) .WithName("good2") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good1PurchasePrice = 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 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(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good1) .WithProductPurchasePrice(good1PurchasePrice) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good2) .WithProductPurchasePrice(good2PurchasePrice) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); this.DatabaseSession.Derive(true); var good1Inventory = (NonSerializedInventoryItem)good1.InventoryItemsWhereGood[0]; good1Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).Build()); this.DatabaseSession.Derive(true); var good2Inventory = (NonSerializedInventoryItem)good2.InventoryItemsWhereGood[0]; good2Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Ruined).Build()); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .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 pickList = good1.InventoryItemsWhereGood[0].PickListItemsWhereInventoryItem[0].PickListWherePickListItem; Assert.AreEqual(2, pickList.PickListItems.Count); var extent1 = pickList.PickListItems; extent1.Filter.AddEquals(PickListItems.Meta.InventoryItem, good1Inventory); Assert.AreEqual(3, extent1.First.RequestedQuantity); var extent2 = pickList.PickListItems; extent2.Filter.AddEquals(PickListItems.Meta.InventoryItem, good2Inventory); Assert.AreEqual(5, extent2.First.RequestedQuantity); }
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 GivenSalesOrderNotPartiallyShipped_WhenInComplete_ThenOrderIsNotSelectedForShipment() { var assessable = new VatRegimes(this.DatabaseSession).Assessable; var vatRate0 = new VatRateBuilder(this.DatabaseSession).WithRate(0).Build(); assessable.VatRate = vatRate0; var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate0) .WithName("good1") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); var inventoryGood1 = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good1).Build(); inventoryGood1.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("20202") .WithVatRate(vatRate0) .WithName("good2") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); var inventoryGood2 = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good2).Build(); inventoryGood2.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(10).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 = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); this.DatabaseSession.Derive(true); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithVatRegime(assessable) .WithPartiallyShip(false) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good1) .WithQuantityOrdered(20) .WithActualUnitPrice(5) .Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good2) .WithQuantityOrdered(20) .WithActualUnitPrice(5) .Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); Assert.IsFalse(customer.ExistShipmentsWhereShipToParty); Assert.AreEqual(10, item1.QuantityRequestsShipping); Assert.AreEqual(0, item1.QuantityPendingShipment); Assert.AreEqual(10, item1.QuantityShortFalled); Assert.AreEqual(10, item2.QuantityRequestsShipping); Assert.AreEqual(0, item2.QuantityPendingShipment); Assert.AreEqual(10, item2.QuantityShortFalled); inventoryGood1.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); Assert.IsFalse(customer.ExistShipmentsWhereShipToParty); Assert.AreEqual(20, item1.QuantityRequestsShipping); Assert.AreEqual(0, item1.QuantityPendingShipment); Assert.AreEqual(0, item1.QuantityShortFalled); Assert.AreEqual(10, item2.QuantityRequestsShipping); Assert.AreEqual(0, item2.QuantityPendingShipment); Assert.AreEqual(10, item2.QuantityShortFalled); inventoryGood2.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); Assert.IsTrue(customer.ExistShipmentsWhereShipToParty); Assert.AreEqual(0, item1.QuantityRequestsShipping); Assert.AreEqual(20, item1.QuantityPendingShipment); Assert.AreEqual(0, item1.QuantityShortFalled); Assert.AreEqual(0, item2.QuantityRequestsShipping); Assert.AreEqual(20, item2.QuantityPendingShipment); Assert.AreEqual(0, item2.QuantityShortFalled); }
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 GivenSalesOrderShippedInMultipleParts_WhenPaymentsAreReceived_ThenObjectStateCorrespondingSalesOrderIsUpdated() { var assessable = new VatRegimes(this.DatabaseSession).Assessable; var vatRate0 = new VatRateBuilder(this.DatabaseSession).WithRate(0).Build(); assessable.VatRate = vatRate0; var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate0) .WithName("good1") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); var good1Inventory = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good1).Build(); good1Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(1).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate0) .WithName("good2") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); var good2Inventory = new NonSerializedInventoryItemBuilder(this.DatabaseSession).WithGood(good2).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 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(); 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 item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).WithComment("item1").Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).WithComment("item2").Build(); var item3 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).WithComment("item3").Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)item1.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; 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.SetPacked(); this.DatabaseSession.Derive(true); shipment.Ship(); this.DatabaseSession.Derive(true); var salesInvoiceitem = (SalesInvoiceItem)shipment.ShipmentItems[0].InvoiceItems[0]; var invoice1 = salesInvoiceitem.SalesInvoiceWhereSalesInvoiceItem; invoice1.Send(); new ReceiptBuilder(this.DatabaseSession) .WithAmount(15) .WithPaymentApplication(new PaymentApplicationBuilder(this.DatabaseSession).WithInvoiceItem(invoice1.SalesInvoiceItems[0]).WithAmountApplied(15).Build()) .WithEffectiveDate(DateTime.UtcNow) .Build(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).InProcess, order.CurrentObjectState); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).PartiallyShipped, order.CurrentShipmentStatus.SalesOrderObjectState); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).PartiallyPaid, order.CurrentPaymentStatus.SalesOrderObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Finished, item1.CurrentObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Paid, item1.CurrentPaymentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item1.CurrentShipmentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).InProcess, item2.CurrentObjectState); Assert.IsFalse(item2.ExistCurrentPaymentStatus); Assert.IsFalse(item2.ExistCurrentShipmentStatus); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).InProcess, item3.CurrentObjectState); Assert.IsFalse(item3.ExistCurrentPaymentStatus); Assert.IsFalse(item3.ExistCurrentShipmentStatus); good1Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); shipment = (CustomerShipment)item2.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; 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); 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); salesInvoiceitem = (SalesInvoiceItem)shipment.ShipmentItems[0].InvoiceItems[0]; var invoice2 = salesInvoiceitem.SalesInvoiceWhereSalesInvoiceItem; invoice2.Send(); new ReceiptBuilder(this.DatabaseSession) .WithAmount(30) .WithPaymentApplication(new PaymentApplicationBuilder(this.DatabaseSession).WithInvoiceItem(invoice2.SalesInvoiceItems[0]).WithAmountApplied(30).Build()) .Build(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).InProcess, order.CurrentObjectState); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).PartiallyShipped, order.CurrentShipmentStatus.SalesOrderObjectState); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).PartiallyPaid, order.CurrentPaymentStatus.SalesOrderObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Finished, item1.CurrentObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Paid, item1.CurrentPaymentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item1.CurrentShipmentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Finished, item2.CurrentObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Paid, item2.CurrentPaymentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item2.CurrentShipmentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).InProcess, item3.CurrentObjectState); Assert.IsFalse(item3.ExistCurrentPaymentStatus); Assert.IsFalse(item3.ExistCurrentShipmentStatus); good2Inventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); shipment = (CustomerShipment)item3.OrderShipmentsWhereSalesOrderItem[0].ShipmentItem.ShipmentWhereShipmentItem; 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); 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); salesInvoiceitem = (SalesInvoiceItem)shipment.ShipmentItems[0].InvoiceItems[0]; var invoice3 = salesInvoiceitem.SalesInvoiceWhereSalesInvoiceItem; new ReceiptBuilder(this.DatabaseSession) .WithAmount(75) .WithPaymentApplication(new PaymentApplicationBuilder(this.DatabaseSession).WithInvoiceItem(invoice3.SalesInvoiceItems[0]).WithAmountApplied(75).Build()) .Build(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).Finished, order.CurrentObjectState); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).Shipped, order.CurrentShipmentStatus.SalesOrderObjectState); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).Paid, order.CurrentPaymentStatus.SalesOrderObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Finished, item1.CurrentObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Paid, item1.CurrentPaymentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item1.CurrentShipmentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Finished, item2.CurrentObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Paid, item2.CurrentPaymentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item2.CurrentShipmentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Finished, item3.CurrentObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Paid, item3.CurrentPaymentStatus.SalesOrderItemObjectState); Assert.AreEqual(new SalesOrderItemObjectStates(this.DatabaseSession).Shipped, item3.CurrentShipmentStatus.SalesOrderItemObjectState); }
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 GivenSalesOrderWithManualShipmentSchedule_WhenOrderIsConfirmed_ThenInventoryIsNotReservedAndOrderIsNotShipped() { 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) .Build(); this.DatabaseSession.Derive(true); var manual = new OrderKindBuilder(this.DatabaseSession).WithDescription("manual").WithScheduleManually(true).Build(); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithVatRegime(assessable) .WithOrderKind(manual) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good) .WithQuantityOrdered(50) .WithActualUnitPrice(50) .Build(); order.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(new SalesOrderObjectStates(this.DatabaseSession).InProcess, order.CurrentObjectState); Assert.AreEqual(0, item.QuantityReserved); Assert.AreEqual(0, item.QuantityPendingShipment); Assert.AreEqual(0, item.QuantityRequestsShipping); Assert.AreEqual(0, item.QuantityShortFalled); Assert.AreEqual(100, inventoryItem.QuantityOnHand); Assert.AreEqual(100, inventoryItem.AvailableToPromise); }
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 GivenSalesOrderWithMultipleRecipients_WhenConfirmed_ThenShipmentIsCreatedForEachRecipientAndPickListIsCreated() { 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 baal = new CityBuilder(this.DatabaseSession).WithName("Baal").Build(); var baalAddress = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(baal).WithAddress1("Haverwerf 15").Build(); var shipToBaal = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(baalAddress) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).ShippingAddress) .WithUseAsDefault(true) .Build(); var person1 = new PersonBuilder(this.DatabaseSession).WithLastName("person1").WithPartyContactMechanism(shipToMechelen).Build(); var person2 = new PersonBuilder(this.DatabaseSession).WithLastName("person2").WithPartyContactMechanism(shipToBaal).Build(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(person1).WithInternalOrganisation(internalOrganisation).Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(person2).WithInternalOrganisation(internalOrganisation).Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var part = new FinishedGoodBuilder(this.DatabaseSession) .WithName("part1") .WithOwnedByParty(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .Build(); this.DatabaseSession.Derive(true); var partInventory = (NonSerializedInventoryItem)part.InventoryItemsWherePart[0]; partInventory.AddInventoryItemVariance(new InventoryItemVarianceBuilder(this.DatabaseSession).WithQuantity(100).WithReason(new VarianceReasons(this.DatabaseSession).Unknown).Build()); this.DatabaseSession.Derive(true); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithFinishedGood(part) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(vatRate21) .WithName("good2") .WithFinishedGood(part) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var colorBlack = new ColourBuilder(this.DatabaseSession) .WithName("white") .WithLocalisedName(new LocalisedTextBuilder(this.DatabaseSession) .WithText("White") .WithLocale(Singleton.Instance(this.DatabaseSession).DefaultLocale) .Build()) .Build(); var extraLarge = new SizeBuilder(this.DatabaseSession) .WithName("Extra large") .WithLocalisedName(new LocalisedTextBuilder(this.DatabaseSession) .WithText("White") .WithLocale(Singleton.Instance(this.DatabaseSession).DefaultLocale) .Build()) .Build(); var order = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(person1) .WithShipToCustomer(person1) .WithShipToAddress(mechelenAddress) .WithVatRegime(new VatRegimes(this.DatabaseSession).Export) .Build(); var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession).WithProductFeature(colorBlack).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); var item3 = new SalesOrderItemBuilder(this.DatabaseSession).WithProductFeature(extraLarge).WithQuantityOrdered(1).WithActualUnitPrice(15).Build(); item1.AddOrderedWithFeature(item2); item1.AddOrderedWithFeature(item3); var item4 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantityOrdered(2).WithActualUnitPrice(15).Build(); var item5 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantityOrdered(5).WithActualUnitPrice(15).WithAssignedShipToParty(person2).Build(); order.AddSalesOrderItem(item1); order.AddSalesOrderItem(item2); order.AddSalesOrderItem(item3); order.AddSalesOrderItem(item4); order.AddSalesOrderItem(item5); this.DatabaseSession.Derive(true); order.Confirm(); this.DatabaseSession.Derive(true); var shipmentToMechelen = mechelenAddress.ShipmentsWhereShipToAddress[0]; var shipmentToBaal = baalAddress.ShipmentsWhereShipToAddress[0]; this.DatabaseSession.Derive(true); Assert.AreEqual(mechelenAddress, shipmentToMechelen.ShipToAddress); Assert.AreEqual(1, shipmentToMechelen.ShipmentItems.Count); Assert.AreEqual(3, shipmentToMechelen.ShipmentItems[0].Quantity); Assert.AreEqual(baalAddress, shipmentToBaal.ShipToAddress); Assert.AreEqual(1, shipmentToBaal.ShipmentItems.Count); Assert.AreEqual(good2, shipmentToBaal.ShipmentItems[0].Good); Assert.AreEqual(5, shipmentToBaal.ShipmentItems[0].Quantity); }
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 GivenSalesOrderWithPickList_WhenOrderIsCancelled_ThenPickListIsCancelledAndSingleOrderShipmentIsCancelled() { 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(); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); this.DatabaseSession.Derive(true); var order1 = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithShipToAddress(mechelenAddress) .WithVatRegime(assessable) .Build(); var item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good) .WithQuantityOrdered(10) .WithActualUnitPrice(5) .Build(); order1.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order1.Confirm(); this.DatabaseSession.Derive(true); var order2 = new SalesOrderBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithShipToAddress(mechelenAddress) .WithVatRegime(assessable) .Build(); item = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good) .WithQuantityOrdered(20) .WithActualUnitPrice(5) .Build(); order2.AddSalesOrderItem(item); this.DatabaseSession.Derive(true); order2.Confirm(); this.DatabaseSession.Derive(true); var shipment = (CustomerShipment)customer.ShipmentsWhereBillToParty[0]; Assert.AreEqual(30, shipment.ShipmentItems[0].Quantity); var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; Assert.AreEqual(30, pickList.PickListItems[0].RequestedQuantity); order1.Cancel(); this.DatabaseSession.Derive(true); Assert.AreEqual(new CustomerShipmentObjectStates(this.DatabaseSession).Created, shipment.CurrentObjectState); Assert.AreEqual(new PickListObjectStates(this.DatabaseSession).Created, pickList.CurrentObjectState); Assert.AreEqual(20, pickList.PickListItems[0].RequestedQuantity); order2.Cancel(); this.DatabaseSession.Derive(true); Assert.AreEqual(new CustomerShipmentObjectStates(this.DatabaseSession).Cancelled, shipment.CurrentObjectState); Assert.AreEqual(new PickListObjectStates(this.DatabaseSession).Cancelled, pickList.CurrentObjectState); }
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 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).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"); 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(DateTime.UtcNow) .Build(); var salesItem = new SalesOrderItemBuilder(this.Session).WithDescription("item1").WithProduct(good1).WithQuantityOrdered(30).WithActualUnitPrice(15).Build(); order1.AddSalesOrderItem(salesItem); this.Session.Derive(); this.Session.Commit(); order1.Confirm(); this.Session.Derive(); this.Session.Commit(); 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.Confirm(); var shipment = new PurchaseShipmentBuilder(this.Session).WithShipmentMethod(new ShipmentMethods(this.Session).Ground).WithShipFromParty(supplier).Build(); var shipmentItem = new ShipmentItemBuilder(this.Session).WithGood(good1).Build(); shipment.AddShipmentItem(shipmentItem); new ShipmentReceiptBuilder(this.Session) .WithQuantityAccepted(10) .WithShipmentItem(shipmentItem) .WithOrderItem(item1) .Build(); this.Session.Derive(); this.Session.Commit(); shipment.AppsComplete(); 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); }