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));
        }
Example #3
0
        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)
            });
        }
Example #4
0
        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)
            });
        }