示例#1
0
        public override PromotionReward[] EvaluatePromotion(IEvaluationContext context)
        {
            var retVal       = new List <PromotionReward>();
            var promoContext = context as PromotionEvaluationContext;

            if (promoContext == null)
            {
                throw new ArgumentException("context should be PromotionEvaluationContext");
            }

            //Check coupon
            var couponValid = (Coupons != null && Coupons.Any()) ? Coupons.Any(x => String.Equals(x, promoContext.Coupon, StringComparison.InvariantCultureIgnoreCase)) : true;


            //Evaluate reward for all promoEntry in context
            foreach (var promoEntry in promoContext.PromoEntries)
            {
                //Set current context promo entry for evaluation
                promoContext.PromoEntry = promoEntry;
                foreach (var reward in Rewards.Select(x => x.Clone()))
                {
                    reward.Promotion = this;
                    reward.IsValid   = couponValid && Condition(promoContext);
                    var catalogItemReward = reward as CatalogItemAmountReward;
                    //Set productId for catalog item reward
                    if (catalogItemReward != null && catalogItemReward.ProductId == null)
                    {
                        catalogItemReward.ProductId = promoEntry.ProductId;
                    }
                    retVal.Add(reward);
                }
            }
            return(retVal.ToArray());
        }
        public override PromotionReward[] EvaluatePromotion(IEvaluationContext context)
        {
            var retVal       = new List <PromotionReward>();
            var promoContext = context as PromotionEvaluationContext;

            if (promoContext == null)
            {
                throw new ArgumentException("context should be PromotionEvaluationContext");
            }

            //Check coupon
            var couponValid = Coupons != null?Coupons.Any(x => String.Equals(x, promoContext.Coupon, StringComparison.InvariantCultureIgnoreCase)) : true;

            //deserealize dynamic condition
            var condition = SerializationUtil.DeserializeExpression <Func <IEvaluationContext, bool> >(PredicateSerialized);
            //deserealize rewards
            var rewards = JsonConvert.DeserializeObject <PromotionReward[]>(RewardsSerialized, new JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.All
            });

            //Evaluate reward for all promoEntry in context
            foreach (var promoEntry in promoContext.PromoEntries)
            {
                //Set current context promo entry for evaluation
                promoContext.PromoEntry = promoEntry;
                foreach (var reward in rewards.Select(x => x.Clone()))
                {
                    reward.Promotion = this;
                    reward.IsValid   = couponValid && condition(promoContext);
                    var catalogItemReward = reward as CatalogItemAmountReward;
                    //Set productId for catalog item reward
                    if (catalogItemReward != null && catalogItemReward.ProductId == null)
                    {
                        catalogItemReward.ProductId = promoEntry.ProductId;
                    }
                    retVal.Add(reward);
                }
            }
            return(retVal.ToArray());
        }