private PromotionEntrySet GetPromotionEntrySetFromOrderForm(OrderForm form)
        {
            var set = new PromotionEntrySet();

            foreach (var lineItem in form.LineItems)
            {
                var entry = GetPromotionEntryFromLineItem(lineItem);
                set.Entries.Add(entry);
            }

            return(set);
        }
コード例 #2
0
        private PromotionEntrySet GetPromotionEntrySetFromItem(Item item, decimal price, Hashtable tags)
        {
            var set      = new PromotionEntrySet();
            var populate = new PromotionEntryPopulate();

            var entry = new PromotionEntry(tags ?? new Hashtable())
            {
                CostPerEntry = price
            };

            populate.Populate(ref entry, item);
            set.Entries.Add(entry);

            return(set);
        }
        private IEnumerable <PromotionRecord> CalculateLineItemDiscounts()
        {
            var records = new List <PromotionRecord>();

            foreach (var form in CurrentOrderGroup.OrderForms)
            {
                foreach (var lineItem in form.LineItems)
                {
                    var set   = new PromotionEntrySet();
                    var entry = GetPromotionEntryFromLineItem(lineItem);
                    set.Entries.Add(entry);

                    // create context
                    var ctx = new Dictionary <string, object> {
                        { PromotionEvaluationContext.TargetSet, set }
                    };

                    //1. Prepare marketing context
                    var evaluationContext = new PromotionEvaluationContext
                    {
                        ContextObject    = ctx,
                        CustomerId       = CustomerSessionService.CustomerSession.CustomerId,
                        CouponCode       = CustomerSessionService.CustomerSession.CouponCode,
                        Currency         = CustomerSessionService.CustomerSession.Currency,
                        PromotionType    = PromotionType.CatalogPromotion,
                        Store            = CustomerSessionService.CustomerSession.StoreId,
                        IsRegisteredUser = CustomerSessionService.CustomerSession.IsRegistered,
                        IsFirstTimeBuyer = CustomerSessionService.CustomerSession.IsFirstTimeBuyer
                    };

                    //2. Evaluate
                    var promotions = PromotionEvaluator.EvaluatePromotion(evaluationContext);
                    var rewards    = promotions.SelectMany(x => x.Rewards);

                    records.AddRange(rewards.Select(reward => new PromotionRecord
                    {
                        AffectedEntriesSet = set,
                        TargetEntriesSet   = set,
                        Reward             = reward,
                        PromotionType      = PromotionType.CatalogPromotion
                    }));
                }
            }

            return(records.ToArray());
        }