protected override ShoppingCartRuleResult PerformRules(MyHLShoppingCart cart,
                                                               ShoppingCartRuleReason reason,
                                                               ShoppingCartRuleResult Result)
        {
            Result.Result = RulesResult.Success;

            if (null == cart)
            {
                LoggerHelper.Error(
                    string.Format("{0} cart is null {1}, MyHerbalife3.Ordering.Rules.PurchaseRestriction.JP.PurchaseRestrictionRules.", Locale, cart.DistributorID));
                Result.Result = RulesResult.Failure;
                return(Result);
            }
            if (Settings.GetRequiredAppSetting <bool>("EnableJPSKURestriction", false))
            {
                string orderMonth = SKULimitationProvider.GetOrderMonthString();
                if (reason == ShoppingCartRuleReason.CartItemsBeingAdded && cart.ItemsBeingAdded != null && cart.ItemsBeingAdded.Count > 0)
                {
                    var allLimits = SKULimitationProvider.SKUPurchaseRestrictionInfo(cart.DistributorID, orderMonth);
                    if (allLimits != null)
                    {
                        Result = HandleCartItemsBeingAdded(cart, Result, allLimits);
                        if (Result.Result == RulesResult.Failure)
                        {
                            return(Result);
                        }
                    }
                }
                else if (reason == ShoppingCartRuleReason.CartBeingPaid)
                {
                    var allLimits = SKULimitationProvider.SKUPurchaseRestrictionInfo(cart.DistributorID, orderMonth);
                    if (allLimits != null)
                    {
                        Result = HandleCartBeingPaid(cart, Result, allLimits);
                        if (Result.Result == RulesResult.Failure)
                        {
                            return(Result);
                        }
                    }
                }
                else if (reason == ShoppingCartRuleReason.CartClosed) // order placed
                {
                    var allLimits = SKULimitationProvider.SKUPurchaseRestrictionInfo(cart.DistributorID, cart.OrderMonth.ToString());
                    if (allLimits != null)
                    {
                        Result = HandleCartClosed(cart, Result, allLimits);
                        SKULimitationProvider.SetSKUPurchaseRestrictionInfo(cart.DistributorID, cart.OrderMonth.ToString(), allLimits);
                    }
                }
            }
            base.PerformRules(cart, reason, Result);
            return(Result);
        }
        private ShoppingCartRuleResult checkSKULimitForCountry(MyHLShoppingCart myCart, ShoppingCartRuleResult Result)
        {
            Dictionary <string, List <SKULimitationInfo> > limits = SKULimitationProvider.GetSKULimitationInfo();

            if (limits != null)
            {
                if (limits.ContainsKey(Country))
                {
                    List <SKULimitationInfo> limitInfo = limits[Country];
                    foreach (var l in limitInfo)
                    {
                        if (limitInfo != null && limitInfo.Count > 0 && shouldApplyRules(l.StartDate, l.EndDate, l.LimitPeriodByDay))
                        {
                            if (myCart.CurrentItems == null)
                            {
                                return(Result);
                            }

                            string sku = myCart.CurrentItems[0].SKU.Trim();
                            if (l.SKU.Trim().Equals(sku))
                            {
                                _skuQuantityLimitPeriodByDay = l.LimitPeriodByDay;
                                _startDate = RecentOrdersHelper.ConvertDate(l.StartDate);
                                bool bSKUQtyOverLimit = false;

                                int SKUQtyBeingAdded = myCart.CurrentItems[0].Quantity;
                                if (SKUQtyBeingAdded > l.MaxQuantity)
                                {
                                    bSKUQtyOverLimit = true;
                                }

                                int qtyInCart = 0;
                                if (bSKUQtyOverLimit == false)
                                {
                                    if (myCart.CartItems != null && myCart.CartItems.Where(x => x.SKU == sku).Any()) // already in cart
                                    {
                                        qtyInCart = myCart.CartItems.Where(x => x.SKU == sku).Sum(x => x.Quantity);
                                        if ((qtyInCart + SKUQtyBeingAdded) > l.MaxQuantity)
                                        {
                                            bSKUQtyOverLimit = true;
                                        }
                                    }
                                }
                                if (bSKUQtyOverLimit == false)
                                {
                                    int numSkusOrders         = qtyInCart + SKUQtyBeingAdded; // what's in cart plus what's being added
                                    RecentOrdersHelper orders = getInternetOrders(myCart.DistributorID, this.Locale, DateUtils.GetCurrentLocalTime(this.Country));
                                    if (orders != null)
                                    {
                                        foreach (var o in orders.Orders)
                                        {
                                            foreach (var i in o.CartItems)
                                            {
                                                if (i.SKU == sku)
                                                {
                                                    numSkusOrders += i.Quantity;
                                                    //break;
                                                }
                                            }
                                        }
                                    }

                                    if (numSkusOrders > l.MaxQuantity)
                                    {
                                        bSKUQtyOverLimit = true;
                                    }
                                    //else
                                    //{
                                    //    if (myCart.CurrentItems[0].Quantity + numSkusOrders > l.MaxQuantity)
                                    //    {
                                    //        bSKUQtyOverLimit = true;
                                    //    }
                                    //}
                                }

                                if (bSKUQtyOverLimit == true)
                                {
                                    /// Your order of {0} exceeds the maximum quantity of {1} per member every {2} calendar days.
                                    Result.AddMessage(
                                        string.Format(
                                            HttpContext.GetGlobalResourceObject(
                                                string.Format("{0}_Rules", HLConfigManager.Platform),
                                                "SKULimitExceedByDay").ToString(),
                                            myCart.CurrentItems[0].SKU, l.MaxQuantity, l.LimitPeriodByDay));

                                    myCart.RuleResults.Add(Result);
                                    Result.Result = RulesResult.Failure;
                                }
                            }
                        }
                    }
                }
            }
            return(Result);
        }