protected void FillCampaignWithPushedProducts(Campaign campaign, dynamic campaignData)
        {
            if (campaignData.pushedProductsRecords.Count > 0)
            {
                var pushedProducts = new List<Record>();

                foreach (var recordData in campaignData.pushedProductsRecords)
                {
                    var record = new Record((string)recordData.id);
                    record.SetFieldValues(recordData.record.AsDictionary());
                    pushedProducts.Add(record);
                }

                campaign.AddPushedProducts(pushedProducts);
            }
        }
        protected void FillCampaignWithFeedback(Campaign campaign, dynamic campaignData)
        {
            if (campaignData.feedbackTexts.Count > 0)
            {
                var feedback = new Dictionary<string, string>();

                foreach (var feedbackData in campaignData.feedbackTexts)
                {
                    bool html = (bool)feedbackData.html;
                    string text = (string)feedbackData.text;
                    if (!html)
                    {
                        text = HttpUtility.HtmlAttributeEncode(text);
                    }

                    string label = feedbackData.label.ToString();
                    if (label != "")
                        feedback[label] = text;

                    string id = feedbackData.id.ToString();
                    if (id != "")
                        feedback[id] = text;
                }

                campaign.AddFeedback(feedback);
            }
        }
        protected virtual void FillCampaignWithAdvisorData(Campaign campaign, dynamic campaignData)
        {
            var activeQuestions = new List<AdvisorQuestion>();

            // The active questions can still be empty if we have already moved down the whole question tree (while the search query still fulfills the campaign condition)
            foreach (var questionData in campaignData.activeQuestions)
            {
                activeQuestions.Add(LoadAdvisorQuestion(questionData));
            }

            campaign.AddActiveQuestions(activeQuestions);

            // Fetch advisor tree if it exists
            var advisorTree = new List<AdvisorQuestion>();

            foreach (var questionData in campaignData.activeQuestions)
            {
                activeQuestions.Add(LoadAdvisorQuestion(questionData, true));
            }

            campaign.AddToAdvisorTree(advisorTree);
        }
 protected void FillCampaignObject(Campaign campaign, dynamic campaignData)
 {
     FillCampaignWithFeedback(campaign, campaignData);
     FillCampaignWithPushedProducts(campaign, campaignData);
 }
        protected void FillCampaignObject(Campaign campaign, dynamic campaignData)
        {
            switch ((string)campaignData.flavour)
            {
                case "FEEDBACK":
                    FillCampaignWithFeedback(campaign, campaignData);
                    FillCampaignWithPushedProducts(campaign, campaignData);
                    break;

                case "ADVISOR":
                    FillCampaignWithAdvisorData(campaign, campaignData);
                    break;
            }
        }