public bool Evaluate(IRuleExecutionContext context) { var commerceContext = context.Fact <CommerceContext>(); //Get configuration string specificCategory = Ny_SpecificCategory.Yield(context); decimal specificValue = Ny_SpecificValue.Yield(context); bool includeSubCategories = Ny_IncludeSubCategories.Yield(context); if (string.IsNullOrEmpty(specificCategory) || specificValue == 0 || Ny_Compares == null) { return(false); } //Get data IEnumerable <CartLineComponent> categoryLines = categoryCartLinesResolver.Resolve(commerceContext, specificCategory, includeSubCategories); if (categoryLines == null) { return(false); } //Validate data against configuration decimal categoryTotal = categoryLines.Sum(line => line.Totals.GrandTotal.Amount); return(Ny_Compares.Evaluate(categoryTotal, specificValue)); }
public bool Evaluate(IRuleExecutionContext context) { //Get configuration string specificCategory = Ny_SpecificCategory.Yield(context); decimal specificValue = Ny_SpecificValue.Yield(context); bool includeSubCategories = Ny_IncludeSubCategories.Yield(context); if (string.IsNullOrEmpty(specificCategory) || specificValue == 0 || Ny_Compares == null) { return(false); } //Get Data var commerceContext = context.Fact <CommerceContext>(); List <CartLineComponent> categoryLines = AsyncHelper.RunSync(() => categoryOrderLinesResolver.Resolve(commerceContext, specificCategory, includeSubCategories)); if (categoryLines == null) { return(false); } //Validate data against configuration decimal productAmount = categoryLines.Sum(x => x.Quantity); return(Ny_Compares.Evaluate(productAmount, specificValue)); }
public void Execute(IRuleExecutionContext context) { var commerceContext = context.Fact <CommerceContext>(); //Get configuration string specificCategory = Ny_SpecificCategory.Yield(context); decimal itemsToAward = Ny_ItemsToAward.Yield(context); decimal itemsToPurchase = Ny_ItemsToPurchase.Yield(context); bool includeSubCategories = Ny_IncludeSubCategories.Yield(context); decimal percentageOff = Ny_PercentageOff.Yield(context); string applyActionTo = Ny_ApplyActionTo.Yield(context); int actionLimit = Ny_ActionLimit.Yield(context); if (string.IsNullOrEmpty(specificCategory) || itemsToAward == 0 || itemsToPurchase == 0 || percentageOff == 0 || string.IsNullOrEmpty(applyActionTo) || actionLimit == 0) { return; } //Get data IEnumerable <CartLineComponent> categoryLines = categoryCartLinesResolver.Resolve(commerceContext, specificCategory, includeSubCategories); if (categoryLines == null) { return; } //Validate and apply action int cartQuantity = Convert.ToInt32(categoryLines.Sum(x => x.Quantity)); decimal cartProductsToAward = Math.Floor(cartQuantity / itemsToPurchase) * itemsToAward; decimal productsToAward = cartProductsToAward > actionLimit ? actionLimit : cartProductsToAward; if (productsToAward <= 0) { return; } var discountApplicator = new DiscountApplicator(commerceContext); discountApplicator.ApplyPercentageDiscount(categoryLines, percentageOff, new DiscountOptions { ActionLimit = Convert.ToInt32(productsToAward), ApplicationOrder = ApplicationOrder.Parse(applyActionTo), AwardingBlock = nameof(CartEveryXItemsInCategoryPercentageDiscountAction) }); }
public void Execute(IRuleExecutionContext context) { var commerceContext = context.Fact <CommerceContext>(); //Get configuration string specificCategory = Ny_SpecificCategory.Yield(context); decimal specificValue = Ny_SpecificValue.Yield(context); bool includeSubCategories = Ny_IncludeSubCategories.Yield(context); decimal percentageOff = Ny_PercentageOff.Yield(context); string applyActionTo = Ny_ApplyActionTo.Yield(context); int actionLimit = Ny_ActionLimit.Yield(context); if (string.IsNullOrEmpty(specificCategory) || specificValue == 0 || percentageOff == 0 || string.IsNullOrEmpty(applyActionTo) || actionLimit == 0 || Ny_Operator == null) { return; } //Get data IEnumerable <CartLineComponent> categoryLines = categoryCartLinesResolver.Resolve(commerceContext, specificCategory, includeSubCategories); if (categoryLines == null) { return; } //Validate and apply action decimal productAmount = categoryLines.Sum(x => x.Quantity); if (!Ny_Operator.Evaluate(productAmount, specificValue)) { return; } var discountApplicator = new DiscountApplicator(commerceContext); discountApplicator.ApplyPercentageDiscount(categoryLines, percentageOff, new DiscountOptions { ActionLimit = actionLimit, ApplicationOrder = ApplicationOrder.Parse(applyActionTo), AwardingBlock = nameof(CartItemsMatchingInCategoryPercentageDiscountAction) }); }