void LoadSkuPurchasedCount(CartItemWithDetailList eventProductList, string distributorId) { List <MyHerbalife3.Ordering.ServiceProvider.OrderChinaSvc.SkuOrderedAndPurchased> skuList = new List <MyHerbalife3.Ordering.ServiceProvider.OrderChinaSvc.SkuOrderedAndPurchased>(); foreach (var x in eventProductList) { var sku = new MyHerbalife3.Ordering.ServiceProvider.OrderChinaSvc.SkuOrderedAndPurchased { SKU = x.ProductId, Category = "ETO", }; skuList.Add(sku); } var rslt = MyHerbalife3.Ordering.Providers.China.OrderProvider.GetSkuOrderedAndPurchased(this.Country, distributorId, null, null, skuList); foreach (var r in rslt) { var mList = eventProductList.Where(x => x.ProductId == r.SKU); foreach (var m in mList) { m.QuantityAlreadyPurchased = r.QuantityPurchased; } } }
bool ValidateIsInEventMode(CartItemWithDetailList eventProductList, ShoppingCart_V02 cart, ShoppingCartRuleResult result) { if (isCheckEventTicket(cart)) { return(true); } // not in event mode, build-up error info var itemToAddList = eventProductList.CurrentItemList; result.Result = RulesResult.Failure; var itemList = new StringBuilder(); foreach (var item in itemToAddList) { if (itemList.Length > 0) { itemList.Append(", "); } itemList.Append(item.SKU.Product.DisplayName); } var msg = GetRulesResourceString("CanOnlyPurchaseInEventMode"); result.Messages.Add(string.Format(msg, itemList)); LoggingTrace(string.Format("CanOnlyPurchaseInEventMode")); return(false); }
CartItemWithDetailList GetEventProductList(ShoppingCart_V02 cart) { var ret = new CartItemWithDetailList(); if (Helper.Instance.HasData(cart.CurrentItems)) { foreach (var cartItem in cart.CurrentItems) { if (!IsEventProduct(cartItem.SKU)) { continue; } SKU_V01 sku_v01 = null; SkuList.TryGetValue(cartItem.SKU, out sku_v01); if (sku_v01 == null) { continue; } var child = new CartItemWithDetail { CurrentItem = cartItem, SKU = sku_v01 }; ret.Add(child); } } if (Helper.Instance.HasData(cart.CartItems)) { foreach (var cartItem in cart.CartItems) { if (!IsEventProduct(cartItem.SKU)) { continue; } var child = ret.FirstOrDefault(x => x.SkuCode == cartItem.SKU); if (child != null) { child.CartItem = cartItem; } else { child = new CartItemWithDetail { CartItem = cartItem, SKU = SkuList[cartItem.SKU], }; ret.Add(child); } } } return(ret); }
/// <summary> /// Returns true if ordered quantity is within limit. /// </summary> /// <param name="eventProductList"></param> /// <param name="cart"></param> /// <param name="result"></param> /// <returns></returns> bool ValidateMaxQtyDependsOnSpouseName(CartItemWithDetailList eventProductList, ShoppingCart_V02 cart, ShoppingCartRuleResult result) { bool ret = true; LoadSkuPurchasedCount(eventProductList, cart.DistributorID); foreach (var item in eventProductList) { if (item.TotalQty <= MaxQtyIfNoSpouseName) { continue; } RulesResult rslt = RulesResult.Unknown; string msg = null; int limit = 0; var user = DistributorOrderingProfileProvider.GetProfile(cart.DistributorID, this.Country); if (string.IsNullOrWhiteSpace(user.SpouseLocalName)) { #region no spouse name limit = MaxQtyIfNoSpouseName; if (item.TotalQty > limit) { DeductEventProductQty(item, limit, cart); rslt = (item.CurrentItem.Quantity <= 0) ? RulesResult.Failure : RulesResult.Feedback; msg = GetRulesResourceString("EventProductLimitedToNAsNoSpouseName"); msg = string.Format(msg, item.SKU.Product.DisplayName, limit); } #endregion } else { #region has spouse name limit = MaxQtyIfHasSpouseName; if (item.TotalQty > limit) { DeductEventProductQty(item, limit, cart); rslt = (item.CurrentItem.Quantity <= 0) ? RulesResult.Failure : RulesResult.Feedback; msg = GetRulesResourceString("EventProductLimitedToNAsHasSpouseName"); msg = string.Format(msg, item.SKU.Product.DisplayName, limit); } #endregion } if (rslt != RulesResult.Unknown) { ret = false; result.Result = rslt; if (item.QuantityAlreadyPurchased >= limit) { msg = GetRulesResourceString("EventProductAlreadyBeenPurchased"); msg = string.Format(msg, item.SKU.Product.DisplayName); } result.Messages.Add(msg); } LoggingTrace(string.Format("ValidateMaxQtyDependsOnSpouseName: {0}, {1}", rslt, msg)); } return(ret); }