/// <summary> /// Checks whether the cart is eligible for any Promotions /// </summary> /// <returns>A bool whether it is eligible</returns> private bool CheckForPromotionEligibility() { var promotions = _promotionEngine.GetPromotions(); // If no promotion has been added, then we check for eligibility if (!_cart.IsPromotionUsed) { foreach (var promotion in promotions) { // Create temporary dict to store a promotion like the SKUs // are stored in the cart. var tempDict = new Dictionary <SKUEnum, int>(); foreach (var data in promotion.Promotions) { tempDict.Add(data.SKU, data.Count); } // Check if any promotion has matched var matchCount = tempDict .Where(entry => _cart.SKUs.ContainsKey(entry.Key) && _cart.SKUs[entry.Key] % entry.Value == 0) .ToDictionary(entry => entry.Key, entry => entry.Value); // If any promotion has matched, we save the promotion type // and break out of the loop. if (tempDict.Count == matchCount.Count) { _cart.IsPromotionUsed = true; _cart.ActivePromotion = promotion; break; } } } return(_cart.IsPromotionUsed); }