Example #1
0
        private static void LoadTextIntoSection(XmlElement e, ref QuestionnaireSection section)
        {
            QuestionnaireText text = new QuestionnaireText();

            text.ActionId = GetNodeValue(e, "ActionId");

            QuestionnaireElement x = text;

            LoadTextVersionsIntoElement(e, ref x);

            section.Elements.Add(text);
        }
Example #2
0
        private QuestionnaireText AddTextToSection(QuestionnaireSection section, string actionId, string text, Platform platform, Instance instance)
        {
            QuestionnaireText txt = new QuestionnaireText()
            {
                ActionId       = actionId,
                OrderInSection = section.Elements.Count + 1,
                Section        = section,
            };

            txt.TextVersions.Add(new QuestionnaireElementTextVersion()
            {
                SupportedInstances = instance, SupportedPlatforms = platform, Text = text
            });

            section.Elements.Add(txt);

            return(txt);
        }
        /// <summary>
        /// Adds a full Pro Instrument to the database, including all related objects such as ProItem and ProOption
        /// </summary>
        /// <param name="questionnaire">The <see cref="Questionnaire"/> to add to the database</param>
        public void AddFullQuestionnaire(Questionnaire questionnaire)
        {
            if (this.context.QuestionnaireConcepts.Any(pc => pc.Id == questionnaire.Concept.Id || pc.Name.Equals(questionnaire.Concept.Name, StringComparison.CurrentCultureIgnoreCase)))
            {
                questionnaire.Concept = this.context.QuestionnaireConcepts.Where(pc => pc.Id == questionnaire.Concept.Id || pc.Name.Equals(questionnaire.Concept.Name, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
                this.context.Entry(questionnaire.Concept).State = System.Data.Entity.EntityState.Modified;
            }
            else
            {
                this.context.QuestionnaireConcepts.Add(questionnaire.Concept);
            }

            this.context.Questionnaires.Add(questionnaire);

            foreach (QuestionnaireIntroductionMessage m in questionnaire.IntroductionMessages)
            {
                m.Questionnaire = questionnaire;
                this.context.QuestionnaireIntroductionMessages.Add(m);
            }

            foreach (QuestionnaireDescription desc in questionnaire.Descriptions)
            {
                desc.Questionnaire = questionnaire;
                this.context.QuestionnaireDescriptions.Add(desc);
            }

            if (questionnaire.GetType() == typeof(ProInstrument))
            {
                ProInstrument inst = (ProInstrument)questionnaire;
                foreach (ProDomain dom in inst.Domains)
                {
                    dom.Instrument = questionnaire;
                    this.context.ProDomains.Add(dom);
                    foreach (ProDomainResultRange range in dom.ResultRanges)
                    {
                        range.Domain = dom;
                        this.context.ProDomainResultRanges.Add(range);
                    }
                }
            }

            int sectionOrderCount = 0;

            foreach (QuestionnaireSection sec in questionnaire.Sections)
            {
                sec.OrderInInstrument = sectionOrderCount++;
                int itemOrderCount = 0;
                sec.Questionnaire = questionnaire;
                this.context.QuestionnaireSections.Add(sec);
                foreach (QuestionnaireSectionInstruction instruction in sec.Instructions)
                {
                    instruction.Section = sec;
                    this.context.QuestionnaireSectionInstructions.Add(instruction);
                }

                foreach (QuestionnaireElement element in sec.Elements)
                {
                    element.OrderInSection = itemOrderCount++;
                    foreach (QuestionnaireElementTextVersion version in element.TextVersions)
                    {
                        version.QuestionnaireElement = element;
                        this.context.QuestionnaireElementTextVersions.Add(version);
                    }

                    if (element.GetType() == typeof(QuestionnaireText))
                    {
                        QuestionnaireText text = (QuestionnaireText)element;
                        text.Section = sec;
                        this.context.QuestionnaireElements.Add(text);
                    }
                    else if (element.GetType() == typeof(QuestionnaireItem))
                    {
                        QuestionnaireItem item = (QuestionnaireItem)element;
                        item.Section = sec;
                        this.context.QuestionnaireElements.Add(item);
                        foreach (QuestionnaireItemInstruction instruction in item.Instructions)
                        {
                            instruction.Item = item;
                            this.context.QuestionnaireItemInstructions.Add(instruction);
                        }

                        int groupOrderCount = 0;
                        foreach (QuestionnaireItemOptionGroup group in item.OptionGroups)
                        {
                            foreach (QuestionnaireItemOptionGroupTextVersion version in group.TextVersions)
                            {
                                version.QuestionnaireItemOptionGroup = group;
                                this.context.QuestionnaireItemOptionGroupTextVersions.Add(version);
                            }

                            group.OrderInItem = groupOrderCount++;
                            group.Item        = item;
                            this.context.QuestionnaireItemOptionGroups.Add(group);
                            int optionOrderCount = 0;
                            foreach (QuestionnaireItemOption o in group.Options)
                            {
                                o.OrderInGroup = optionOrderCount++;
                                o.Group        = group;
                                this.context.QuestionnaireItemOptions.Add(o);
                            }
                        }
                    }
                }
            }

            try
            {
                this.context.SaveChanges();

                foreach (Tag t in questionnaire.Tags)
                {
                    this.AddTagToQuestionnaireByName(t, questionnaire.Name);
                }
            }
            catch (DbEntityValidationException e)
            {
                string errorResult = string.Empty;
                foreach (var eve in e.EntityValidationErrors)
                {
                    errorResult += "Entity of type \" " + eve.Entry.Entity.GetType().Name + "\" in state \"" + eve.Entry.State + "\" has the following validation errors: \n";
                    foreach (var ve in eve.ValidationErrors)
                    {
                        errorResult += "- Property: \"" + ve.PropertyName + "\", Error: \"" + ve.ErrorMessage + "\" \n";
                    }
                }

                throw new DbEntityValidationException(errorResult, e);
            }
        }