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()); }
public void addItem(Product product, int quantity) { ShoppingCartItem cartItem = new ShoppingCartItem(); cartItem.setProduct(product); cartItem.setQuantity(quantity); ShoppingCartItemList.Add(cartItem); TotalAmount += product.getPrice() * quantity; }
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); }