예제 #1
0
        /// <summary>
        /// Adding Promotional Rule.
        /// </summary>
        /// <param name="rule"></param>
        public void AddPricingRule(PromotionRule rule)
        {
            if (rule == null)
            {
                throw new ArgumentNullException();
            }

            promotionRules.Add(rule);
        }
예제 #2
0
        /// <summary>
        /// Logic to Calculate Price when Applying ]Pair-Promotional Rule(1A and 1B costs N Rs).
        /// </summary>
        /// <param name="total">Result of Calculations</param>
        /// <param name="items">Total No. of SKU Items </param>
        /// <param name="ruleForGroup">Promotional Rule to be applied</param>
        /// <returns></returns>
        public int Calculate(int total, List <Item> items, PromotionRule ruleForGroup)
        {
            var groupCount1 = items.Where(g => g.SKU == ruleForGroup.SKU).Count();
            var groupCount2 = items.Where(g => g.SKU == ruleForGroup.SKU2).Count();
            int count       = 0;

            while (groupCount1 > 0 && groupCount2 > 0)
            {
                count++;
                groupCount1--;
                groupCount2--;
            }

            total += count * ruleForGroup.Price;
            total += groupCount1 * items.Where(x => x.SKU == ruleForGroup.SKU).Select(x => x.Price).FirstOrDefault();
            total += groupCount2 * items.Where(x => x.SKU == ruleForGroup.SKU2).Select(x => x.Price).FirstOrDefault();
            return(total);
        }
        /// <summary>
        /// Logic to Calculate Price when Applying NPromotional Rule.
        /// </summary>
        /// <param name="total">Result of Calculations</param>
        /// <param name="items">Total No. of SKU Items </param>
        /// <param name="ruleForGroup">Promotional Rule to be applied</param>
        /// <returns></returns>
        public int Calculate(int total, List <Item> items, PromotionRule ruleForGroup)
        {
            var itemGroup  = items.Where(g => g.SKU == ruleForGroup.SKU);
            var groupCount = itemGroup.Count();

            var extra = groupCount - ruleForGroup.ItemCount;

            if (extra < 0)
            {
                total += itemGroup.Sum(g => g.Price);
            }
            else
            {
                total += (groupCount / ruleForGroup.ItemCount) * ruleForGroup.Price;
                total += (groupCount % ruleForGroup.ItemCount) * itemGroup.First().Price;
            }

            return(total);
        }
예제 #4
0
 public void AddNewPromotionRule(PromotionRule promotionRule)
 {
     promotionRules.Add(promotionRule);
 }
예제 #5
0
 public Promotion(string promoName, PromotionRule rule)
 {
     promotionName = promoName;
     Rule          = rule;
 }