protected override RewardDescription Evaluate( Free2 promotionData , PromotionProcessorContext context) { // RequiredQty & FreeItem in the model IOrderForm orderForm = context.OrderGroup.GetFirstForm(); IEnumerable <ILineItem> lineItems = context.OrderGroup.GetFirstForm().GetAllLineItems(); ContentReference freeItem = promotionData.FreeItem.Items.First(); // Using "First()" just to show string freeItemCode = _referenceConverter.GetCode(freeItem); FulfillmentStatus status = promotionData.RequiredQty.GetFulfillmentStatus( orderForm, _collectionTargetEvaluator, _fulfillmentEvaluator); IList <string> applicableEntryCodes = _collectionTargetEvaluator.GetApplicableCodes( lineItems, promotionData.RequiredQty.Items, false); string description = promotionData.Description; return(RewardDescription.CreateFreeItemReward( status , GetRedemptionDescriptions(promotionData, context, applicableEntryCodes) , promotionData , description + " : " + freeItemCode)); // description, just to show }
protected override RewardDescription Evaluate( FreeItemPromotion data, PromotionProcessorContext ctx) { // is this used IEnumerable <ContentReference> targetItems = data.DiscountTargets.Items.ToList(); // get which LI this promo is for var targets = data.DiscountTargets; var freeItem = data.FreeItem.Items.First().ToReferenceWithoutVersion(); //var freeItemCode = ServiceLocator.Current.GetInstance<ReferenceConverter>().GetCode(freeItem); var freeItemCode = _refConv.Service.GetCode(freeItem); // Have RefConv. below IOrderForm form = ctx.OrderForm; var lineItems = form.GetAllLineItems(); //var lineItems = GetLineItems(ctx.OrderForm.get); // not anymore var matchRecursive = false; // mandatory var skuCodes = _targetEvaluator.GetApplicableCodes( lineItems, targets.Items, targets.MatchRecursive); // get one if kicked in, 0 if not FulfillmentStatus status = data.RequiredQty.GetFulfillmentStatus(form, _targetEvaluator, _fulfillmentEvaluator); List <RewardDescription> rewardDescriptions = new List <RewardDescription>(); List <RedemptionDescription> redemptionDescriptions = new List <RedemptionDescription>(); // GetAllAffectedItems is the only method - name was changed var affectedItems = _targetEvaluator.GetApplicableCodes(lineItems, targetItems, matchRecursive); // only a single method to use on the "FulfillmentEvaluator" - out commented //var status = FulfillmentEvaluator.GetStatusForBuyQuantityPromotion(affectedItems.Select(x => x.LineItem) // , data.RequiredQty,0); // "Required" in the model // This way (demo) of using it is maybe not the intended, thought of like "buy 5 - get one for free" // ...have to load the gift and add it to the cart // ...have "Money" and "Percentage" return(RewardDescription.CreateFreeItemReward( status , GetRedemptions(skuCodes, data, ctx) , data , data.Description + " : " + freeItemCode //status, //affectedItems, //data //GetRewardDescriptionText(tagets, status, data) )); }
public override RewardDescription Evaluate(IOrderForm orderForm, BuyXFromCategoryGetProductForFree promotionData, PromotionProcessorContext context) { IEnumerable <ILineItem> items = GetLineItemsInOrder(orderForm); List <AffectedItem> affectedItems = new List <AffectedItem>(); var lineItemCategories = items.Select(i => new { Quantity = i.Quantity, NodesForEntry = GetNodesForEntry(i.Code), Code = i.Code, LineItem = i }); decimal numberOfItemsInPromotionCategory = 0; NodeContent category = _contentLoader.Get <NodeContent>(promotionData.Category); foreach (var lineItemCategory in lineItemCategories) { if (lineItemCategory.NodesForEntry.Contains(category.Code)) { numberOfItemsInPromotionCategory += lineItemCategory.Quantity; // TODO: This has not yet been implemented //affectedItems.Add( // new AffectedItem( // _referenceConverter.GetContentLink(lineItemCategory.Code), // lineItemCategory.LineItem, // lineItemCategory.Quantity)); } } FulfillmentStatus fulfillment = this.GetFulfillment(numberOfItemsInPromotionCategory, promotionData.Threshold); // context.OrderGroup //if(fulfillment == FulfillmentStatus.Fulfilled) //{ // affectedItems.Add( // new AffectedItem( // promotionData // _referenceConverter.GetContentLink(lineItemCategory.Code), // lineItemCategory.LineItem, // lineItemCategory.Quantity)); //} return(RewardDescription.CreateFreeItemReward(fulfillment, affectedItems, promotionData, "Got something for free")); // return new RewardDescription(fulfillment, affectedItems, promotionData, 0, 0, RewardType.Free, "Got something for free"); }
Injected <ReferenceConverter> _refConv; // lazy dev - fix protected override RewardDescription Evaluate( FreeItemPromotion data, PromotionProcessorContext ctx) { // is this used IEnumerable <ContentReference> targetItems = data.DiscountTargets.Items.ToList(); // get which LI this promo is for // data - the promotion itself, and the custom model provided // ctx - gives OrderGroup, OrderForm, Prices (PriceMatrix) & some calc var targets = data.DiscountTargets; var freeItem = data.FreeItem.Items.First().ToReferenceWithoutVersion(); // just to show some var freeItemCode = _refConv.Service.GetCode(freeItem); // Have RefConv. injected below IOrderForm form = ctx.OrderForm; var lineItems = form.GetAllLineItems(); //var lineItems = GetLineItems(ctx.OrderForm.get); // not anymore var matchRecursive = false; // mandatory IList <string> skuCodes = _targetEvaluator.GetApplicableCodes( lineItems, targets.Items, targets.MatchRecursive); // get one if kicked in, 0 if not FulfillmentStatus status = data.RequiredQty.GetFulfillmentStatus( form, _targetEvaluator, _fulfillmentEvaluator); // extension method List <RewardDescription> rewardDescriptions = new List <RewardDescription>(); List <RedemptionDescription> redemptionDescriptions = new List <RedemptionDescription>(); // GetAllAffectedItems is the only method - name was changed var affectedItems = _targetEvaluator.GetApplicableCodes(lineItems, targetItems, matchRecursive); // "FulfillmentEvaluator" - not used much here - gives different statuses //_fulfillmentEvaluator.GetStatusForSpendAmountPromotion() //... as an example // This way (demo) of using it is maybe not the intended, thought of like // "buy 5 - get one for free" // ...have to load the gift and add it to the cart // ...have "Money", "Percentage", GiftItem, FreeItem etc. return(RewardDescription.CreateFreeItemReward( status , GetRedemptions(skuCodes, data, ctx) // explanation below , data , data.Description + " : " + freeItemCode )); }