Я абсолютно новичок в 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.Мне нужен только функционал.
Любые предложения помогут мне.
Спасибо всем заранее.