public static CustomerShipment AppsGetPendingCustomerShipmentForStore(this Party party, PostalAddress address, Store store, ShipmentMethod shipmentMethod) { var shipments = party.ShipmentsWhereShipToParty; shipments.Filter.AddEquals(Shipments.Meta.ShipToAddress, address); shipments.Filter.AddEquals(Shipments.Meta.Store, store); shipments.Filter.AddEquals(Shipments.Meta.ShipmentMethod, shipmentMethod); foreach (CustomerShipment shipment in shipments) { if (shipment.CurrentObjectState.Equals(new CustomerShipmentObjectStates(party.Strategy.Session).Created) || shipment.CurrentObjectState.Equals(new CustomerShipmentObjectStates(party.Strategy.Session).Picked) || shipment.CurrentObjectState.Equals(new CustomerShipmentObjectStates(party.Strategy.Session).OnHold) || shipment.CurrentObjectState.Equals(new CustomerShipmentObjectStates(party.Strategy.Session).Packed)) { return shipment; } } return null; }
private void InstantiateObjects(ISession session) { this.productCategory = (ProductCategory)session.Instantiate(this.productCategory); this.parentProductCategory = (ProductCategory)session.Instantiate(this.parentProductCategory); this.ancestorProductCategory = (ProductCategory)session.Instantiate(this.ancestorProductCategory); this.part = (FinishedGood)session.Instantiate(this.part); this.good = (Good)session.Instantiate(this.good); this.feature1 = (Colour)session.Instantiate(this.feature1); this.feature2 = (Colour)session.Instantiate(this.feature2); this.internalOrganisation = (InternalOrganisation)session.Instantiate(this.internalOrganisation); this.shipToCustomer = (Organisation)session.Instantiate(this.shipToCustomer); this.billToCustomer = (Organisation)session.Instantiate(this.billToCustomer); this.supplier = (Organisation)session.Instantiate(this.supplier); this.kiev = (City)session.Instantiate(this.kiev); this.shipToContactMechanismMechelen = (PostalAddress)session.Instantiate(this.shipToContactMechanismMechelen); this.shipToContactMechanismKiev = (PostalAddress)session.Instantiate(this.shipToContactMechanismKiev); this.currentBasePriceGeoBoundary = (BasePrice)session.Instantiate(this.currentBasePriceGeoBoundary); this.currentGoodBasePrice = (BasePrice)session.Instantiate(this.currentGoodBasePrice); this.currentGood1Feature1BasePrice = (BasePrice)session.Instantiate(this.currentGood1Feature1BasePrice); this.currentFeature2BasePrice = (BasePrice)session.Instantiate(this.currentFeature2BasePrice); this.goodPurchasePrice = (ProductPurchasePrice)session.Instantiate(this.goodPurchasePrice); this.virtualGoodPurchasePrice = (ProductPurchasePrice)session.Instantiate(this.virtualGoodPurchasePrice); this.currentGoodBasePrice = (BasePrice)session.Instantiate(this.currentGoodBasePrice); this.goodSupplierOffering = (SupplierOffering)session.Instantiate(this.goodSupplierOffering); this.virtualgoodSupplierOffering = (SupplierOffering)session.Instantiate(this.virtualgoodSupplierOffering); this.order = (SalesOrder)session.Instantiate(this.order); this.vatRate21 = (VatRate)session.Instantiate(this.vatRate21); }
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 static bool BaseIsApplicable(IsApplicable isApplicable) { var priceComponent = isApplicable.PriceComponent; var customer = isApplicable.Customer; var product = isApplicable.Product; var salesOrder = isApplicable.SalesOrder; var quantityOrdered = isApplicable.QuantityOrdered; var valueOrdered = isApplicable.ValueOrdered; var salesInvoice = isApplicable.SalesInvoice; var withGeographicBoundary = false; var geographicBoundaryValid = false; var withProductCategory = false; var productCategoryValid = false; var withPartyClassification = false; var partyClassificationValid = false; var withOrderKind = false; var orderKindValid = false; var withOrderQuantityBreak = false; var orderQuantityBreakValid = false; var withRevenueValueBreak = false; var revenueValueBreakValid = false; var withRevenueQuantityBreak = false; var revenueQuantityBreakValid = false; var withPackageQuantityBreak = false; var packageQuantityBreakValid = false; var withOrderValue = false; var orderValueValid = false; var withSalesChannel = false; var salesChannelValid = false; if (priceComponent.ExistGeographicBoundary) { withGeographicBoundary = true; PostalAddress postalAddress = null; if (salesOrder != null && salesOrder.ExistDerivedShipToAddress) { postalAddress = salesOrder.DerivedShipToAddress; } if (salesInvoice != null && salesInvoice.ExistDerivedShipToAddress) { postalAddress = salesInvoice.DerivedShipToAddress; } if (postalAddress == null && customer != null) { postalAddress = customer.ShippingAddress; } if (postalAddress != null) { foreach (GeographicBoundary geographicBoundary in postalAddress.PostalAddressBoundaries) { if (geographicBoundary.Equals(priceComponent.GeographicBoundary)) { geographicBoundaryValid = true; } } } } if (priceComponent.ExistPartyClassification && customer != null) { withPartyClassification = true; foreach (PartyClassification partyClassification in customer.PartyClassifications) { if (partyClassification.Equals(priceComponent.PartyClassification)) { partyClassificationValid = true; } } } if (priceComponent.ExistProductCategory) { withProductCategory = true; foreach (ProductCategory productCategory in product.ProductCategoriesWhereProduct) { if (productCategory.Equals(priceComponent.ProductCategory)) { productCategoryValid = true; } } if (productCategoryValid == false) { foreach (ProductCategory productCategory in product.ProductCategoriesWhereProduct) { foreach (ProductCategory ancestor in productCategory.ProductCategoriesWhereDescendant) { if (ancestor.Equals(priceComponent.ProductCategory)) { productCategoryValid = true; } } } } } if (priceComponent.ExistOrderKind) { withOrderKind = true; if (salesOrder != null && salesOrder.ExistOrderKind && salesOrder.OrderKind.Equals(priceComponent.OrderKind)) { orderKindValid = true; } } if (priceComponent.ExistSalesChannel) { withSalesChannel = true; SalesChannel channel = null; if (salesOrder != null) { channel = salesOrder.SalesChannel; } if (salesInvoice != null) { channel = salesInvoice.SalesChannel; } if (channel.Equals(priceComponent.SalesChannel)) { salesChannelValid = true; } } if (priceComponent.ExistOrderQuantityBreak) { withOrderQuantityBreak = true; if ((!priceComponent.OrderQuantityBreak.ExistFromAmount || priceComponent.OrderQuantityBreak.FromAmount <= quantityOrdered) && (!priceComponent.OrderQuantityBreak.ExistThroughAmount || priceComponent.OrderQuantityBreak.ThroughAmount >= quantityOrdered)) { orderQuantityBreakValid = true; } } if (priceComponent.ExistOrderValue) { withOrderValue = true; if ((!priceComponent.OrderValue.ExistFromAmount || priceComponent.OrderValue.FromAmount <= valueOrdered) && (!priceComponent.OrderValue.ExistThroughAmount || priceComponent.OrderValue.ThroughAmount >= valueOrdered)) { orderValueValid = true; } } if ((withGeographicBoundary && !geographicBoundaryValid) || (withPartyClassification && !partyClassificationValid) || (withProductCategory && !productCategoryValid) || (withOrderKind && !orderKindValid) || (withOrderQuantityBreak && !orderQuantityBreakValid) || (withRevenueValueBreak && !revenueValueBreakValid) || (withRevenueQuantityBreak && !revenueQuantityBreakValid) || (withPackageQuantityBreak && !packageQuantityBreakValid) || (withOrderValue && !orderValueValid) || (withSalesChannel & !salesChannelValid)) { return(false); } return(true); }
public static CustomerShipment BaseGetPendingCustomerShipmentForStore(this Party @this, PostalAddress address, Store store, ShipmentMethod shipmentMethod) { var shipments = @this.ShipmentsWhereShipToParty; if (address != null) { shipments.Filter.AddEquals(M.Shipment.ShipToAddress, address); } if (store != null) { shipments.Filter.AddEquals(M.Shipment.Store, store); } if (shipmentMethod != null) { shipments.Filter.AddEquals(M.Shipment.ShipmentMethod, shipmentMethod); } foreach (CustomerShipment shipment in shipments) { if (shipment.ShipmentState.Equals(new ShipmentStates(@this.Strategy.Session).Created) || shipment.ShipmentState.Equals(new ShipmentStates(@this.Strategy.Session).Picking) || shipment.ShipmentState.Equals(new ShipmentStates(@this.Strategy.Session).Picked) || shipment.ShipmentState.Equals(new ShipmentStates(@this.Strategy.Session).OnHold) || shipment.ShipmentState.Equals(new ShipmentStates(@this.Strategy.Session).Packed)) { return(shipment); } } return(null); }
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 static bool AppsIsEligible(IsEligibleParams isEligibleParams) { var priceComponent = isEligibleParams.PriceComponent; var customer = isEligibleParams.Customer; var product = isEligibleParams.Product; var salesOrder = isEligibleParams.SalesOrder; var quantityOrdered = isEligibleParams.QuantityOrdered; var valueOrdered = isEligibleParams.ValueOrdered; var salesInvoice = isEligibleParams.SalesInvoice; var withGeographicBoundary = false; var geographicBoundaryValid = false; var withProductCategory = false; var productCategoryValid = false; var withPartyClassification = false; var partyClassificationValid = false; var withOrderKind = false; var orderKindValid = false; var withOrderQuantityBreak = false; var orderQuantityBreakValid = false; var withRevenueValueBreak = false; var revenueValueBreakValid = false; var withRevenueQuantityBreak = false; var revenueQuantityBreakValid = false; var withPackageQuantityBreak = false; var packageQuantityBreakValid = false; var withOrderValue = false; var orderValueValid = false; var withSalesChannel = false; var salesChannelValid = false; if (priceComponent.ExistGeographicBoundary) { withGeographicBoundary = true; PostalAddress postalAddress = null; if (salesOrder != null && salesOrder.ExistShipToAddress) { postalAddress = salesOrder.ShipToAddress; } if (salesInvoice != null && salesInvoice.ExistShipToAddress) { postalAddress = salesInvoice.ShipToAddress; } if (postalAddress == null && customer != null) { postalAddress = customer.ShippingAddress; } if (postalAddress != null) { foreach (GeographicBoundary geographicBoundary in postalAddress.GeographicBoundaries) { if (geographicBoundary.Equals(priceComponent.GeographicBoundary)) { geographicBoundaryValid = true; } } } } if (priceComponent.ExistPartyClassification && customer != null) { withPartyClassification = true; foreach (PartyClassification partyClassification in customer.PartyClassifications) { if (partyClassification.Equals(priceComponent.PartyClassification)) { partyClassificationValid = true; } } } if (priceComponent.ExistProductCategory) { withProductCategory = true; foreach (ProductCategory productCategory in product.ProductCategoriesWhereProduct) { if (productCategory.Equals(priceComponent.ProductCategory)) { productCategoryValid = true; } } if (productCategoryValid == false) { foreach (ProductCategory productCategory in product.ProductCategoriesWhereProduct) { foreach (ProductCategory ancestor in productCategory.SuperJacent) { if (ancestor.Equals(priceComponent.ProductCategory)) { productCategoryValid = true; } } } } } if (priceComponent.ExistOrderKind) { withOrderKind = true; if (salesOrder != null && salesOrder.ExistOrderKind && salesOrder.OrderKind.Equals(priceComponent.OrderKind)) { orderKindValid = true; } } if (priceComponent.ExistOrderQuantityBreak) { withOrderQuantityBreak = true; if ((!priceComponent.OrderQuantityBreak.ExistFromAmount || priceComponent.OrderQuantityBreak.FromAmount <= quantityOrdered) && (!priceComponent.OrderQuantityBreak.ExistThroughAmount || priceComponent.OrderQuantityBreak.ThroughAmount >= quantityOrdered)) { orderQuantityBreakValid = true; } } if (priceComponent.ExistOrderValue) { withOrderValue = true; if ((!priceComponent.OrderValue.ExistFromAmount || priceComponent.OrderValue.FromAmount <= valueOrdered) && (!priceComponent.OrderValue.ExistThroughAmount || priceComponent.OrderValue.ThroughAmount >= valueOrdered)) { orderValueValid = true; } } if (priceComponent.ExistSalesChannel) { withSalesChannel = true; SalesChannel channel = null; if (salesOrder != null) { channel = salesOrder.SalesChannel; } if (salesInvoice != null) { channel = salesInvoice.SalesChannel; } if (channel.Equals(priceComponent.SalesChannel)) { salesChannelValid = true; } } // TODO: Revenue Value Break //if (priceComponent.ExistRevenueValueBreak) //{ // withRevenueValueBreak = true; // var revenueValueBreak = priceComponent.RevenueValueBreak; // var revenue = 0M; // if (priceComponent.ExistProductCategory && partyProductCategoryRevenueHistoryByProductCategory != null) // { // if (partyProductCategoryRevenueHistoryByProductCategory.ContainsKey(priceComponent.ProductCategory)) // { // revenue = partyProductCategoryRevenueHistoryByProductCategory[priceComponent.ProductCategory].Revenue; // } // } // else // { // if (partyRevenueHistory != null) // { // revenue = partyRevenueHistory.Revenue; // } // } // if ((!revenueValueBreak.ExistFromAmount || revenueValueBreak.FromAmount <= revenue) && // (!revenueValueBreak.ExistThroughAmount || revenueValueBreak.ThroughAmount >= revenue)) // { // revenueValueBreakValid = true; // } //} // TODO: Revenue Quantity Break //if (priceComponent.ExistRevenueQuantityBreak) //{ // withRevenueQuantityBreak = true; // var revenueQuantityBreak = priceComponent.RevenueQuantityBreak; // var quantity = 0M; // if (priceComponent.ExistProductCategory && partyProductCategoryRevenueHistoryByProductCategory != null) // { // if (partyProductCategoryRevenueHistoryByProductCategory.ContainsKey(priceComponent.ProductCategory)) // { // quantity = partyProductCategoryRevenueHistoryByProductCategory[priceComponent.ProductCategory].Quantity; // } // } // if ((!revenueQuantityBreak.ExistFrom || revenueQuantityBreak.From <= quantity) && // (!revenueQuantityBreak.ExistThrough || revenueQuantityBreak.Through >= quantity)) // { // revenueQuantityBreakValid = true; // } //} // TODO: Package Quantity Break //if (priceComponent.ExistPackageQuantityBreak) //{ // withPackageQuantityBreak = true; // var packageQuantityBreak = priceComponent.PackageQuantityBreak; // var quantity = 0; // if (partyPackageRevenueHistoryList != null) // { // foreach (var partyPackageRevenueHistory in partyPackageRevenueHistoryList) // { // if (partyPackageRevenueHistory.Revenue > 0) // { // quantity++; // } // } // } // if ((!packageQuantityBreak.ExistFrom || packageQuantityBreak.From <= quantity) && // (!packageQuantityBreak.ExistThrough || packageQuantityBreak.Through >= quantity)) // { // packageQuantityBreakValid = true; // } //} if ((withGeographicBoundary && !geographicBoundaryValid) || (withPartyClassification && !partyClassificationValid) || (withProductCategory && !productCategoryValid) || (withOrderKind && !orderKindValid) || (withOrderQuantityBreak && !orderQuantityBreakValid) || (withRevenueValueBreak && !revenueValueBreakValid) || (withRevenueQuantityBreak && !revenueQuantityBreakValid) || (withPackageQuantityBreak && !packageQuantityBreakValid) || (withOrderValue && !orderValueValid) || (withSalesChannel & !salesChannelValid)) { return(false); } return(true); }