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");
        }
Пример #4
0
        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
                       ));
        }