public static webModel.Promotion ToWebModel(this Promotion promotion, PromoDynamicExpressionTree etalonEpressionTree = null) { var result = new webModel.Promotion(); result.InjectFrom(promotion); // Workaround for UI: DynamicPromotion type is hardcoded in HTML template var dynamicPromotionType = typeof(DynamicPromotion); var promotionType = promotion.GetType(); result.Type = dynamicPromotionType.IsAssignableFrom(promotionType) ? dynamicPromotionType.Name : promotionType.Name; var dynamicPromotion = promotion as DynamicPromotion; if (dynamicPromotion != null && etalonEpressionTree != null) { result.DynamicExpression = etalonEpressionTree; if (!string.IsNullOrEmpty(dynamicPromotion.PredicateVisualTreeSerialized)) { result.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)result.DynamicExpression).Traverse(x => x.Children).ToList(); 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 result.DynamicExpression.AvailableChildren = etalonEpressionTree.AvailableChildren; } } return(result); }
private PromoDynamicExpressionTree GetDynamicPromotion(object value) { PromoDynamicExpressionTree result = null; var dynamicPromotion = value as DynamicPromotion; if (dynamicPromotion?.IsTransient() == true || dynamicPromotion?.PredicateVisualTreeSerialized != null && dynamicPromotion?.PredicateSerialized != null && dynamicPromotion?.RewardsSerialized != null) { var etalonEpressionTree = _marketingExtensionManager.PromotionDynamicExpressionTree; if (etalonEpressionTree != null) { result = etalonEpressionTree; if (!string.IsNullOrEmpty(dynamicPromotion?.PredicateVisualTreeSerialized)) { result = 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)result).Traverse(x => x.Children).ToList(); 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 result.AvailableChildren = etalonEpressionTree.AvailableChildren; } } } return(result); }
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); }