Custom promotion engine
Hypothesis: Promotion engine will run promotions only for the defined market even if editors are creating promotions for other markets also.
using System;
using System.Collections.Generic;
using System.Linq;
using EPiServer.Commerce.Marketing;
using EPiServer.Commerce.Marketing.Internal;
using EPiServer.Commerce.Order;
using EPiServer.Core;
namespace EPiServer.Reference.Commerce.Site.Features.Discounts.BrandBased
{
public class CustomPromotionEngine : PromotionEngine
{
private readonly PromotionEngineContentLoader promotionEngineContentLoader;
private readonly Lazy<ContentReference> campaignFolderRootLink;
private readonly IRedemptionLimitService redemptionLimitService;
private readonly PromotionFilters promotionFilters;
private readonly PromotionApplicator promotionApplicator;
private readonly ILineItemCalculator lineItemCalculator;
private readonly IShippingCalculator shippingCalculator;
private readonly IOrderFormCalculator orderFormCalculator;
private readonly IContentLoader contentLoader;
public CustomPromotionEngine(PromotionEngineContentLoader promotionEngineContentLoader, IRedemptionLimitService redemptionLimitService, PromotionFilters promotionFilters, PromotionApplicator promotionExecutor, ILineItemCalculator lineItemCalculator, IShippingCalculator shippingCalculator, IOrderFormCalculator orderFormCalculator, IContentLoader contentLoader) :
base(promotionEngineContentLoader, redemptionLimitService, promotionFilters, promotionExecutor, lineItemCalculator, shippingCalculator, orderFormCalculator)
{
this.promotionEngineContentLoader = promotionEngineContentLoader;
this.campaignFolderRootLink = new Lazy<ContentReference>(new Func<ContentReference>(this.GetCampaignFolderRoot));
this.redemptionLimitService = redemptionLimitService;
this.promotionFilters = promotionFilters;
this.promotionApplicator = promotionExecutor;
this.lineItemCalculator = lineItemCalculator;
this.shippingCalculator = shippingCalculator;
this.orderFormCalculator = orderFormCalculator;
this.contentLoader = contentLoader;
}
public override IEnumerable<RewardDescription> Run(IOrderGroup orderGroup, PromotionEngineSettings settings)
{
if (orderGroup.Market.MarketName == "United Kingdom")
{
return base.Run(orderGroup, settings);
}
else
{
return Enumerable.Empty<RewardDescription>();
}
}
}
}
Add registry for your custom promotion engine
c.For<IPromotionEngine>().Use<CustomPromotionEngine>();
Code was tested in quick silver
Comments