public void GivenProductPurchasePrice_WhenDeriving_ThenRequiredRelationsMustExist() { var builder = new ProductPurchasePriceBuilder(this.DatabaseSession); var purchasePrice = builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithPrice(1); purchasePrice = builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithCurrency(new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR")); purchasePrice = builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithFromDate(DateTime.UtcNow); purchasePrice = builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece); purchasePrice = builder.Build(); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); }
public void GivenNewGoodCoredOnFinishedGood_WhenDeriving_ThenNonSerializedInventryItemIsCreatedForEveryFinishedGoodAndFacility() { var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); var secondFacility = new WarehouseBuilder(this.DatabaseSession).WithName("second facility").WithOwner(internalOrganisation).Build(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithInternalOrganisation(internalOrganisation) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .Build(); var finishedGood = new FinishedGoodBuilder(this.DatabaseSession) .WithName("part") .Build(); var purchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithFromDate(DateTime.UtcNow) .WithCurrency(new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR")) .WithPrice(1) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good = new GoodBuilder(this.DatabaseSession) .WithName("Good") .WithSku("10101") .WithFinishedGood(finishedGood) .WithVatRate(new VatRateBuilder(this.DatabaseSession).WithRate(21).Build()) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good) .WithSupplier(supplier) .WithProductPurchasePrice(purchasePrice) .WithFromDate(DateTime.UtcNow) .Build(); this.DatabaseSession.Derive(true); Assert.AreEqual(2, good.FinishedGood.InventoryItemsWherePart.Count); Assert.AreEqual(1, internalOrganisation.DefaultFacility.InventoryItemsWhereFacility.Count); Assert.AreEqual(1, secondFacility.InventoryItemsWhereFacility.Count); }
public void GivenOrderItemForGoodWithoutSelectedInventoryItem_WhenConfirming_ThenReservedFromInventoryItemIsFromDefaultFacility() { this.InstantiateObjects(this.DatabaseSession); var good2PurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR")) .WithFromDate(DateTime.UtcNow) .WithPrice(7) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var good2 = new GoodBuilder(this.DatabaseSession) .WithSku("10102") .WithVatRate(this.vatRate21) .WithName("good2") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithSupplier(this.supplier) .WithFromDate(DateTime.UtcNow) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good2) .WithFromDate(DateTime.UtcNow) .WithSupplier(this.supplier) .WithProductPurchasePrice(good2PurchasePrice) .Build(); //// good with part as inventory item var item1 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(this.good) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); var item2 = new SalesOrderItemBuilder(this.DatabaseSession) .WithProduct(good2) .WithQuantityOrdered(3) .WithActualUnitPrice(5) .Build(); this.order.AddSalesOrderItem(item1); this.order.AddSalesOrderItem(item2); this.DatabaseSession.Derive(true); this.order.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(new Warehouses(this.DatabaseSession).FindBy(Warehouses.Meta.Name, "facility"), item1.ReservedFromInventoryItem.Facility); Assert.AreEqual(new Warehouses(this.DatabaseSession).FindBy(Warehouses.Meta.Name, "facility"), item2.ReservedFromInventoryItem.Facility); }
public override void Init() { base.Init(); var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); ContactMechanism takenViaContactMechanism = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var supplierContactMechanism = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(takenViaContactMechanism) .WithUseAsDefault(true) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).BillingAddress) .Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); this.supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); this.supplier.AddPartyContactMechanism(supplierContactMechanism); new SupplierRelationshipBuilder(this.DatabaseSession).WithSupplier(supplier).WithInternalOrganisation(internalOrganisation).Build(); this.finishedGood = new FinishedGoodBuilder(this.DatabaseSession) .WithManufacturerId("10101") .WithName("finished good") .Build(); var supplierOffering = new SupplierOfferingBuilder(this.DatabaseSession) .WithPart(this.finishedGood) .WithSupplier(this.supplier) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .Build(); var previousPurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .WithPrice(8) .Build(); this.currentPurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithFromDate(DateTime.UtcNow) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .WithPrice(10) .Build(); var futurePurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithFromDate(DateTime.UtcNow.AddYears(1)) .WithPrice(8) .Build(); supplierOffering.AddProductPurchasePrice(previousPurchasePrice); supplierOffering.AddProductPurchasePrice(this.currentPurchasePrice); supplierOffering.AddProductPurchasePrice(futurePurchasePrice); this.order = new PurchaseOrderBuilder(this.DatabaseSession) .WithTakenViaSupplier(this.supplier) .WithBillToContactMechanism(takenViaContactMechanism) .WithDeliveryDate(DateTime.UtcNow) .WithVatRegime(new VatRegimes(this.DatabaseSession).Exempt) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); }
public void GivenOrderItemForProduct_WhenDerivingPrices_ThenUseProductCurrentPurchasePrice() { var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithVatRate(new VatRates(this.DatabaseSession).FindBy(VatRates.Meta.Rate,21)) .WithName("good") .Build(); var supplierOffering = new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good) .WithSupplier(this.supplier) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .Build(); var previousPurchasePriceGood = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .WithPrice(8) .Build(); var currentPurchasePriceGood = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .WithPrice(10) .Build(); var futurePurchasePriceGood = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithFromDate(DateTime.UtcNow.AddYears(1)) .WithPrice(8) .Build(); supplierOffering.AddProductPurchasePrice(previousPurchasePriceGood); supplierOffering.AddProductPurchasePrice(currentPurchasePriceGood); supplierOffering.AddProductPurchasePrice(futurePurchasePriceGood); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); this.InstantiateObjects(this.DatabaseSession); const decimal QuantityOrdered = 3; var item1 = new PurchaseOrderItemBuilder(this.DatabaseSession).WithProduct(good).WithQuantityOrdered(QuantityOrdered).Build(); this.order.AddPurchaseOrderItem(item1); this.DatabaseSession.Derive(true); Assert.AreEqual(currentPurchasePriceGood.Price, item1.UnitBasePrice); Assert.AreEqual(0, item1.UnitDiscount); Assert.AreEqual(0, item1.UnitSurcharge); Assert.AreEqual(currentPurchasePriceGood.Price, item1.CalculatedUnitPrice); Assert.AreEqual(currentPurchasePriceGood.Price * QuantityOrdered, item1.TotalBasePrice); Assert.AreEqual(0, item1.TotalDiscount); Assert.AreEqual(0, item1.TotalSurcharge); Assert.AreEqual(currentPurchasePriceGood.Price * QuantityOrdered, item1.TotalExVat); Assert.AreEqual(currentPurchasePriceGood.Price * QuantityOrdered, this.order.TotalBasePrice); Assert.AreEqual(0, this.order.TotalDiscount); Assert.AreEqual(0, this.order.TotalSurcharge); Assert.AreEqual(currentPurchasePriceGood.Price * QuantityOrdered, this.order.TotalExVat); }
public override void Init() { base.Init(); var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); this.internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); this.billToCustomer = new OrganisationBuilder(this.DatabaseSession).WithName("billToCustomer").WithPreferredCurrency(euro).Build(); var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").WithLocale(new Locales(this.DatabaseSession).EnglishGreatBritain).Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(this.billToCustomer).WithInternalOrganisation(this.internalOrganisation).Build(); this.good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(new VatRateBuilder(this.DatabaseSession).WithRate(21).Build()) .WithName("good") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var goodPurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithFromDate(DateTime.UtcNow) .WithPrice(7) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(this.good) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .WithProductPurchasePrice(goodPurchasePrice) .Build(); new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current good") .WithProduct(this.good) .WithPrice(10) .WithFromDate(DateTime.UtcNow) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); }
public void GivenSalesOrderWithShippingAndHandlingPercentage_WhenDeriving_ThenOrderTotalsMustIncludeShippingAndHandlingAmount() { 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 euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var adjustment = new ShippingAndHandlingChargeBuilder(this.DatabaseSession).WithPercentage(5).WithVatRate(vatRate21).Build(); var good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var goodPurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithFromDate(DateTime.UtcNow) .WithPrice(7) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .WithProductPurchasePrice(goodPurchasePrice) .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()) .WithShippingAndHandlingCharge(adjustment) .Build(); const decimal quantityOrdered = 3; var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(good).WithQuantityOrdered(quantityOrdered).WithActualUnitPrice(15).Build(); order.AddSalesOrderItem(item1); this.DatabaseSession.Derive(true); Assert.AreEqual(45, order.TotalBasePrice); Assert.AreEqual(0, order.TotalDiscount); Assert.AreEqual(0, order.TotalSurcharge); Assert.AreEqual(2.25, order.TotalShippingAndHandling); Assert.AreEqual(0, order.TotalFee); Assert.AreEqual(47.25, order.TotalExVat); Assert.AreEqual(9.92, order.TotalVat); Assert.AreEqual(57.17, order.TotalIncVat); Assert.AreEqual(goodPurchasePrice.Price, order.TotalPurchasePrice); }
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 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 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 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 GivenSupplierOffering_WhenDeriving_ThenRequiredRelationsMustExist() { var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("organisation").Build(); var part = new FinishedGoodBuilder(this.DatabaseSession).WithName("finishedGood").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 purchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithFromDate(DateTime.UtcNow) .WithCurrency(new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR")) .WithPrice(1) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.DatabaseSession.Commit(); var builder = new SupplierOfferingBuilder(this.DatabaseSession); builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithProduct(good); builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithProductPurchasePrice(purchasePrice); builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithSupplier(supplier); builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); builder.WithFromDate(DateTime.UtcNow); builder.Build(); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); builder.WithPart(part); builder.Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); var supplierOffering = builder.Build(); supplierOffering.RemoveProduct(); Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); }
public void GivenSalesInvoice_WhenDeriving_ThenTotalAmountMustBeDerived() { var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(19).Build(); var good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); var goodPurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithFromDate(DateTime.UtcNow) .WithPrice(7) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(good) .WithSupplier(supplier) .WithFromDate(DateTime.UtcNow) .WithProductPurchasePrice(goodPurchasePrice) .Build(); var productItem = new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem; var customer = new OrganisationBuilder(this.DatabaseSession).WithName("customer").Build(); var contactMechanism = new PostalAddressBuilder(this.DatabaseSession) .WithAddress1("Haverwerf 15") .WithPostalBoundary(new PostalBoundaryBuilder(this.DatabaseSession) .WithLocality("Mechelen") .WithCountry(new Countries(this.DatabaseSession).FindBy(Countries.Meta.IsoCode, "BE")) .Build()) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); this.DatabaseSession.Derive(true); var invoice = new SalesInvoiceBuilder(this.DatabaseSession).WithBillToCustomer(customer).WithBillToContactMechanism(contactMechanism).Build(); var item1 = new SalesInvoiceItemBuilder(this.DatabaseSession) .WithProduct(good) .WithSalesInvoiceItemType(productItem) .WithQuantity(1) .WithActualUnitPrice(8) .Build(); invoice.AddSalesInvoiceItem(item1); this.DatabaseSession.Derive(true); Assert.AreEqual(8, invoice.TotalExVat); Assert.AreEqual(1.52M, invoice.TotalVat); Assert.AreEqual(9.52M, invoice.TotalIncVat); var item2 = new SalesInvoiceItemBuilder(this.DatabaseSession) .WithProduct(good) .WithSalesInvoiceItemType(productItem) .WithQuantity(1) .WithActualUnitPrice(8) .Build(); var item3 = new SalesInvoiceItemBuilder(this.DatabaseSession) .WithProduct(good) .WithSalesInvoiceItemType(productItem) .WithQuantity(1) .WithActualUnitPrice(8) .Build(); invoice.AddSalesInvoiceItem(item2); invoice.AddSalesInvoiceItem(item3); this.DatabaseSession.Derive(true); Assert.AreEqual(24, invoice.TotalExVat); Assert.AreEqual(4.56M, invoice.TotalVat); Assert.AreEqual(28.56M, invoice.TotalIncVat); Assert.AreEqual(21, invoice.TotalPurchasePrice); Assert.AreEqual(invoice.TotalListPrice, invoice.TotalExVat); }