private static PromoDynamicExpressionTree GetPromotionDynamicExpression() { var customerConditionBlock = new BlockCustomerCondition(); customerConditionBlock.AvailableChildren = new DynamicExpression[] { new ConditionIsEveryone(), new ConditionIsFirstTimeBuyer(), new ConditionIsRegisteredUser() }.ToList(); var catalogConditionBlock = new BlockCatalogCondition(); catalogConditionBlock.AvailableChildren = new DynamicExpression[] { new ConditionEntryIs(), new ConditionCurrencyIs(), new ConditionCodeContains(), new ConditionCategoryIs(), }.ToList(); var cartConditionBlock = new BlockCartCondition(); cartConditionBlock.AvailableChildren = new DynamicExpression[] { new ConditionCartSubtotalLeast(), new ConditionAtNumItemsInCart(), new ConditionAtNumItemsInCategoryAreInCart(), new ConditionAtNumItemsOfEntryAreInCart() }.ToList(); var rewardBlock = new RewardBlock(); rewardBlock.AvailableChildren = new DynamicExpression[] { new RewardCartGetOfAbsSubtotal(), new RewardItemGetFreeNumItemOfProduct(), new RewardItemGetOfAbs(), new RewardItemGetOfAbsForNum(), new RewardItemGetOfRel(), new RewardItemGetOfRelForNum(), new RewardItemGiftNumItem(), new RewardShippingGetOfAbsShippingMethod(), new RewardShippingGetOfRelShippingMethod ()}.ToList(); var rootBlocks = new DynamicExpression[] { customerConditionBlock, catalogConditionBlock, cartConditionBlock, rewardBlock }.ToList(); var retVal = new PromoDynamicExpressionTree() { Children = rootBlocks, }; return retVal; }
public static webModel.Promotion ToWebModel(this coreModel.Promotion promotion, PromoDynamicExpressionTree etalonEpressionTree = null) { var retVal = new webModel.Promotion(); retVal.InjectFrom(promotion); retVal.Coupons = promotion.Coupons; retVal.Type = promotion.GetType().Name; var dynamicPromotion = promotion as DynamicPromotion; if (dynamicPromotion != null && etalonEpressionTree != null) { retVal.DynamicExpression = etalonEpressionTree; if (!String.IsNullOrEmpty(dynamicPromotion.PredicateVisualTreeSerialized)) { retVal.DynamicExpression = JsonConvert.DeserializeObject<PromoDynamicExpressionTree>(dynamicPromotion.PredicateVisualTreeSerialized); //Copy available elements from etalon because they not persisted var sourceBlocks = ((DynamicExpression)etalonEpressionTree).Traverse(x => x.Children); var targetBlocks = ((DynamicExpression)retVal.DynamicExpression).Traverse(x => x.Children); foreach (var sourceBlock in sourceBlocks) { foreach(var targetBlock in targetBlocks.Where(x => x.Id == sourceBlock.Id)) { targetBlock.AvailableChildren = sourceBlock.AvailableChildren; } } //copy available elements from etalon retVal.DynamicExpression.AvailableChildren = etalonEpressionTree.AvailableChildren; } } return retVal; }