예제 #1
0
        private void ReadFromData()
        {
            DistributorOrderingProfile distributorOrderingProfile =
                DistributorOrderingProfileProvider.GetProfile(DistributorID, CountryCode);

            _distributorId = DistributorID;
            _apfDueDate    = distributorOrderingProfile.ApfDueDate;
            if (_testing)
            {
                APFDueProvider.UpdateAPFDuePaid(_distributorId, _apfDueDate);
            }
            _apfSku                   = APFDueProvider.GetAPFSku();
            _cart                     = (Page as ProductsBase).ShoppingCart;
            _apfIsDue                 = APFDueProvider.IsAPFDueAndNotPaid(_distributorId, HLConfigManager.Configurations.Locale);
            _apfDueWithinOneYear      = APFDueProvider.IsAPFDueWithinOneYear(_distributorId, CountryCode);
            _apfDueGreaterThanOneYear = APFDueProvider.IsAPFDueGreaterThanOneYear(_distributorId, CountryCode);
            if (_apfIsDue)
            {
                _apfsDue = APFDueProvider.APFQuantityDue(_distributorId, HLConfigManager.Configurations.Locale);
            }
            List <ShoppingCartItem_V01> item = (from c in _cart.CartItems where c.SKU == _apfSku select c).ToList();

            _apfsInCart = 0;
            if (item.Count > 0)
            {
                _apfsInCart = item[0].Quantity;
            }
        }
        private void DisplayData()
        {
            if (HLConfigManager.Configurations.DOConfiguration.IsChina)
            {
                List <Tuple <string, bool> > cartItems = new List <Tuple <string, bool> >();
                foreach (var i in ShoppingCart.ShoppingCartItems)
                {
                    cartItems.Add(new Tuple <string, bool>(i.SKU, i.IsPromo));
                }

                if (ShoppingCart.ItemsBeingAdded != null)
                {
                    foreach (var i2 in ShoppingCart.ItemsBeingAdded)
                    {
                        if (!cartItems.Contains(new Tuple <string, bool>(i2.SKU, i2.IsPromo)))
                        {
                            cartItems.Add(new Tuple <string, bool>(i2.SKU, i2.IsPromo));
                        }
                    }
                }

                //var apfsku  = this.ShoppingCart.ShoppingCartItems.Find(s => s.SKU ==APFDueProvider.GetAPFSku());
                if (cartItems != null)
                {
                    if (cartItems.Count == 1)
                    {
                        if (cartItems[0].Item1 == APFDueProvider.GetAPFSku())
                        {
                            OvalSaveCartLink.Visible  = false;
                            imgSavedCartsHelp.Visible = false;
                        }
                        else if (cartItems[0].Item2 == true)
                        {
                            OvalSaveCartLink.Visible  = false;
                            imgSavedCartsHelp.Visible = false;
                        }
                        else
                        {
                            OvalSaveCartLink.Visible  = true;
                            imgSavedCartsHelp.Visible = true;
                        }
                    }
                    else if (cartItems.Count < 1)
                    {
                        OvalSaveCartLink.Visible  = false;
                        imgSavedCartsHelp.Visible = false;
                    }
                    else
                    {
                        OvalSaveCartLink.Visible  = true;
                        imgSavedCartsHelp.Visible = true;
                    }
                }
            }
        }
예제 #3
0
        private ShoppingCartRuleResult PerformRules(ShoppingCart_V02 cart,
                                                    ShoppingCartRuleResult result,
                                                    ShoppingCartRuleReason reason)
        {
            if (null != cart && ((reason == ShoppingCartRuleReason.CartCreated) || (reason == ShoppingCartRuleReason.CartRetrieved)))
            {
                var myhlCart = cart as MyHLShoppingCart;

                var sku = APFDueProvider.GetAPFSku();
                myhlCart.DeleteItemsFromCart(
                    (from a in cart.CartItems where a.SKU == sku.Trim() select a.SKU).ToList(), true);
            }
            return(result);
        }
        private ShoppingCartRuleResult CheckHonors2016Warehouse(ShoppingCart_V01 shoppingCart,
                                                                ShoppingCartRuleResult ruleResult)
        {
            var cart = shoppingCart as MyHLShoppingCart;

            if (cart != null && cart.OrderCategory == OrderCategoryType.RSO && cart.DeliveryInfo != null)
            {
                var honors2016Skus = GetHonors2016Skus();
                if (cart.DeliveryInfo.Option == DeliveryOptionType.Pickup && cart.DeliveryInfo.WarehouseCode == HLConfigManager.Configurations.PickupOrDeliveryConfiguration.SpecialEventWareHouse)
                {
                    // Remove items from other categories
                    var itemsToRemove = (from item in shoppingCart.CartItems
                                         where !honors2016Skus.Contains(item.SKU)
                                         select item).ToList();
                    if (!itemsToRemove.Any())
                    {
                        return(ruleResult);
                    }

                    //Do not remove APF SKU if exists in the cart
                    var apfSku = APFDueProvider.GetAPFSku();
                    itemsToRemove.RemoveAll(a => a.SKU.Equals(apfSku));

                    if (itemsToRemove.Any())
                    {
                        var notValidSkus = itemsToRemove.Select(s => s.SKU).ToList();
                        cart.DeleteItemsFromCart(notValidSkus, true);
                        ruleResult.Result = RulesResult.Success;
                    }
                }
                else if (cart.DeliveryInfo.Option != DeliveryOptionType.Pickup || cart.DeliveryInfo.WarehouseCode != HLConfigManager.Configurations.PickupOrDeliveryConfiguration.SpecialEventWareHouse)
                {
                    // Remove Honors 2016 items
                    var itemsToRemove = (from item in shoppingCart.CartItems
                                         where honors2016Skus.Contains(item.SKU)
                                         select item).ToList();
                    if (itemsToRemove.Any())
                    {
                        var notValidSkus = itemsToRemove.Select(s => s.SKU).ToList();
                        cart.DeleteItemsFromCart(notValidSkus, true);
                        ruleResult.Result = RulesResult.Success;
                    }
                }
            }
            return(ruleResult);
        }
 /// <summary>
 ///     Saves the cart.
 /// </summary>
 /// <param name="cartName">Cart name.</param>
 /// <param name="update">Flag to update the same saved cart</param>
 private void SaveCart(string cartName, bool update)
 {
     if (!update)
     {
         if (HLConfigManager.Configurations.DOConfiguration.IsChina)
         {
             ShoppingCart.removeItem(APFDueProvider.GetAPFSku());
         }
         var optionType = (ServiceProvider.CatalogSvc.DeliveryOptionType)Enum.Parse(typeof(ServiceProvider.CatalogSvc.DeliveryOptionType),  ProductsBase.OptionType.ToString());
         this.ShoppingCart.CopyCartWithShippingInfo(true, cartName, ProductsBase.ShippingAddresssID,
                                                    ProductsBase.DeliveryOptionID, optionType);
     }
     this.lblSavedCartMessage1.Text = string.Format(
         GetLocalResourceObject("lblSavedCartMessage1.Text") as string, cartName);
     this.updSavedCart.Update();
     this.ShowContinuePopup();
 }
예제 #6
0
        public void GracePeriodAPFDisplay()
        {
            _apfSku = APFDueProvider.GetAPFSku();
            List <ShoppingCartItem_V01> item = (from c in _cart.CartItems where c.SKU == _apfSku select c).ToList();

            _APFExempted = APFDueProvider.IsAPFExemptOn200VP(DistributorOrderingProfile, _cart.VolumeInCart);

            if (_APFStatus != 2)
            {
                return;
            }

            if (_APFExempted)
            {
                pnlAPFPaid.Visible = false;
            }

            if (item.Count >= 1)
            {
                ShowApfAddedMessage();
            }
            else
            {
                var apfSku = new List <ShoppingCartItem_V01>();


                if (!_APFExempted)
                {
                    if (_quantityToAdd < 1)
                    {
                        _quantityToAdd = 1;
                    }
                    apfSku.Add(new ShoppingCartItem_V01(0, APFDueProvider.GetAPFSku(), _quantityToAdd, DateTime.Now));
                    _cart.AddItemsToCart(apfSku);
                }


                item = (from c in _cart.CartItems where c.SKU == _apfSku select c).ToList();
                if (item.Count >= 1)
                {
                    ShowApfAddedMessage();
                }
            }
        }
예제 #7
0
        private ShoppingCartRuleResult CartItemBeingAddedRuleHandler(ShoppingCart_V01 cart,
                                                                     ShoppingCartRuleResult result,
                                                                     string level)
        {
            var hlCart = cart as MyHLShoppingCart;

            if (null != hlCart)
            {
                foreach (ShoppingCartItem_V01 item in cart.CurrentItems)
                {
                    if (APFDueProvider.IsAPFSku(item.SKU))
                    {
                        bool canAddAPF = ShouldAddAPFPT(cart as MyHLShoppingCart);

                        if (!canAddAPF)
                        {
                            result.Result = RulesResult.Failure;
                            result.AddMessage(
                                HttpContext.GetGlobalResourceObject(
                                    string.Format("{0}_ErrorMessage", HLConfigManager.Platform), "CannotAddAPFSku")
                                as string);
                            var sku = APFDueProvider.GetAPFSku();
                            SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                               "CannotRemoveAPFSku");

                            cart.RuleResults.Add(result);
                            cart.APFEdited = false;
                            return(result);
                        }
                    }
                }
                Global.APFRules globalRules = new Global.APFRules();
                hlCart.RuleResults = globalRules.ProcessCart(hlCart, ShoppingCartRuleReason.CartItemsBeingAdded);
            }
            return(result);
        }
예제 #8
0
        protected void btnAddToCart_Click(object sender, EventArgs e)
        {
            if (_APFStatus == 1) // due in 3 months
            {
                if (_apfsInCart >= 1)
                {
                    DisplayData();
                    return;
                }
            }


            MyHLShoppingCart cart = (Page as ProductsBase).ShoppingCart;

            //Add the APF amount to cart
            if (HLConfigManager.Configurations.APFConfiguration.DistributorSku != null)
            {
                try
                {
                    if (_quantityToAdd > 0)
                    {
                        var apfSku = new List <ShoppingCartItem_V01>();
                        apfSku.Add(new ShoppingCartItem_V01(0, APFDueProvider.GetAPFSku(), _quantityToAdd,
                                                            DateTime.Now));

                        if (ShoppingCart.DeliveryInfo == null)
                        {
                            lblAPFMessage.Text = PlatformResources.GetGlobalResourceString("ErrorMessage",
                                                                                           "CantVisitWithNoDeliveryInfo");
                            return;
                        }

                        if (CatalogProvider.IsPreordering(ShoppingCart.CartItems,
                                                          ShoppingCart.DeliveryInfo.WarehouseCode))
                        {
                            lblAPFMessage.Text = String.Format(
                                PlatformResources.GetGlobalResourceString("ErrorMessage",
                                                                          "PreOrderingSku"));
                        }
                        else
                        {
                            ProductsBase.AddItemsToCart(apfSku);
                        }

                        // Verify if any validation rule fails to show the error in the APF module
                        IEnumerable <string> ruleResultMessages =
                            from r in ShoppingCart.RuleResults
                            where r.Result == RulesResult.Failure
                            select r.Messages[0];
                        if (null != ruleResultMessages && ruleResultMessages.Count() > 0)
                        {
                            lblError.Text    = ruleResultMessages.FirstOrDefault();
                            lblError.Visible = true;
                            return;
                        }
                    }
                }
                catch (Exception ex)
                {
                    LoggerHelper.Error("APF Could not be added to cart!\n" + ex);
                }

                DisplayData();
            }
        }
예제 #9
0
        private void DoApfDue(string distributorID,
                              ShoppingCart_V01 result,
                              string cacheKey,
                              string locale,
                              bool cartHasItems,
                              ShoppingCartRuleResult ruleResult,
                              bool justEntered)
        {
            var cart = result as MyHLShoppingCart;

            if (cart == null)
            {
                return;
            }

            try
            {
                string level;
                if (DistributorProfileModel != null)
                {
                    level = DistributorProfileModel.TypeCode.ToUpper();
                }
                else
                {
                    level = GetMemberLevelFromDistributorProfile(cart.DistributorID);
                }

                var distributorOrderingProfile = DistributorOrderingProfileProvider.GetProfile(cart.DistributorID,
                                                                                               cart.CountryCode);
                if ((distributorOrderingProfile.HardCashOnly &&
                     !HLConfigManager.Configurations.PaymentsConfiguration.AllowWireForHardCash))
                {
                    return;
                }
                var apfItems = new List <ShoppingCartItem_V01>();
                if (cart.CartItems != null && cart.CartItems.Count > 0)
                {
                    //Stash off all non-APF items - to be re-added if appropriate
                    var nonApfItems =
                        (from c in cart.CartItems where APFDueProvider.IsAPFSku(c.SKU.Trim()) == false select c)
                        .ToList <ShoppingCartItem_V01>();
                    apfItems =
                        (from c in cart.CartItems where APFDueProvider.IsAPFSku(c.SKU.Trim()) select c)
                        .ToList <ShoppingCartItem_V01>();
                    if (nonApfItems.Count > 0 ||
                        HLConfigManager.Configurations.APFConfiguration.StandaloneAPFOnlyAllowed)
                    {
                        // Clear the cart
                        cart.DeleteItemsFromCart(null, true);
                        //if (APFDueProvider.CanEditAPFOrder(distributorID, locale, level))
                        //{
                        //Global rule - they can always edit the cart ie add remove products at least
                        var list =
                            CatalogProvider.GetCatalogItems((from p in nonApfItems select p.SKU).ToList(), Country);
                        var products =
                            (from c in list where c.Value.ProductType == ProductType.Product select c.Value.SKU).ToList();
                        var nonproducts =
                            (from c in list where c.Value.ProductType != ProductType.Product select c.Value.SKU).ToList();
                        if (!HLConfigManager.Configurations.APFConfiguration.AllowNonProductItemsWithStandaloneAPF)
                        //We don't allow non product items alone on an apf order
                        {
                            if (products.Count == 0)
                            {
                                if (nonproducts.Count > 0)
                                {
                                    ruleResult.Result = RulesResult.Success;
                                    ruleResult.AddMessage(
                                        HttpContext.GetGlobalResourceObject(
                                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                            "NonProductItemsRemovedForStandaloneAPF") as string);
                                    cart.RuleResults.Add(ruleResult);
                                }
                            }
                            else
                            {
                                cart.AddItemsToCart(nonApfItems, true);
                            }
                        }
                        else
                        {
                            if (!HLConfigManager.Configurations.APFConfiguration.StandaloneAPFOnlyAllowed)
                            {
                                cart.AddItemsToCart(nonApfItems, true);
                            }
                        }
                    }
                }
                else if (null != cart && null != cart.RuleResults)
                {
                    var rules =
                        (from rule in cart.RuleResults
                         where rule.RuleName == RuleName && rule.Result == RulesResult.Failure
                         select rule);
                    if (null != rules && rules.Count() > 0)
                    {
                        cart.RuleResults.Remove(rules.First());
                    }
                }

                //Add the APF in
                var apfSku = new List <ShoppingCartItem_V01>();
                var sku    = APFDueProvider.GetAPFSku();
                apfSku.Add(new ShoppingCartItem_V01(0, sku, 1, DateTime.Now));
                if (!cart.APFEdited)
                {
                    apfSku[0].Quantity = 1; //CalcQuantity(distributorOrderingProfile.ApfDueDate);
                    if (cart.CartItems.Exists(c => c.SKU == apfSku[0].SKU))
                    {
                        var apf =
                            (from a in cart.CartItems where a.SKU == apfSku[0].SKU select a).First();
                        cart.DeleteItemsFromCart(
                            (from a in cart.CartItems where a.SKU == apfSku[0].SKU select a.SKU).ToList(), true);
                    }
                    if (cart.CartItems.Count == 0) //This is now a Standalone APF
                    {
                        SetAPFDeliveryOption(cart);
                    }
                    cart.AddItemsToCart(apfSku, true);

                    if (justEntered)
                    {
                        ruleResult.AddMessage(
                            HttpContext.GetGlobalResourceObject(
                                string.Format("{0}_ErrorMessage", HLConfigManager.Platform), "APFDueAdded") as string);
                        ruleResult.Result = RulesResult.Success;

                        SetApfRuleResponse(ruleResult, ApfAction.None, sku, "ApfRule", TypeOfApf.CantDSRemoveAPF,
                                           "APFDueAdded");

                        cart.RuleResults.Add(ruleResult);
                    }
                    else
                    {
                        foreach (ShoppingCartRuleResult r in cart.RuleResults)
                        {
                            if (r.RuleName == RuleName)
                            {
                                r.Messages.Clear();
                                r.AddMessage(string.Empty);
                            }
                        }
                    }
                }
                //else
                //{
                //    if (APFDueProvider.CanRemoveAPF(distributorID, locale, level))
                //    {
                //        cart.AddItemsToCart(apfSku, true);
                //    }
                //}
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(string.Format("doAPFDue DS:{0} ERR:{1}", distributorID, ex));
            }
        }
예제 #10
0
        private ShoppingCartRuleResult CartItemBeingDeletedRuleHandler(ShoppingCart_V01 cart,
                                                                       ShoppingCartRuleResult result,
                                                                       string level)
        {
            if (APFDueProvider.IsAPFDueAndNotPaid(cart.DistributorID, Locale) &&
                HLConfigManager.Configurations.APFConfiguration.StandaloneAPFOnlyAllowed)
            {
                result.Result = RulesResult.Failure;
                result.AddMessage(
                    HttpContext.GetGlobalResourceObject(string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                                        "CompleteAPFPurchase") as string);
                var sku = APFDueProvider.GetAPFSku();
                SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                   "CompleteAPFPurchase");

                cart.RuleResults.Add(result);
                return(result);
            }

            //Deleting is a little different than Inserting, because delete handles multiple skus while insert only does one
            //so we can use the cart.CurrentItems to control this. Anything the rule says to not delete, we remove from the CurrentItems
            //Delete post-rule will only delete what is left in there
            bool isStandaloneAPF = APFDueProvider.hasOnlyAPFSku(cart.CartItems, Locale);
            var  toRemove        = new List <ShoppingCartItem_V01>();
            var  hlCart          = cart as MyHLShoppingCart;

            if (null != hlCart)
            {
                foreach (ShoppingCartItem_V01 item in cart.CurrentItems)
                {
                    if (APFDueProvider.IsAPFSku(item.SKU))
                    {
                        if (
                            !APFDueProvider.CanRemoveAPF(cart.DistributorID, Thread.CurrentThread.CurrentCulture.Name,
                                                         level))
                        {
                            result.Result = RulesResult.Failure;
                            result.AddMessage(
                                HttpContext.GetGlobalResourceObject(
                                    string.Format("{0}_ErrorMessage", HLConfigManager.Platform), "CannotRemoveAPFSku")
                                as string);
                            var sku = APFDueProvider.GetAPFSku();
                            SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                               "CannotRemoveAPFSku");

                            cart.RuleResults.Add(result);
                        }
                        else
                        {
                            if (APFDueProvider.IsAPFDueAndNotPaid(cart.DistributorID, Locale))
                            {
                                var originalItem =
                                    (from c in cart.CartItems where c.SKU == cart.CurrentItems[0].SKU select c).ToList();
                                int requiredQuantity = APFDueProvider.APFQuantityDue(cart.DistributorID, Locale);
                                if (level == "SP")
                                {
                                    item.Quantity = requiredQuantity;
                                    result.Result = RulesResult.Recalc;
                                    result.AddMessage(
                                        HttpContext.GetGlobalResourceObject(
                                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                            "RequiredAPFLeftInCart") as string);
                                    var sku = APFDueProvider.GetAPFSku();
                                    SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                                       "RequiredAPFLeftInCart");
                                    cart.RuleResults.Add(result);
                                    //toRemove.Add(item);
                                    cart.APFEdited = false;
                                    return(result);
                                }

                                //Add for ChinaDO
                                if (HLConfigManager.Configurations.APFConfiguration.CantDSRemoveAPF)
                                {
                                    result.Result = RulesResult.Recalc;
                                    result.AddMessage(
                                        HttpContext.GetGlobalResourceObject(
                                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                            "RequiredAPFLeftInCart") as string);
                                    var sku = APFDueProvider.GetAPFSku();
                                    SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                                       "RequiredAPFLeftInCart");
                                    cart.RuleResults.Add(result);
                                    //toRemove.Add(item);
                                    cart.APFEdited = false;
                                    return(result);
                                }
                            }
                            cart.APFEdited = true;
                            toRemove.Add(item); // added
                        }
                    }
                    else
                    {
                        toRemove.Add(item); // added
                    }
                }
                //if (toRemove.Count > 0)
                //{
                //    cart.CurrentItems.Remove(toRemove[0]);
                //}
                var remainingItems = (from c in cart.CartItems
                                      where !toRemove.Any(x => x.SKU == c.SKU)
                                      select c).ToList();

                //List<ShoppingCartItem_V01> remainingItems = (from c in cart.CartItems where c.SKU != cart.CurrentItems[0].SKU select c).ToList();
                var mags = CartHasOnlyTodaysMagazine(remainingItems);
                if (mags.Count > 0)
                {
                    foreach (ShoppingCartItem_V01 item in mags)
                    {
                        (cart as MyHLShoppingCart).DeleteTodayMagazine(item.SKU);
                        remainingItems.Remove(item);
                        if (!cart.CurrentItems.Exists(c => c.SKU == item.SKU))
                        {
                            cart.CurrentItems.Add(item);
                        }
                    }
                    result.Result = RulesResult.Failure;
                    result.AddMessage(
                        HttpContext.GetGlobalResourceObject(
                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                            "NoTodayMagazineWithStandalonAPF") as string);
                    var sku = APFDueProvider.GetAPFSku();
                    SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                       "NoTodayMagazineWithStandalonAPF");
                    cart.RuleResults.Add(result);
                }

                // added
                if (remainingItems.Count > 0)
                {
                    var list = new ShoppingCartItemList();
                    list.AddRange(remainingItems);
                    isStandaloneAPF = APFDueProvider.hasOnlyAPFSku(list, Locale);
                    if (isStandaloneAPF)
                    {
                        SetAPFDeliveryOption(hlCart);
                    }
                    else
                    {
                        if (APFDueProvider.IsAPFSkuPresent(cart.CurrentItems))
                        {
                            SetNonStandAloneAPFDeliveryOption(hlCart);
                        }
                    }
                }
                else
                {
                    SetNonStandAloneAPFDeliveryOption(hlCart);
                }
            }
            //if((from c in cart.CurrentItems where APFDueProvider.IsAPFSku(c.SKU) select c).Count() >0)
            //{
            //    if (isStandaloneAPF)
            //    {
            //        SetAPFDeliveryOption(hlCart);
            //    }
            //}

            return(result);
        }
예제 #11
0
        private ShoppingCartRuleResult CartItemBeingAddedRuleHandler(ShoppingCart_V01 cart,
                                                                     ShoppingCartRuleResult result,
                                                                     string level)
        {
            var distributorId      = cart.DistributorID;
            var isAPFDueandNotPaid = APFDueProvider.IsAPFDueAndNotPaid(distributorId, Locale);

            if (isAPFDueandNotPaid && HLConfigManager.Configurations.APFConfiguration.StandaloneAPFOnlyAllowed)
            {
                result.Result = RulesResult.Failure;
                result.AddMessage(
                    HttpContext.GetGlobalResourceObject(string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                                        "CompleteAPFPurchase") as string);
                var sku = APFDueProvider.GetAPFSku();
                SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                   "CompleteAPFPurchase");

                cart.RuleResults.Add(result);
                return(result);
            }
            else if (isAPFDueandNotPaid && HLConfigManager.Configurations.DOConfiguration.IsChina)
            {
                string cacheKey   = string.Empty;
                bool   reloadAPFs = (null != cart && null != cart.CartItems) && isAPFDueandNotPaid &&
                                    !APFDueProvider.IsAPFSkuPresent(cart.CartItems);

                DoApfDue(cart.DistributorID, cart, cacheKey, Locale, reloadAPFs, result, true);
            }

            if ((cart as MyHLShoppingCart).OrderCategory == OrderCategoryType.ETO) //No APFs allowed in ETO cart
            {
                result.Result = RulesResult.Success;
                return(result);
            }

            //cart.CurrentItems[0] contains the current item being added
            //because the provider only adds one at a time, we just need to return a single error, but aggregate to the cart errors for the UI
            if (APFDueProvider.IsAPFSku(cart.CurrentItems[0].SKU))
            {
                if (APFDueProvider.CanRemoveAPF(distributorId, Locale, level))
                {
                    if (APFDueProvider.IsAPFSku(cart.CurrentItems[0].SKU))
                    {
                        var originaItem =
                            (from c in cart.CartItems where c.SKU == cart.CurrentItems[0].SKU select c).ToList();
                        int previousQuantity = 0;
                        if (null != originaItem && originaItem.Count > 0)
                        {
                            previousQuantity = originaItem[0].Quantity;
                        }
                        if (APFDueProvider.IsAPFDueAndNotPaid(distributorId, Locale))
                        {
                            int requiredQuantity = APFDueProvider.APFQuantityDue(distributorId, Locale);
                            if (cart.CurrentItems[0].Quantity + previousQuantity <= requiredQuantity)
                            {
                                if (level == "SP")
                                {
                                    cart.CurrentItems[0].Quantity = requiredQuantity - previousQuantity;
                                    result.Result = RulesResult.Recalc;
                                    result.AddMessage(
                                        HttpContext.GetGlobalResourceObject(
                                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                            "RequiredAPFLeftInCart") as string);
                                    var sku = APFDueProvider.GetAPFSku();
                                    SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.CantDSRemoveAPF,
                                                       "RequiredAPFLeftInCart");
                                    cart.RuleResults.Add(result);
                                    cart.APFEdited = false;
                                    return(result);
                                }
                                else
                                {
                                    result.Result = RulesResult.Recalc;
                                    result.AddMessage(string.Empty);
                                    cart.RuleResults.Add(result);
                                    cart.APFEdited = true;
                                    return(result);
                                }
                            }
                            else if (cart.CurrentItems[0].Quantity + previousQuantity > requiredQuantity)
                            {
                                cart.CurrentItems[0].Quantity = requiredQuantity - previousQuantity;
                                result.Result = RulesResult.Recalc;
                                result.AddMessage(
                                    HttpContext.GetGlobalResourceObject(
                                        string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                        "RequiredAPFLeftInCart") as string);
                                var sku = APFDueProvider.GetAPFSku();
                                SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.CantDSRemoveAPF,
                                                   "RequiredAPFLeftInCart");
                                cart.RuleResults.Add(result);
                                cart.APFEdited = false;
                                return(result);
                            }
                        }
                        else
                        {
                            if (cart.CurrentItems[0].Quantity + previousQuantity > 1)
                            {
                                if (APFDueProvider.CanAddAPF(distributorId))
                                {
                                    result.Result = RulesResult.Failure;
                                    result.AddMessage(
                                        HttpContext.GetGlobalResourceObject(
                                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                            "CanOnlyPrepayOneAPF") as string);
                                    var sku = APFDueProvider.GetAPFSku();
                                    SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.CantDSRemoveAPF,
                                                       "CanOnlyPrepayOneAPF");
                                    cart.RuleResults.Add(result);
                                    cart.APFEdited = true;
                                    return(result);
                                }
                            }
                        }
                    }
                }

                if (!APFDueProvider.CanAddAPF(distributorId))
                {
                    result.Result = RulesResult.Failure;
                    result.AddMessage(
                        HttpContext.GetGlobalResourceObject(
                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform), "CannotAddAPFSku") as string);
                    var sku = APFDueProvider.GetAPFSku();
                    SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.CannotAddAPFSku,
                                       "CannotAddAPFSku");

                    cart.RuleResults.Add(result);
                    return(result);
                }
                else
                {
                    string apfSku = APFDueProvider.GetAPFSku();
                    if (cart.CurrentItems[0].SKU == apfSku)
                    {
                        cart.APFEdited = true;
                    }
                    else
                    {
                        result.Result = RulesResult.Failure;
                        result.AddMessage(
                            HttpContext.GetGlobalResourceObject(
                                string.Format("{0}_ErrorMessage", HLConfigManager.Platform), "SkuNotValid") as string);
                        var sku = APFDueProvider.GetAPFSku();
                        SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.CannotAddAPFSku,
                                           "SkuNotValid");
                        cart.RuleResults.Add(result);
                        return(result);
                    }
                }
            }

            if (APFDueProvider.IsAPFSkuPresent(cart.CartItems))
            {
                var currentSession = SessionInfo.GetSessionInfo(cart.DistributorID, cart.Locale);
                if ((!APFDueProvider.CanEditAPFOrder(cart.DistributorID, Thread.CurrentThread.CurrentCulture.Name, level)) || (currentSession.IsAPFOrderFromPopUp))
                {
                    result.Result = RulesResult.Failure;
                    result.AddMessage(
                        HttpContext.GetGlobalResourceObject(
                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform), "CompleteAPFPurchase") as
                        string);
                    var sku = APFDueProvider.GetAPFSku();
                    SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                       "CompleteAPFPurchase");
                    cart.RuleResults.Add(result);
                    return(result);
                }
                else
                {
                    if (APFDueProvider.containsOnlyAPFSku(cart.CartItems))
                    {
                        CatalogItem item = CatalogProvider.GetCatalogItem(cart.CurrentItems[0].SKU, Country);
                        if (null != item)
                        {
                            if (!HLConfigManager.Configurations.APFConfiguration.AllowNonProductItemsWithStandaloneAPF)
                            {
                                if (item.ProductType != ProductType.Product)
                                {
                                    result.Result = RulesResult.Failure;
                                    result.AddMessage(
                                        HttpContext.GetGlobalResourceObject(
                                            string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                            "NoNonProductToStandaloneAPF") as string);

                                    var sku = APFDueProvider.GetAPFSku();
                                    SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.AllowNonProductItemsWithStandaloneAPF,
                                                       "NoNonProductToStandaloneAPF");

                                    cart.RuleResults.Add(result);
                                    return(result);
                                }
                            }
                            if (item.SKU == HLConfigManager.Configurations.DOConfiguration.TodayMagazineSku ||
                                item.SKU == HLConfigManager.Configurations.DOConfiguration.TodayMagazineSecondarySku)
                            {
                                result.Result = RulesResult.Failure;
                                result.AddMessage(
                                    HttpContext.GetGlobalResourceObject(
                                        string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                        "NoTodayMagazineWithStandalonAPF") as string);
                                var sku = APFDueProvider.GetAPFSku();
                                SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                                   "NoTodayMagazineWithStandalonAPF");

                                cart.RuleResults.Add(result);
                                return(result);
                            }

                            //To the standalone APF, DS trying to add product then change the Freight code & warehouse code.
                            else if (item.ProductType == ProductType.Product ||
                                     item.ProductType == ProductType.Literature ||
                                     item.ProductType == ProductType.PromoAccessory)
                            {
                                SetNonStandAloneAPFDeliveryOption(cart as MyHLShoppingCart);
                            }
                        }
                    }
                }
            }

            //Can add
            if (APFDueProvider.IsAPFSku(cart.CurrentItems[0].SKU))
            {
                if (cart.CurrentItems[0].Quantity < 0)
                {
                    var originaItem =
                        (from c in cart.CartItems where c.SKU == cart.CurrentItems[0].SKU select c).ToList();
                    int previousQuantity = originaItem[0].Quantity;
                    if (APFDueProvider.IsAPFDueAndNotPaid(distributorId, Locale))
                    {
                        int requiredQuantity = APFDueProvider.APFQuantityDue(distributorId, Locale);
                        if (level == "SP" || !HLConfigManager.Configurations.APFConfiguration.AllowDSRemoveAPFWhenDue)
                        {
                            if (cart.CurrentItems[0].Quantity + previousQuantity < requiredQuantity)
                            {
                                cart.CurrentItems[0].Quantity = (previousQuantity - requiredQuantity) * -1;
                                result.Result = RulesResult.Recalc;
                                result.AddMessage(
                                    HttpContext.GetGlobalResourceObject(
                                        string.Format("{0}_ErrorMessage", HLConfigManager.Platform),
                                        "RequiredAPFLeftInCart") as string);
                                var sku = APFDueProvider.GetAPFSku();
                                SetApfRuleResponse(result, ApfAction.None, sku, "ApfRule", TypeOfApf.StandaloneAPFOnlyAllowed,
                                                   "RequiredAPFLeftInCart");

                                cart.RuleResults.Add(result);
                                cart.APFEdited = false;
                                return(result);
                            }
                        }
                    }
                }
            }

            return(result);
        }
예제 #12
0
        protected void btnAddToCart_Click(object sender, EventArgs e)
        {
            if (_apfDueWithinOneYear)
            {
                if (_quantityToAdd != 1)
                {
                    DisplayData();
                    return;
                }
            }
            else
            {
                if (_quantityToAdd == 0 || _quantityToAdd > (_apfsDue - _apfsInCart))
                {
                    if (_apfsDue - _apfsInCart == 1)
                    {
                        lblError.Text = GetLocalResourceObject("QuantityMustBeOne") as string;
                    }
                    else
                    {
                        lblError.Text = string.Format((GetLocalResourceObject("InvalidQuantity") as string), 1,
                                                      (_apfsDue - _apfsInCart));
                    }
                    lblError.Visible = true;
                    return;
                }
            }

            MyHLShoppingCart cart = (Page as ProductsBase).ShoppingCart;

            //Add the APF amount to cart
            if (HLConfigManager.Configurations.APFConfiguration.DistributorSku != null)
            {
                try
                {
                    if (_quantityToAdd > 0)
                    {
                        var apfSku = new List <ShoppingCartItem_V01>();
                        apfSku.Add(new ShoppingCartItem_V01(0, APFDueProvider.GetAPFSku(), _quantityToAdd,
                                                            DateTime.Now));
                        if (Locale == "en-IN" && cart.CartItems.Count > 0)
                        {
                            lblError.Text    = GetLocalResourceObject("AAFWithOtherProducts") as string;
                            lblError.Visible = true;
                            return;
                        }
                        else
                        {
                            ProductsBase.AddItemsToCart(apfSku);
                        }

                        // Verify if any validation rule fails to show the error in the APF module
                        IEnumerable <string> ruleResultMessages =
                            from r in ShoppingCart.RuleResults
                            where r.Result == RulesResult.Failure
                            select r.Messages[0];
                        if (null != ruleResultMessages && ruleResultMessages.Count() > 0)
                        {
                            lblError.Text    = ruleResultMessages.FirstOrDefault();
                            lblError.Visible = true;
                            return;
                        }
                    }
                }
                catch (Exception ex)
                {
                    LoggerHelper.Error("APF Could not be added to cart!\n" + ex);
                }

                DisplayData();
            }
        }