public void ExceedGroupLimitAndIndivualLimit_TestMethod()
        {
            var cartItems = new ShoppingCartItemList();

            cartItems.Add(new ShoppingCartItem_V01 {
                SKU = "0120", Quantity = 9
            });

            var cartItemsBeingAdded = new ShoppingCartItemList();

            cartItemsBeingAdded.Add(new ShoppingCartItem_V01 {
                SKU = "0120", Quantity = 1
            });                                                                               // FO
            cartItemsBeingAdded.Add(new ShoppingCartItem_V01 {
                SKU = "0118", Quantity = 91
            });                                                                                // FO
            cartItemsBeingAdded.Add(new ShoppingCartItem_V01 {
                SKU = "1158", Quantity = 11
            });                                                                                // NFO

            MyHLShoppingCart cart =
                MyHLShoppingCartGenerator.GetBasicShoppingCart("staff", "ja-JP", "30", "SAG",
                                                               cartItems, OrderCategoryType.RSO);

            cart.ItemsBeingAdded = cartItemsBeingAdded;

            MyHerbalife3.Ordering.Rules.PurchaseRestriction.JP.PurchaseRestrictionRules rules = new MyHerbalife3.Ordering.Rules.PurchaseRestriction.JP.PurchaseRestrictionRules();
            rules.HandleCartItemsBeingAdded(cart, new ShoppingCartRuleResult(), MockPurchaseRestrictionInfo());
        }
        public void SKU0106_OverLimit_TestMethod1()
        {
            var cartItems = new ShoppingCartItemList();

            cartItems.Add(new ShoppingCartItem_V01 {
                SKU = "0120", Quantity = 1
            });
            cartItems.Add(new ShoppingCartItem_V01 {
                SKU = "0106", Quantity = 6
            });                                                                     //NFO

            var cartItemsBeingAdded = new ShoppingCartItemList();

            cartItemsBeingAdded.Add(new ShoppingCartItem_V01 {
                SKU = "0106", Quantity = 4
            });

            MyHLShoppingCart cart =
                MyHLShoppingCartGenerator.GetBasicShoppingCart("staff", "ja-JP", "XX", "XX",
                                                               cartItems, OrderCategoryType.RSO);

            cart.ItemsBeingAdded = cartItemsBeingAdded;

            MyHerbalife3.Ordering.Rules.PurchaseRestriction.JP.PurchaseRestrictionRules rules = new MyHerbalife3.Ordering.Rules.PurchaseRestriction.JP.PurchaseRestrictionRules();
            rules.HandleCartItemsBeingAdded(cart, new ShoppingCartRuleResult(), MockPurchaseRestrictionInfo());
        }
Ejemplo n.º 3
0
        public void addItem(Product product, int quantity)
        {
            ShoppingCartItem cartItem = new ShoppingCartItem();

            cartItem.setProduct(product);
            cartItem.setQuantity(quantity);

            ShoppingCartItemList.Add(cartItem);

            TotalAmount += product.getPrice() * quantity;
        }
Ejemplo n.º 4
0
        private ShoppingCartRuleResult PerformRules(ShoppingCart_V02 cart,
                                                    ShoppingCartRuleReason reason,
                                                    ShoppingCartRuleResult Result)
        {
            if (cart == null)
            {
                return(Result);
            }

            if (reason == ShoppingCartRuleReason.CartItemsBeingAdded)
            {
                string sku     = cart.CurrentItems[0].SKU.Trim();
                var    allowed = new List <string>();
                if (_IBPAllowedSubTypes.TryGetValue(sku, out allowed))
                {
                    string orderSubType = cart.OrderSubType;
                    if (string.IsNullOrEmpty(cart.OrderSubType))
                    {
                        var purchasingLimits =
                            PurchasingLimitProvider.GetCurrentPurchasingLimits(cart.DistributorID);
                        if (null != purchasingLimits)
                        {
                            orderSubType = purchasingLimits.PurchaseSubType;
                        }
                    }
                    if (!allowed.Contains(orderSubType))
                    {
                        Result.Result = RulesResult.Failure;
                        var errorMessage =
                            HttpContext.GetGlobalResourceObject(string.Format("{0}_Rules", HLConfigManager.Platform),
                                                                "SKU" + sku + "Limitations") ??
                            string.Format("SKU {0} Limitations", sku);

                        Result.AddMessage(string.Format(errorMessage.ToString(), cart.CurrentItems[0].SKU));
                        cart.RuleResults.Add(Result);
                    }
                }

                if (cart.CurrentItems[0].SKU == HLConfigManager.Configurations.DOConfiguration.TodayMagazineSku)
                {
                    var catItems =
                        CatalogProvider.GetCatalogItems(
                            (from c in cart.CartItems select c.SKU.Trim()).ToList <string>(), Country);
                    if (catItems != null)
                    {
                        if (!catItems.Any(c => c.Value.ProductType == ProductType.Product))
                        {
                            Result.Result = RulesResult.Failure;
                            Result.AddMessage(
                                string.Format(
                                    HttpContext.GetGlobalResourceObject(
                                        string.Format("{0}_Rules", HLConfigManager.Platform), "AddProductFirst")
                                    .ToString(), cart.CurrentItems[0].SKU));
                            cart.RuleResults.Add(Result);
                        }
                    }
                }
            }
            else if (reason == ShoppingCartRuleReason.CartItemsAdded)
            {
                var tempShoppingCartList = new ShoppingCartItemList();
                tempShoppingCartList.AddRange(from c in cart.CartItems
                                              select new ShoppingCartItem_V01(c.ID, c.SKU, c.Quantity, c.Updated));
                var item = tempShoppingCartList.Where(i => i.SKU == cart.CurrentItems[0].SKU);
                if (null != item && item.Count() > 0)
                {
                    var itemFirst = item.First();
                    itemFirst.Quantity += cart.CurrentItems[0].Quantity;
                }
                else
                {
                    tempShoppingCartList.Add(cart.CurrentItems[0]);
                }
            }
            else if (reason == ShoppingCartRuleReason.CartCalculated)
            {
                string orderSubType = cart.OrderSubType;
                if (string.IsNullOrEmpty(cart.OrderSubType))
                {
                    var purchasingLimits =
                        PurchasingLimitProvider.GetCurrentPurchasingLimits(cart.DistributorID);
                    if (null != purchasingLimits)
                    {
                        orderSubType = purchasingLimits.PurchaseSubType;
                    }
                }

                var myhlCart = cart as MyHLShoppingCart;
                if (myhlCart != null)
                {
                    var found =
                        (from a in _IBPAllowedSubTypes.Keys.ToList()
                         from s in myhlCart.ShoppingCartItems
                         where a == s.SKU
                         select a);
                    if (found.Count() > 0)
                    {
                        var skuToDelete = new List <string>();
                        foreach (string sku in found)
                        {
                            var allowed = new List <string>();
                            if (_IBPAllowedSubTypes.TryGetValue(sku, out allowed))
                            {
                                if (!allowed.Contains(orderSubType))
                                {
                                    skuToDelete.Add(sku);
                                }
                            }
                        }
                        if (skuToDelete.Count() > 0)
                        {
                            myhlCart.DeleteItemsFromCart(skuToDelete);
                            foreach (string sku in skuToDelete)
                            {
                                Result.Result = RulesResult.Failure;
                                Result.AddMessage(
                                    string.Format(
                                        HttpContext.GetGlobalResourceObject(
                                            string.Format("{0}_Rules", HLConfigManager.Platform),
                                            "SKU" + sku + "Limitations").ToString(), sku));
                                cart.RuleResults.Add(Result);
                            }
                        }
                    }
                }
            }

            return(Result);
        }
        public ShoppingCartRuleResult HandleCartItemsBeingAdded(MyHLShoppingCart cart, ShoppingCartRuleResult Result, List <PurchaseRestrictionInfo> allLimits)
        {
            var error1 = defaultError1();
            var error2 = defaultError2();

            Func <ShoppingCartItemList, ShoppingCartItem_V01, int> sumQuantity =
                delegate(ShoppingCartItemList itemsInCart, ShoppingCartItem_V01 itemToAdd)
            {
                return(itemsInCart.Find(i => i.SKU.Equals(itemToAdd.SKU)) == null ? itemToAdd.Quantity : itemsInCart.Find(i => i.SKU.Equals(itemToAdd.SKU)).Quantity + itemToAdd.Quantity);
            };

            // sum quantity in cart and quantity to add for every sku being added
            ShoppingCartItemList newItemsToAdd = new ShoppingCartItemList();

            Array.ForEach(cart.ItemsBeingAdded.ToArray(), a => newItemsToAdd.Add(new ShoppingCartItem_V01 {
                SKU = a.SKU, Quantity = sumQuantity(cart.CartItems, a)
            }));

            List <string> errorList     = new List <string>();
            List <string> itemsToRemove = new List <string>();
            // non formula one
            var nonFormulaOneLimits = allLimits.Where(f => !f.Group.Equals(groupFormulaOne));

            if (nonFormulaOneLimits != null && nonFormulaOneLimits.Count() > 0)
            {
                var itemsCannotAdd = (from a in nonFormulaOneLimits.First().SKUInfoList
                                      from b in newItemsToAdd
                                      where a.SKU == b.SKU && b.Quantity > a.QuantityAllow
                                      select new { SKU = b, Qty = a.QuantityAllow }
                                      );
                // set error message
                errorList.AddRange(from c in itemsCannotAdd
                                   select string.Format(error1.ToString(), c.SKU.SKU, 100, c.Qty));
                // remove items can't be added
                itemsToRemove.AddRange(from c in itemsCannotAdd
                                       select c.SKU.SKU);
                newItemsToAdd.RemoveAll(s => itemsCannotAdd.Select(a => a.SKU.SKU).Contains(s.SKU));
            }

            if (newItemsToAdd.Count() > 0)
            {
                // formula one
                var formulaOneLimits = allLimits.Where(l => l.Group.Equals(groupFormulaOne));
                if (formulaOneLimits != null && formulaOneLimits.Count() > 0)
                {
                    var formulaOneSKUs = formulaOneLimits.First().SKUInfoList;

                    var formulaOneToAdd = (from a in formulaOneSKUs
                                           from b in newItemsToAdd
                                           where a.SKU == b.SKU
                                           select new { SKU = b, Qty = a.QuantityAllow }
                                           );
                    var qtyFormulaOneInCartNotBeingAdded =
                        (from a in cart.CartItems
                         from b in formulaOneSKUs
                         where a.SKU == b.SKU
                         select a).Except
                            (from c in formulaOneToAdd
                            from d in cart.CartItems
                            where c.SKU.SKU == d.SKU
                            select d).ToList().Sum(x => x.Quantity);

                    int formulaOneSKUsAllowQty = formulaOneSKUs.Count() > 0 ? formulaOneSKUs.First().QuantityAllow : 0;
                    // exceed formula-1 group limit
                    if (formulaOneToAdd.Sum(f => f.SKU.Quantity) + qtyFormulaOneInCartNotBeingAdded > formulaOneSKUs.First().QuantityAllow)
                    {
                        errorList.Add(
                            string.Format(
                                error2.ToString(),
                                string.Join("と", formulaOneToAdd.Select(x => x.SKU.SKU)),
                                200,
                                formulaOneSKUs.First().QuantityAllow)
                            );
                        itemsToRemove.AddRange(from c in formulaOneToAdd
                                               select c.SKU.SKU);
                    }
                }
            }
            errorList = errorList.Distinct().ToList();
            if (errorList.Count > 0)
            {
                Result.Result   = RulesResult.Failure;
                Result.RuleName = "PurchaseRestriction Rules";
                Array.ForEach(errorList.ToArray(), a => Result.AddMessage(a));
                cart.RuleResults.Add(Result);
                cart.ItemsBeingAdded.RemoveAll(s => itemsToRemove.Select(a => a).Contains(s.SKU));
            }
            return(Result);
        }