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); }
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); } }