public void GivenBillToCustomerWithDifferentCurrency_WhenDerivingPrices_ThenCalculatePricesInPreferredCurrency() { var poundSterling = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "GBP"); const decimal conversionfactor = 0.8553M; var euroToPoundStirling = new UnitOfMeasureConversionBuilder(this.DatabaseSession) .WithConversionFactor(conversionfactor) .WithToUnitOfMeasure(poundSterling) .WithStartDate(DateTime.UtcNow) .Build(); var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); euro.AddUnitOfMeasureConversion(euroToPoundStirling); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); this.InstantiateObjects(this.DatabaseSession); Assert.AreEqual(euro, this.invoice.CustomerCurrency); this.billToCustomer.PreferredCurrency = poundSterling; var newInvoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithBillToCustomer(this.billToCustomer) .WithBilledFromInternalOrganisation(this.internalOrganisation) .WithBillToContactMechanism(this.billToContactMechanismMechelen) .Build(); const decimal quantity = 3; var item1 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(this.good).WithSalesInvoiceItemType(new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem).WithQuantity(quantity).Build(); newInvoice.AddSalesInvoiceItem(item1); this.DatabaseSession.Derive(true); Assert.AreEqual(poundSterling, newInvoice.CustomerCurrency); Assert.AreEqual(decimal.Round(item1.TotalBasePrice * conversionfactor, 2), item1.TotalBasePriceCustomerCurrency); Assert.AreEqual(0, item1.TotalDiscount); Assert.AreEqual(0, item1.TotalSurcharge); Assert.AreEqual(decimal.Round(item1.TotalExVat * conversionfactor, 2), item1.TotalExVatCustomerCurrency); }
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 void DeriveHistory() { var productItem = new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem; var contactMechanism = new ContactMechanisms(this.DatabaseSession).Extent().First; var customer1 = new OrganisationBuilder(this.DatabaseSession).WithName("customer1").Build(); var customer2 = new OrganisationBuilder(this.DatabaseSession).WithName("customer2").Build(); var salesRep1 = new PersonBuilder(this.DatabaseSession).WithLastName("salesRep1").Build(); var salesRep2 = new PersonBuilder(this.DatabaseSession).WithLastName("salesRep2").Build(); var package1 = new PackageBuilder(this.DatabaseSession).WithName("package1").Build(); var package2 = new PackageBuilder(this.DatabaseSession).WithName("package2").Build(); var salesChannel1 = new SalesChannels(this.DatabaseSession).WebChannel; var salesChannel2 = new SalesChannels(this.DatabaseSession).NoChannel; var catMain = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("main cat").Build(); var cat1 = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("cat for good1").WithParent(catMain).WithPackage(package1).Build(); var cat2 = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("cat for good2").WithParent(catMain).WithPackage(package2).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer1).WithProductCategory(cat1).WithSalesRepresentative(salesRep1).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer1).WithProductCategory(cat2).WithSalesRepresentative(salesRep2).Build(); this.DatabaseSession.Derive(true); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer2).WithProductCategory(cat1).WithSalesRepresentative(salesRep1).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer2).WithProductCategory(cat2).WithSalesRepresentative(salesRep2).Build(); this.DatabaseSession.Derive(true); var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); 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) .WithPrimaryProductCategory(cat1) .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) .WithPrimaryProductCategory(cat2) .Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); internalOrganisation.PreferredCurrency = euro; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer1).WithInternalOrganisation(internalOrganisation).Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer2).WithInternalOrganisation(internalOrganisation).Build(); this.DatabaseSession.Derive(true); var invoice1 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTime.UtcNow.AddMonths(-1)) .WithInvoiceNumber("1") .WithBillToCustomer(customer1) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(salesChannel1) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); var item1a = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item1a); var item1b = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item1b); var item1c = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantity(5).WithActualUnitPrice(10).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item1c); this.DatabaseSession.Derive(true); var invoice2 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTime.UtcNow) .WithInvoiceNumber("1") .WithBillToCustomer(customer1) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(salesChannel1) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); var item2a = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice2.AddSalesInvoiceItem(item2a); var item2b = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice2.AddSalesInvoiceItem(item2b); var item2c = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantity(5).WithActualUnitPrice(10).WithSalesInvoiceItemType(productItem).Build(); invoice2.AddSalesInvoiceItem(item2c); this.DatabaseSession.Derive(true); Singleton.Instance(this.DatabaseSession).DeriveRevenues(); var salesRep1RevenueHistory = salesRep1.SalesRepRevenueHistoriesWhereSalesRep.First; Assert.AreEqual(90, salesRep1RevenueHistory.Revenue); var salesRep2RevenueHistory = salesRep2.SalesRepRevenueHistoriesWhereSalesRep.First; Assert.AreEqual(50, salesRep2RevenueHistory.Revenue); var invoice3 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTime.UtcNow) .WithInvoiceNumber("1") .WithBillToCustomer(customer2) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(salesChannel2) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); var item3a = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(1).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice3.AddSalesInvoiceItem(item3a); var item3b = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantity(1).WithActualUnitPrice(10).WithSalesInvoiceItemType(productItem).Build(); invoice3.AddSalesInvoiceItem(item3b); this.DatabaseSession.Derive(true); Singleton.Instance(this.DatabaseSession).DeriveRevenues(); Assert.AreEqual(105, salesRep1RevenueHistory.Revenue); Assert.AreEqual(60, salesRep2RevenueHistory.Revenue); }
public void GivenSalesInvoice_WhenDerived_ThenTotalExVatIsAddedToPartyPackageRevenueHistory() { var productItem = new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem; var contactMechanism = new ContactMechanisms(this.DatabaseSession).Extent().First; var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var package1 = new PackageBuilder(this.DatabaseSession).WithName("package1").Build(); var cat1 = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("cat for good1").WithPackage(package1).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) .WithPrimaryProductCategory(cat1) .Build(); var customer = new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer"); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); internalOrganisation.PreferredCurrency = euro; this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var date = DateTime.UtcNow.AddYears(-1).AddMonths(-1); decimal revenuePastTwelveMonths = 0; for (var i = 1; i <= 13; i++) { var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(date) .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(new SalesChannels(this.DatabaseSession).WebChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); var item = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(1).WithActualUnitPrice(i * 10M).WithSalesInvoiceItemType(productItem).Build(); invoice.AddSalesInvoiceItem(item); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var history = customer.PartyPackageRevenueHistoriesWhereParty.First; //// first iteration is too old if (i > 1) { revenuePastTwelveMonths += i * 10M; } ////date in first iteration is too old, no history yet. if (history != null) { Assert.AreEqual(revenuePastTwelveMonths, history.Revenue); } date = date.AddMonths(1); } }
public void DeriveRevenues() { var productItem = new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem; var contactMechanism = new ContactMechanisms(this.DatabaseSession).Extent().First; var customer1 = new OrganisationBuilder(this.DatabaseSession).WithName("customer1").Build(); var customer2 = new OrganisationBuilder(this.DatabaseSession).WithName("customer2").Build(); var salesRep1 = new PersonBuilder(this.DatabaseSession).WithLastName("salesRep1").Build(); var salesRep2 = new PersonBuilder(this.DatabaseSession).WithLastName("salesRep2").Build(); var catMain = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("main cat").Build(); var cat1 = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("cat for good1").WithParent(catMain).Build(); var cat2 = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("cat for good2").WithParent(catMain).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer1).WithProductCategory(cat1).WithSalesRepresentative(salesRep1).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer1).WithProductCategory(cat2).WithSalesRepresentative(salesRep2).Build(); this.DatabaseSession.Derive(true); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer2).WithProductCategory(cat1).WithSalesRepresentative(salesRep1).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer2).WithProductCategory(cat2).WithSalesRepresentative(salesRep2).Build(); this.DatabaseSession.Derive(true); var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); 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) .WithPrimaryProductCategory(cat1) .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) .WithPrimaryProductCategory(cat2) .Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); internalOrganisation.PreferredCurrency = euro; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer1).WithInternalOrganisation(internalOrganisation).Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer2).WithInternalOrganisation(internalOrganisation).Build(); this.DatabaseSession.Derive(true); var invoice1 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTime.UtcNow) .WithInvoiceNumber("1") .WithBillToCustomer(customer1) .WithBillToContactMechanism(contactMechanism) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); var item1 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item1); var item2 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item2); var item3 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantity(5).WithActualUnitPrice(10).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item3); this.DatabaseSession.Derive(true); Singleton.Instance(this.DatabaseSession).DeriveRevenues(); var customer1ProductRevenues = customer1.PartyProductRevenuesWhereParty; Assert.AreEqual(2, customer1ProductRevenues.Count); customer1ProductRevenues = customer1.PartyProductRevenuesWhereParty; customer1ProductRevenues.Filter.AddEquals(PartyProductRevenues.Meta.Product, good1); var customer1Good1Revenue = customer1ProductRevenues.First; customer1ProductRevenues = customer1.PartyProductRevenuesWhereParty; customer1ProductRevenues.Filter.AddEquals(PartyProductRevenues.Meta.Product, good2); var customer1Good2Revenue = customer1ProductRevenues.First; Assert.AreEqual(90, customer1Good1Revenue.Revenue); Assert.AreEqual(6, customer1Good1Revenue.Quantity); Assert.AreEqual(50, customer1Good2Revenue.Revenue); Assert.AreEqual(5, customer1Good2Revenue.Quantity); var invoice2 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTime.UtcNow) .WithInvoiceNumber("1") .WithBillToCustomer(customer2) .WithBillToContactMechanism(contactMechanism) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); var item4 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(1).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice2.AddSalesInvoiceItem(item4); this.DatabaseSession.Derive(true); var item5 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantity(1).WithActualUnitPrice(10).WithSalesInvoiceItemType(productItem).Build(); invoice2.AddSalesInvoiceItem(item5); this.DatabaseSession.Derive(true); Singleton.Instance(this.DatabaseSession).DeriveRevenues(); var customer2ProductRevenues = customer2.PartyProductRevenuesWhereParty; Assert.AreEqual(2, customer2ProductRevenues.Count); customer2ProductRevenues.Filter.AddEquals(PartyProductRevenues.Meta.Product, good1); var customer2Good1Revenue = customer2ProductRevenues.First; customer2ProductRevenues = customer2.PartyProductRevenuesWhereParty; customer2ProductRevenues.Filter.AddEquals(PartyProductRevenues.Meta.Product, good2); var customer2Good2Revenue = customer2ProductRevenues.First; Assert.AreEqual(15, customer2Good1Revenue.Revenue); Assert.AreEqual(1, customer2Good1Revenue.Quantity); Assert.AreEqual(10, customer2Good2Revenue.Revenue); Assert.AreEqual(1, customer2Good2Revenue.Quantity); }
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 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); }
public void GivenSalesInvoiceWithShippingAndHandlingPercentage_WhenDeriving_ThenSalesInvoiceTotalsMustIncludeShippingAndHandlingAmount() { var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var adjustment = new ShippingAndHandlingChargeBuilder(this.DatabaseSession).WithPercentage(5).WithVatRate(vatRate21).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(); 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 internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); internalOrganisation.PreferredCurrency = euro; var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceNumber("1") .WithBillToCustomer(new OrganisationBuilder(this.DatabaseSession).WithName("customer").Build()) .WithBillToContactMechanism(contactMechanism) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .WithShippingAndHandlingCharge(adjustment) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(invoice.BillToCustomer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); var item1 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem).Build(); invoice.AddSalesInvoiceItem(item1); this.DatabaseSession.Derive(true); Assert.AreEqual(45, invoice.TotalBasePrice); Assert.AreEqual(0, invoice.TotalDiscount); Assert.AreEqual(0, invoice.TotalSurcharge); Assert.AreEqual(2.25, invoice.TotalShippingAndHandling); Assert.AreEqual(0, invoice.TotalFee); Assert.AreEqual(47.25, invoice.TotalExVat); Assert.AreEqual(9.92, invoice.TotalVat); Assert.AreEqual(57.17, invoice.TotalIncVat); }
public override void Init() { base.Init(); var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); this.supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").WithLocale(new Locales(this.DatabaseSession).EnglishGreatBritain).Build(); this.internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); this.vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); this.mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); this.kiev = new CityBuilder(this.DatabaseSession).WithName("Kiev").Build(); this.billToContactMechanismMechelen = new PostalAddressBuilder(this.DatabaseSession).WithAddress1("Mechelen").WithGeographicBoundary(this.mechelen).Build(); this.shipToContactMechanismKiev = new PostalAddressBuilder(this.DatabaseSession).WithAddress1("Kiev").WithGeographicBoundary(this.kiev).Build(); this.billToCustomer = new OrganisationBuilder(this.DatabaseSession).WithName("billToCustomer").WithPreferredCurrency(euro).Build(); this.shipToCustomer = new OrganisationBuilder(this.DatabaseSession).WithName("shipToCustomer").WithPreferredCurrency(euro).Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(this.billToCustomer).WithInternalOrganisation(this.internalOrganisation).Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(this.shipToCustomer).WithInternalOrganisation(this.internalOrganisation).Build(); this.DatabaseSession.Derive(true); this.good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(this.vatRate21) .WithName("good") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.feature1 = new ColourBuilder(this.DatabaseSession) .WithName("white") .WithVatRate(this.vatRate21) .WithLocalisedName(new LocalisedTextBuilder(this.DatabaseSession) .WithText("white") .WithLocale(Singleton.Instance(this.DatabaseSession).DefaultLocale) .Build()) .Build(); this.feature2 = new ColourBuilder(this.DatabaseSession) .WithName("black") .WithLocalisedName(new LocalisedTextBuilder(this.DatabaseSession) .WithText("black") .WithLocale(Singleton.Instance(this.DatabaseSession).DefaultLocale) .Build()) .Build(); this.goodPurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .WithPrice(7) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.goodSupplierOffering = new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(this.good) .WithSupplier(this.supplier) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .WithProductPurchasePrice(this.goodPurchasePrice) .Build(); this.currentBasePriceGeoBoundary = new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current BasePriceGeoBoundary") .WithGeographicBoundary(this.mechelen) .WithProduct(this.good) .WithPrice(8) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .Build(); // previous basePrice for good new BasePriceBuilder(this.DatabaseSession).WithDescription("previous good") .WithSpecifiedFor(this.internalOrganisation) .WithProduct(this.good) .WithPrice(8) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .Build(); this.currentGood1BasePrice = new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current good") .WithProduct(this.good) .WithPrice(10) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .Build(); // future basePrice for good new BasePriceBuilder(this.DatabaseSession).WithDescription("future good") .WithSpecifiedFor(this.internalOrganisation) .WithProduct(this.good) .WithPrice(11) .WithFromDate(DateTime.UtcNow.AddYears(1)) .Build(); // previous basePrice for feature1 new BasePriceBuilder(this.DatabaseSession).WithDescription("previous feature1") .WithSpecifiedFor(this.internalOrganisation) .WithProductFeature(this.feature1) .WithPrice(0.5M) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .Build(); // future basePrice for feature1 new BasePriceBuilder(this.DatabaseSession).WithDescription("future feature1") .WithSpecifiedFor(this.internalOrganisation) .WithProductFeature(this.feature1) .WithPrice(2.5M) .WithFromDate(DateTime.UtcNow.AddYears(1)) .Build(); this.currentFeature1BasePrice = new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current feature1") .WithProductFeature(this.feature1) .WithPrice(2) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .Build(); // previous basePrice for feature2 new BasePriceBuilder(this.DatabaseSession).WithDescription("previous feature2") .WithSpecifiedFor(this.internalOrganisation) .WithProductFeature(this.feature2) .WithPrice(2) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .Build(); // future basePrice for feature2 new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("future feature2") .WithProductFeature(this.feature2) .WithPrice(4) .WithFromDate(DateTime.UtcNow.AddYears(1)) .Build(); new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current feature2") .WithProductFeature(this.feature2) .WithPrice(3) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .Build(); // previous basePrice for good with feature1 new BasePriceBuilder(this.DatabaseSession).WithDescription("previous good/feature1") .WithSpecifiedFor(this.internalOrganisation) .WithProduct(this.good) .WithProductFeature(this.feature1) .WithPrice(4) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .Build(); // future basePrice for good with feature1 new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("future good/feature1") .WithProduct(this.good) .WithProductFeature(this.feature1) .WithPrice(6) .WithFromDate(DateTime.UtcNow.AddYears(1)) .Build(); this.currentGood1Feature1BasePrice = new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current good/feature1") .WithProduct(this.good) .WithProductFeature(this.feature1) .WithPrice(5) .WithFromDate(DateTime.UtcNow.AddMinutes(-1)) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .Build(); this.invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .WithBillToContactMechanism(this.billToContactMechanismMechelen) .WithBillToCustomer(this.billToCustomer) .WithShipToAddress(this.shipToContactMechanismKiev) .WithShipToCustomer(this.shipToCustomer) .WithBilledFromInternalOrganisation(this.internalOrganisation) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); }
public void GivenSalesInvoiceBuilderWithoutBillToCustomer_WhenBuilding_ThenDerivedCurrencyIsInternalOrganisationsPreferredCurrency() { var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); internalOrganisation.PreferredCurrency = euro; 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(); var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceNumber("1") .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .WithBilledFromInternalOrganisation(internalOrganisation) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); Assert.AreEqual(euro, invoice.CustomerCurrency); }
public void GivenSalesInvoice_WhenWrittenOff_ThenRevenueIsUpdated() { var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).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(); 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 internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); internalOrganisation.PreferredCurrency = euro; var customer = new OrganisationBuilder(this.DatabaseSession).WithName("customer").Build(); var invoice1 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTimeFactory.CreateDate(2010, 01, 01)) .WithInvoiceNumber("1") .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(new SalesChannels(this.DatabaseSession).WebChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); var item1 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem).Build(); invoice1.AddSalesInvoiceItem(item1); this.DatabaseSession.Derive(true); invoice1.Send(); this.DatabaseSession.Derive(true); var invoice2 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTimeFactory.CreateDate(2010, 01, 01)) .WithInvoiceNumber("2") .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(new SalesChannels(this.DatabaseSession).WebChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); var item2 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good).WithQuantity(1).WithActualUnitPrice(15).WithSalesInvoiceItemType(new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem).Build(); invoice2.AddSalesInvoiceItem(item2); this.DatabaseSession.Derive(true); var internalOrganisationRevenue = internalOrganisation.InternalOrganisationRevenuesWhereInternalOrganisation[0]; var storeRevenue = invoice1.Store.StoreRevenuesWhereStore[0]; var salesChannelRevenue = invoice1.SalesChannel.SalesChannelRevenuesWhereSalesChannel[0]; var productRevenue = good.ProductRevenuesWhereProduct[0]; var partyRevenue = customer.PartyRevenuesWhereParty[0]; var partypPrductRevenue = customer.PartyProductRevenuesWhereParty[0]; Assert.AreEqual(60, internalOrganisationRevenue.Revenue); Assert.AreEqual(2010, internalOrganisationRevenue.Year); Assert.AreEqual(60, storeRevenue.Revenue); Assert.AreEqual(2010, storeRevenue.Year); Assert.AreEqual(60, salesChannelRevenue.Revenue); Assert.AreEqual(2010, salesChannelRevenue.Year); Assert.AreEqual(60, productRevenue.Revenue); Assert.AreEqual(2010, productRevenue.Year); Assert.AreEqual(60, partyRevenue.Revenue); Assert.AreEqual(2010, partyRevenue.Year); Assert.AreEqual(60, partypPrductRevenue.Revenue); Assert.AreEqual(2010, partypPrductRevenue.Year); invoice2.WriteOff(); this.DatabaseSession.Derive(true); internalOrganisationRevenue = internalOrganisation.InternalOrganisationRevenuesWhereInternalOrganisation[0]; storeRevenue = invoice1.Store.StoreRevenuesWhereStore[0]; salesChannelRevenue = invoice1.SalesChannel.SalesChannelRevenuesWhereSalesChannel[0]; productRevenue = good.ProductRevenuesWhereProduct[0]; partyRevenue = customer.PartyRevenuesWhereParty[0]; partypPrductRevenue = customer.PartyProductRevenuesWhereParty[0]; Assert.AreEqual(45, internalOrganisationRevenue.Revenue); Assert.AreEqual(2010, internalOrganisationRevenue.Year); Assert.AreEqual(45, storeRevenue.Revenue); Assert.AreEqual(2010, storeRevenue.Year); Assert.AreEqual(45, salesChannelRevenue.Revenue); Assert.AreEqual(2010, salesChannelRevenue.Year); Assert.AreEqual(45, productRevenue.Revenue); Assert.AreEqual(2010, productRevenue.Year); Assert.AreEqual(45, partyRevenue.Revenue); Assert.AreEqual(2010, partyRevenue.Year); Assert.AreEqual(45, partypPrductRevenue.Revenue); Assert.AreEqual(2010, partypPrductRevenue.Year); }
public void GivenSalesInvoiceBuilderWithBillToCustomerWithPreferredCurrency_WhenBuilding_ThenDerivedCurrencyIsCustomersPreferredCurrency() { var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var customer = new OrganisationBuilder(this.DatabaseSession) .WithName("customer") .WithPreferredCurrency(euro) .Build(); var billToContactMechanismMechelen = new PostalAddressBuilder(this.DatabaseSession).WithAddress1("Mechelen").Build(); var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithBillToContactMechanism(billToContactMechanismMechelen) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); Assert.AreEqual(euro, invoice.CustomerCurrency); }
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 GivenSalesOrderWithBillToCustomerWithPreferredCurrency_WhenBuild_ThenCurrencyIsFromCustomer() { var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var englischLocale = new Locales(this.DatabaseSession).EnglishGreatBritain; var poundSterling = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "GBP"); var customer = new OrganisationBuilder(this.DatabaseSession).WithName("customer").WithLocale(englischLocale).WithPreferredCurrency(poundSterling).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) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); this.DatabaseSession.Derive(true); Assert.AreEqual(poundSterling, order.CustomerCurrency); var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); customer.PreferredCurrency = euro; this.DatabaseSession.Derive(true); Assert.AreEqual(englischLocale.Country.Currency, order.CustomerCurrency); }
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.internalOrganisation.PreferredCurrency = euro; this.supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); this.vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); this.kiev = new CityBuilder(this.DatabaseSession).WithName("Kiev").Build(); this.shipToContactMechanismMechelen = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); this.shipToContactMechanismKiev = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(this.kiev).WithAddress1("Dnieper").Build(); this.shipToCustomer = new OrganisationBuilder(this.DatabaseSession).WithName("shipToCustomer").Build(); this.shipToCustomer.AddPartyContactMechanism(new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(this.shipToContactMechanismKiev) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).ShippingAddress) .WithUseAsDefault(true) .Build()); this.billToCustomer = new OrganisationBuilder(this.DatabaseSession) .WithName("billToCustomer") .WithPreferredCurrency(euro) .Build(); this.billToCustomer.AddPartyContactMechanism(new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(this.shipToContactMechanismKiev) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).BillingAddress) .WithUseAsDefault(true) .Build()); this.part = new FinishedGoodBuilder(this.DatabaseSession).WithName("part").Build(); this.ancestorProductCategory = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("ancestor").Build(); this.parentProductCategory = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("parent").WithParent(this.ancestorProductCategory).Build(); this.productCategory = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("gizmo").Build(); this.productCategory.AddParent(this.parentProductCategory); this.good = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(this.vatRate21) .WithName("good") .WithProductCategory(this.productCategory) .WithFinishedGood(this.part) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithInternalOrganisation(this.internalOrganisation) .WithSupplier(this.supplier) .WithFromDate(DateTime.UtcNow) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession) .WithCustomer(this.billToCustomer) .WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession) .WithCustomer(this.shipToCustomer) .WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation) .Build(); this.partyRevenueHistory = new PartyRevenueHistoryBuilder(this.DatabaseSession) .WithCurrency(euro) .WithInternalOrganisation(this.internalOrganisation) .WithParty(this.billToCustomer) .WithRevenue(100M) .Build(); this.productCategoryRevenueHistory = new PartyProductCategoryRevenueHistoryBuilder(this.DatabaseSession) .WithCurrency(euro) .WithInternalOrganisation(this.internalOrganisation) .WithParty(this.billToCustomer) .WithProductCategory(this.productCategory) .WithRevenue(100M) .WithQuantity(10) .Build(); this.parentProductCategoryRevenueHistory = new PartyProductCategoryRevenueHistoryBuilder(this.DatabaseSession) .WithCurrency(euro) .WithInternalOrganisation(this.internalOrganisation) .WithParty(this.billToCustomer) .WithProductCategory(this.parentProductCategory) .WithRevenue(100M) .WithQuantity(10) .Build(); this.ancestorProductCategoryRevenueHistory = new PartyProductCategoryRevenueHistoryBuilder(this.DatabaseSession) .WithCurrency(euro) .WithInternalOrganisation(this.internalOrganisation) .WithParty(this.billToCustomer) .WithProductCategory(this.ancestorProductCategory) .WithRevenue(100M) .WithQuantity(10) .Build(); this.variantGood = new GoodBuilder(this.DatabaseSession) .WithSku("v10101") .WithVatRate(this.vatRate21) .WithName("variant good") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); this.variantGood2 = new GoodBuilder(this.DatabaseSession) .WithSku("v10102") .WithVatRate(this.vatRate21) .WithName("variant good2") .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); this.virtualGood = new GoodBuilder(this.DatabaseSession) .WithSku("v10103") .WithVatRate(this.vatRate21) .WithName("virtual good") .WithVariant(this.variantGood) .WithVariant(this.variantGood2) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .Build(); this.goodPurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithFromDate(DateTime.UtcNow) .WithPrice(7) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.goodSupplierOffering = new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(this.good) .WithSupplier(this.supplier) .WithFromDate(DateTime.UtcNow) .WithProductPurchasePrice(this.goodPurchasePrice) .Build(); this.virtualGoodPurchasePrice = new ProductPurchasePriceBuilder(this.DatabaseSession) .WithCurrency(euro) .WithFromDate(DateTime.UtcNow) .WithPrice(8) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .Build(); this.virtualgoodSupplierOffering = new SupplierOfferingBuilder(this.DatabaseSession) .WithProduct(this.virtualGood) .WithSupplier(this.supplier) .WithFromDate(DateTime.UtcNow) .WithProductPurchasePrice(this.virtualGoodPurchasePrice) .Build(); this.feature1 = new ColourBuilder(this.DatabaseSession) .WithName("white") .WithVatRate(this.vatRate21) .WithLocalisedName(new LocalisedTextBuilder(this.DatabaseSession) .WithText("white") .WithLocale(Singleton.Instance(this.DatabaseSession).DefaultLocale) .Build()) .Build(); this.feature2 = new ColourBuilder(this.DatabaseSession) .WithName("black") .WithLocalisedName(new LocalisedTextBuilder(this.DatabaseSession) .WithText("black") .WithLocale(Singleton.Instance(this.DatabaseSession).DefaultLocale) .Build()) .Build(); this.currentBasePriceGeoBoundary = new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current BasePriceGeoBoundary ") .WithGeographicBoundary(mechelen) .WithProduct(this.good) .WithPrice(8) .WithFromDate(DateTime.UtcNow) .Build(); // previous basePrice for good new BasePriceBuilder(this.DatabaseSession).WithDescription("previous good") .WithSpecifiedFor(this.internalOrganisation) .WithProduct(this.good) .WithPrice(8) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .Build(); // future basePrice for good new BasePriceBuilder(this.DatabaseSession).WithDescription("future good") .WithSpecifiedFor(this.internalOrganisation) .WithProduct(this.good) .WithPrice(11) .WithFromDate(DateTime.UtcNow.AddYears(1)) .Build(); this.currentGoodBasePrice = 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(); // previous basePrice for feature1 new BasePriceBuilder(this.DatabaseSession).WithDescription("previous feature1") .WithSpecifiedFor(this.internalOrganisation) .WithProductFeature(this.feature1) .WithPrice(0.5M) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .Build(); // future basePrice for feature1 new BasePriceBuilder(this.DatabaseSession).WithDescription("future feature1") .WithSpecifiedFor(this.internalOrganisation) .WithProductFeature(this.feature1) .WithPrice(2.5M) .WithFromDate(DateTime.UtcNow.AddYears(1)) .Build(); new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current feature1") .WithProductFeature(this.feature1) .WithPrice(2) .WithFromDate(DateTime.UtcNow) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .Build(); // previous basePrice for feature2 new BasePriceBuilder(this.DatabaseSession).WithDescription("previous feature2") .WithSpecifiedFor(this.internalOrganisation) .WithProductFeature(this.feature2) .WithPrice(2) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .Build(); // future basePrice for feature2 new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("future feature2") .WithProductFeature(this.feature2) .WithPrice(4) .WithFromDate(DateTime.UtcNow.AddYears(1)) .Build(); this.currentFeature2BasePrice = new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current feature2") .WithProductFeature(this.feature2) .WithPrice(3) .WithFromDate(DateTime.UtcNow) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .Build(); // previous basePrice for good with feature1 new BasePriceBuilder(this.DatabaseSession).WithDescription("previous good/feature1") .WithSpecifiedFor(this.internalOrganisation) .WithProduct(this.good) .WithProductFeature(this.feature1) .WithPrice(4) .WithFromDate(DateTime.UtcNow.AddYears(-1)) .WithThroughDate(DateTime.UtcNow.AddDays(-1)) .Build(); // future basePrice for good with feature1 new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("future good/feature1") .WithProduct(this.good) .WithProductFeature(this.feature1) .WithPrice(6) .WithFromDate(DateTime.UtcNow.AddYears(1)) .Build(); this.currentGood1Feature1BasePrice = new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current good/feature1") .WithProduct(this.good) .WithProductFeature(this.feature1) .WithPrice(5) .WithFromDate(DateTime.UtcNow) .WithThroughDate(DateTime.UtcNow.AddYears(1).AddDays(-1)) .Build(); new BasePriceBuilder(this.DatabaseSession) .WithSpecifiedFor(this.internalOrganisation) .WithDescription("current variant good2") .WithProduct(this.variantGood2) .WithPrice(11) .WithFromDate(DateTime.UtcNow) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); this.order = new SalesOrderBuilder(this.DatabaseSession) .WithShipToCustomer(this.shipToCustomer) .WithBillToCustomer(this.billToCustomer) .WithTakenByInternalOrganisation(this.internalOrganisation) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); }
public void GivenSalesInvoice_WhenDeriving_ThenRevenuesAreCreatedAndUpdated() { var productItem = new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem; var contactMechanism = new ContactMechanisms(this.DatabaseSession).Extent().First; var customer1 = new OrganisationBuilder(this.DatabaseSession).WithName("customer1").Build(); var customer2 = new OrganisationBuilder(this.DatabaseSession).WithName("customer2").Build(); var salesRep1 = new PersonBuilder(this.DatabaseSession).WithLastName("salesRep1").Build(); var salesRep2 = new PersonBuilder(this.DatabaseSession).WithLastName("salesRep2").Build(); var catMain = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("main cat").Build(); var cat1 = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("cat for good1").WithParent(catMain).Build(); var cat2 = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("cat for good2").WithParent(catMain).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer1).WithProductCategory(cat1).WithSalesRepresentative(salesRep1).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer1).WithProductCategory(cat2).WithSalesRepresentative(salesRep2).Build(); this.DatabaseSession.Derive(true); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer2).WithProductCategory(cat1).WithSalesRepresentative(salesRep1).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer2).WithProductCategory(cat2).WithSalesRepresentative(salesRep2).Build(); this.DatabaseSession.Derive(true); var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); 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) .WithPrimaryProductCategory(cat1) .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) .WithPrimaryProductCategory(cat2) .Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); internalOrganisation.PreferredCurrency = euro; var invoice1 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTime.UtcNow) .WithInvoiceNumber("1") .WithBillToCustomer(customer1) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(new SalesChannels(this.DatabaseSession).WebChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(invoice1.BillToCustomer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); var item1 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item1); var item2 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(3).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item2); var item3 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantity(5).WithActualUnitPrice(10).WithSalesInvoiceItemType(productItem).Build(); invoice1.AddSalesInvoiceItem(item3); this.DatabaseSession.Derive(true); var customer1Revenue = customer1.PartyRevenuesWhereParty[0]; var internalOrganisationRevenue = internalOrganisation.InternalOrganisationRevenuesWhereInternalOrganisation[0]; var storeRevenue = invoice1.Store.StoreRevenuesWhereStore[0]; var salesChannelRevenue = invoice1.SalesChannel.SalesChannelRevenuesWhereSalesChannel[0]; var salesRep1Revenue = salesRep1.SalesRepRevenuesWhereSalesRep[0]; var salesRep2Revenue = salesRep2.SalesRepRevenuesWhereSalesRep[0]; var good1Revenue = good1.ProductRevenuesWhereProduct[0]; var good2Revenue = good2.ProductRevenuesWhereProduct[0]; var cat1Revenue = cat1.ProductCategoryRevenuesWhereProductCategory[0]; var cat2Revenue = cat2.ProductCategoryRevenuesWhereProductCategory[0]; var catMainRevenue = catMain.ProductCategoryRevenuesWhereProductCategory[0]; var customer1ProductRevenues = customer1.PartyProductRevenuesWhereParty; Assert.AreEqual(2, customer1ProductRevenues.Count); customer1ProductRevenues = customer1.PartyProductRevenuesWhereParty; customer1ProductRevenues.Filter.AddEquals(PartyProductRevenues.Meta.Product, good1); var customer1Good1Revenue = customer1ProductRevenues.First; customer1ProductRevenues = customer1.PartyProductRevenuesWhereParty; customer1ProductRevenues.Filter.AddEquals(PartyProductRevenues.Meta.Product, good2); var customer1Good2Revenue = customer1ProductRevenues.First; var customer1ProductCategoryRevenues = customer1.PartyProductCategoryRevenuesWhereParty; Assert.AreEqual(3, customer1ProductCategoryRevenues.Count); customer1ProductCategoryRevenues.Filter.AddEquals(PartyProductCategoryRevenues.Meta.ProductCategory, cat1); var customer1Cat1Revenue = customer1ProductCategoryRevenues.First; customer1ProductCategoryRevenues = customer1.PartyProductCategoryRevenuesWhereParty; customer1ProductCategoryRevenues.Filter.AddEquals(PartyProductCategoryRevenues.Meta.ProductCategory, cat2); var customer1Cat2Revenue = customer1ProductCategoryRevenues.First; customer1ProductCategoryRevenues = customer1.PartyProductCategoryRevenuesWhereParty; customer1ProductCategoryRevenues.Filter.AddEquals(PartyProductCategoryRevenues.Meta.ProductCategory, catMain); var customer1CatMainRevenue = customer1ProductCategoryRevenues.First; var salesRep1Customer1Revenues = salesRep1.SalesRepPartyRevenuesWhereSalesRep; salesRep1Customer1Revenues.Filter.AddEquals(SalesRepPartyRevenues.Meta.Party, customer1); var salesRep1Customer1Revenue = salesRep1Customer1Revenues.First; var salesRep2Customer1Revenues = salesRep2.SalesRepPartyRevenuesWhereSalesRep; salesRep2Customer1Revenues.Filter.AddEquals(SalesRepPartyRevenues.Meta.Party, customer1); var salesRep2Customer1Revenue = salesRep2Customer1Revenues.First; var salesRep1Customer1ProductCategoryRevenues = salesRep1.SalesRepPartyProductCategoryRevenuesWhereSalesRep; Assert.AreEqual(2, salesRep1Customer1ProductCategoryRevenues.Count); salesRep1Customer1ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.ProductCategory, cat1); salesRep1Customer1ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer1); var salesRep1Customer1Cat1Revenue = salesRep1Customer1ProductCategoryRevenues.First; salesRep1Customer1ProductCategoryRevenues = salesRep1.SalesRepPartyProductCategoryRevenuesWhereSalesRep; salesRep1Customer1ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.ProductCategory, catMain); salesRep1Customer1ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer1); var salesRep1Customer1CatMainRevenue = salesRep1Customer1ProductCategoryRevenues.First; var salesRep2Customer1ProductCategoryRevenues = salesRep2.SalesRepPartyProductCategoryRevenuesWhereSalesRep; Assert.AreEqual(2, salesRep2Customer1ProductCategoryRevenues.Count); salesRep2Customer1ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.ProductCategory, cat2); salesRep2Customer1ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer1); var salesRep2Customer1Cat2Revenue = salesRep2Customer1ProductCategoryRevenues.First; salesRep2Customer1ProductCategoryRevenues = salesRep2.SalesRepPartyProductCategoryRevenuesWhereSalesRep; salesRep2Customer1ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer1); salesRep2Customer1ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.ProductCategory, catMain); var salesRep2Customer1CatMainRevenue = salesRep2Customer1ProductCategoryRevenues.First; var salesRep1ProductCategoryRevenues = salesRep1.SalesRepProductCategoryRevenuesWhereSalesRep; Assert.AreEqual(2, salesRep1ProductCategoryRevenues.Count); salesRep1ProductCategoryRevenues.Filter.AddEquals(SalesRepProductCategoryRevenues.Meta.ProductCategory, cat1); var salesRep1Cat1Revenue = salesRep1ProductCategoryRevenues.First; salesRep1ProductCategoryRevenues = salesRep1.SalesRepProductCategoryRevenuesWhereSalesRep; salesRep1ProductCategoryRevenues.Filter.AddEquals(SalesRepProductCategoryRevenues.Meta.ProductCategory, catMain); var salesRep1CatMainRevenue = salesRep1ProductCategoryRevenues.First; var salesRep2ProductCategoryRevenues = salesRep2.SalesRepProductCategoryRevenuesWhereSalesRep; Assert.AreEqual(2, salesRep2ProductCategoryRevenues.Count); salesRep2ProductCategoryRevenues.Filter.AddEquals(SalesRepProductCategoryRevenues.Meta.ProductCategory, cat2); var salesRep2Cat2Revenue = salesRep2ProductCategoryRevenues.First; salesRep2ProductCategoryRevenues = salesRep2.SalesRepProductCategoryRevenuesWhereSalesRep; salesRep2ProductCategoryRevenues.Filter.AddEquals(SalesRepProductCategoryRevenues.Meta.ProductCategory, catMain); var salesRep2CatMainRevenue = salesRep2ProductCategoryRevenues.First; this.DatabaseSession.Derive(true); Assert.AreEqual(140, internalOrganisationRevenue.Revenue); Assert.AreEqual(140, storeRevenue.Revenue); Assert.AreEqual(140, salesChannelRevenue.Revenue); Assert.AreEqual(90, salesRep1Revenue.Revenue); Assert.AreEqual(50, salesRep2Revenue.Revenue); Assert.AreEqual(90, salesRep1Customer1Revenue.Revenue); Assert.AreEqual(50, salesRep2Customer1Revenue.Revenue); Assert.AreEqual(90, good1Revenue.Revenue); Assert.AreEqual(50, good2Revenue.Revenue); Assert.AreEqual(90, cat1Revenue.Revenue); Assert.AreEqual(50, cat2Revenue.Revenue); Assert.AreEqual(140, catMainRevenue.Revenue); Assert.AreEqual(90, customer1Cat1Revenue.Revenue); Assert.AreEqual(50, customer1Cat2Revenue.Revenue); Assert.AreEqual(140, customer1CatMainRevenue.Revenue); Assert.AreEqual(90, salesRep1Cat1Revenue.Revenue); Assert.AreEqual(90, salesRep1CatMainRevenue.Revenue); Assert.AreEqual(50, salesRep2Cat2Revenue.Revenue); Assert.AreEqual(50, salesRep2CatMainRevenue.Revenue); Assert.AreEqual(90, salesRep1Customer1Cat1Revenue.Revenue); Assert.AreEqual(90, salesRep1Customer1CatMainRevenue.Revenue); Assert.AreEqual(50, salesRep2Customer1Cat2Revenue.Revenue); Assert.AreEqual(50, salesRep2Customer1CatMainRevenue.Revenue); Assert.AreEqual(140, customer1Revenue.Revenue); Assert.AreEqual(90, customer1Good1Revenue.Revenue); Assert.AreEqual(50, customer1Good2Revenue.Revenue); var invoice2 = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(DateTime.UtcNow) .WithInvoiceNumber("1") .WithBillToCustomer(customer2) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(new SalesChannels(this.DatabaseSession).WebChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(invoice2.BillToCustomer).WithInternalOrganisation(invoice2.BilledFromInternalOrganisation).Build(); var item4 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(1).WithActualUnitPrice(15).WithSalesInvoiceItemType(productItem).Build(); invoice2.AddSalesInvoiceItem(item4); this.DatabaseSession.Derive(true); var item5 = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good2).WithQuantity(1).WithActualUnitPrice(10).WithSalesInvoiceItemType(productItem).Build(); invoice2.AddSalesInvoiceItem(item5); this.DatabaseSession.Derive(true); var customer2Revenue = customer2.PartyRevenuesWhereParty[0]; var customer2ProductRevenues = customer2.PartyProductRevenuesWhereParty; Assert.AreEqual(2, customer2ProductRevenues.Count); customer2ProductRevenues.Filter.AddEquals(PartyProductRevenues.Meta.Product, good1); var customer2Good1Revenue = customer2ProductRevenues.First; customer2ProductRevenues = customer2.PartyProductRevenuesWhereParty; customer2ProductRevenues.Filter.AddEquals(PartyProductRevenues.Meta.Product, good2); var customer2Good2Revenue = customer2ProductRevenues.First; var customer2ProductCategoryRevenues = customer2.PartyProductCategoryRevenuesWhereParty; Assert.AreEqual(3, customer2ProductCategoryRevenues.Count); customer2ProductCategoryRevenues.Filter.AddEquals(PartyProductCategoryRevenues.Meta.ProductCategory, cat1); var customer2Cat1Revenue = customer2ProductCategoryRevenues.First; customer2ProductCategoryRevenues = customer2.PartyProductCategoryRevenuesWhereParty; customer2ProductCategoryRevenues.Filter.AddEquals(PartyProductCategoryRevenues.Meta.ProductCategory, cat2); var customer2Cat2Revenue = customer2ProductCategoryRevenues.First; customer2ProductCategoryRevenues = customer2.PartyProductCategoryRevenuesWhereParty; customer2ProductCategoryRevenues.Filter.AddEquals(PartyProductCategoryRevenues.Meta.ProductCategory, catMain); var customer2CatMainRevenue = customer2ProductCategoryRevenues.First; var salesRep1Customer2Revenues = salesRep1.SalesRepPartyRevenuesWhereSalesRep; salesRep1Customer2Revenues.Filter.AddEquals(SalesRepPartyRevenues.Meta.Party, customer2); var salesRep1Customer2Revenue = salesRep1Customer2Revenues.First; var salesRep2Customer2Revenues = salesRep2.SalesRepPartyRevenuesWhereSalesRep; salesRep2Customer2Revenues.Filter.AddEquals(SalesRepPartyRevenues.Meta.Party, customer2); var salesRep2Customer2Revenue = salesRep2Customer2Revenues.First; var salesRep1Customer2ProductCategoryRevenues = salesRep1.SalesRepPartyProductCategoryRevenuesWhereSalesRep; salesRep1Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer2); Assert.AreEqual(2, salesRep1Customer2ProductCategoryRevenues.Count); salesRep1Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.ProductCategory, cat1); salesRep1Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer2); var salesRep1Customer2Cat1Revenue = salesRep1Customer2ProductCategoryRevenues.First; salesRep1Customer2ProductCategoryRevenues = salesRep1.SalesRepPartyProductCategoryRevenuesWhereSalesRep; salesRep1Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.ProductCategory, catMain); salesRep1Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer2); var salesRep1Customer2CatMainRevenue = salesRep1Customer2ProductCategoryRevenues.First; var salesRep2Customer2ProductCategoryRevenues = salesRep2.SalesRepPartyProductCategoryRevenuesWhereSalesRep; salesRep2Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer2); Assert.AreEqual(2, salesRep2Customer2ProductCategoryRevenues.Count); salesRep2Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.ProductCategory, cat2); salesRep2Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer2); var salesRep2Customer2Cat2Revenue = salesRep2Customer2ProductCategoryRevenues.First; salesRep2Customer2ProductCategoryRevenues = salesRep2.SalesRepPartyProductCategoryRevenuesWhereSalesRep; salesRep2Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.Party, customer2); salesRep2Customer2ProductCategoryRevenues.Filter.AddEquals(SalesRepPartyProductCategoryRevenues.Meta.ProductCategory, catMain); var salesRep2Customer2CatMainRevenue = salesRep2Customer2ProductCategoryRevenues.First; Assert.AreEqual(165, internalOrganisationRevenue.Revenue); Assert.AreEqual(165, storeRevenue.Revenue); Assert.AreEqual(165, salesChannelRevenue.Revenue); Assert.AreEqual(105, salesRep1Revenue.Revenue); Assert.AreEqual(60, salesRep2Revenue.Revenue); Assert.AreEqual(15, salesRep1Customer2Revenue.Revenue); Assert.AreEqual(10, salesRep2Customer2Revenue.Revenue); Assert.AreEqual(105, cat1Revenue.Revenue); Assert.AreEqual(60, cat2Revenue.Revenue); Assert.AreEqual(165, catMainRevenue.Revenue); Assert.AreEqual(15, customer2Cat1Revenue.Revenue); Assert.AreEqual(10, customer2Cat2Revenue.Revenue); Assert.AreEqual(25, customer2CatMainRevenue.Revenue); Assert.AreEqual(105, salesRep1Cat1Revenue.Revenue); Assert.AreEqual(105, salesRep1CatMainRevenue.Revenue); Assert.AreEqual(60, salesRep2Cat2Revenue.Revenue); Assert.AreEqual(60, salesRep2CatMainRevenue.Revenue); Assert.AreEqual(15, salesRep1Customer2Cat1Revenue.Revenue); Assert.AreEqual(15, salesRep1Customer2CatMainRevenue.Revenue); Assert.AreEqual(10, salesRep2Customer2Cat2Revenue.Revenue); Assert.AreEqual(10, salesRep2Customer2CatMainRevenue.Revenue); Assert.AreEqual(105, good1Revenue.Revenue); Assert.AreEqual(60, good2Revenue.Revenue); Assert.AreEqual(25, customer2Revenue.Revenue); Assert.AreEqual(15, customer2Good1Revenue.Revenue); Assert.AreEqual(10, customer2Good2Revenue.Revenue); }