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); }
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()); }