EpiCommerce - Как изменить пользовательское продвижение, используя расширенное дополнительное свойство? - PullRequest
0 голосов
/ 20 февраля 2019

Я абсолютно новичок в EpiCommerce.

Я использую проект Quicksilver.

Я создал свою собственную специальную акцию

[ContentType(DisplayName = "Custom Promotion", GUID = "de5ce21b-f88f-420b-840e-243f5a189ee0")]
    public class CustomPromotion : EntryPromotion
    {
        [PromotionRegion(PromotionRegionName.Discount)]
        public virtual int PercentageDiscount { get; set; }

        [PromotionRegion(PromotionRegionName.Condition)]
        public virtual CustomPercentageBlock Condition { get; set; }
    }

, а также пользовательский процессор продвижения.

    [ServiceConfiguration(Lifecycle = ServiceInstanceScope.Singleton)]
    public class PercentagePromotionProcessor : EntryPromotionProcessorBase<CustomPromotion>
    {
        private readonly CollectionTargetEvaluator _targetEvaluator;
        private readonly FulfillmentEvaluator _fulfillmentEvaluator;
        private readonly LocalizationService _localizationService;

        public PercentagePromotionProcessor(CollectionTargetEvaluator targetEvaluator,
            FulfillmentEvaluator fulfillmentEvaluator,
            LocalizationService localizationService,
            RedemptionDescriptionFactory redemptionDescriptionFactory) : base(redemptionDescriptionFactory)
        {
            _targetEvaluator = targetEvaluator;
            _fulfillmentEvaluator = fulfillmentEvaluator;
            _localizationService = localizationService;
        }

        protected override RewardDescription Evaluate(CustomPromotion promotionData, PromotionProcessorContext context)
        {
            var lineItems = GetLineItems(context.OrderForm);
            var condition = promotionData.Condition;

            var applicableCodes = _targetEvaluator.GetApplicableCodes(lineItems, condition.Targets, false);

            var fulfillmentStatus = _fulfillmentEvaluator.GetStatusForBuyQuantityPromotion(applicableCodes, lineItems, 0, 0);

            var affectedEntries = context.EntryPrices.ExtractEntries(applicableCodes, applicableCodes.Count, promotionData);

            return RewardDescription.CreatePercentageReward(fulfillmentStatus,
                GetRedemptions(applicableCodes,affectedEntries, promotionData, context), 
                promotionData, 
                promotionData.PercentageDiscount, 
                "Custom 50% discount");
        }

        protected override PromotionItems GetPromotionItems(CustomPromotion promotionData)
        {
            var specificItems = new CatalogItemSelection(promotionData.Condition.Targets, CatalogItemSelectionType.Specific, false);
            return new PromotionItems(promotionData, specificItems, specificItems);
        }

        private IEnumerable<RedemptionDescription> GetRedemptions(
             IEnumerable<string> applicableCodes,
             AffectedEntries affectedEntries,
             CustomPromotion promotionData,
             PromotionProcessorContext context)
        {
            var redemptions = new List<RedemptionDescription>();
            if (affectedEntries != null)
            {
                var maxRedemptions = applicableCodes.Count();
                for (int i = 0; i < maxRedemptions; i++)
                {
                    redemptions.Add(CreateRedemptionDescription(affectedEntries));
                }
            }

            return redemptions;
        }

    }

Я включил 50% процентную скидку на женские сумки (например), и она отлично работает.

Итак, в моем классе FashionVariant, кроме того, у меня есть логическое свойство DisidedItem.Я также добавил мета-поле и добавил это мета-поле в соответствующие метаклассы.

 public class FashionVariant : VariationContent
    {
       // other properties

        [Searchable]
        [IncludeInDefaultSearch]
        [Tokenize]
        [IncludeValuesInSearchResults]
        [BackingType(typeof(PropertyBoolean))]
        [Display(Name = "Discounted Item", Order = 4)]
        public virtual bool DiscountedItem { get; set; }
}

У меня вопрос к бывшему.после использования моего пользовательского продвижения, как создать функциональность для флажка discountsItem для удаления, а также добавления продвижения в продукт вручную.Флажок должен быть установлен, когда я создаю скидку, и если я хочу удалить скидку вручную для некоторого продукта, я просто снимаю флажок.

PS, когда я добавил метафилд, и этот флажок (DiscountsItem) отображается в режиме редактирования Cms.Мне нужен только функционал.

Любые предложения помогут мне.

Спасибо всем заранее.

...