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);
        }
Example #2
0
        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);
        }