Ejemplo n.º 1
0
        private static void LoadItemIntoSection(XmlElement e, ref QuestionnaireSection section)
        {
            QuestionnaireItem item = new QuestionnaireItem();

            item.ActionId    = GetNodeValue(e, "ActionId");
            item.DisplayId   = GetNodeValue(e, "DisplayId");
            item.Attributes  = QuestionnaireItemAttributes.CanSkip; //TODO
            item.ScoringNote = GetNodeValue(e, "ScoringNote");
            if (GetNodeValue(e, "BestScore") == "Highest")
            {
                item.HigherIsBetter = true;
            }
            else
            {
                item.HigherIsBetter = false;
            }
            try
            {
                item.SummaryText = GetNodeValue(e, "Summary");
            }
            catch (Exception exp)
            {
                Error = "The summary: \n doesn't exist";
                Form1.Print("The summary:  doesn't exist" + exp.ToString());
                logReport.returnError("The summary:  doesn't exist" + exp.ToString());
            }
            QuestionnaireElement x = item;

            LoadTextVersionsIntoElement(e, ref x);

            LoadOptionGroupsIntoItem(e, ref item);

            section.Elements.Add(item);
        }
Ejemplo n.º 2
0
        private int DiveV1(int index, int level, List <Questionnaire.ItemComponent> itemComponents, QuestionnaireItem[] questionnaireItems)
        {
            int currentIndex = index;

            Questionnaire.ItemComponent item = null;
            for (; currentIndex < questionnaireItems.Length; currentIndex++)
            {
                QuestionnaireItem questionnaireItem = questionnaireItems[currentIndex];
                _logger.LogDebug($"Questionnaire Item: {questionnaireItem.LinkId} - {questionnaireItem.Type} - {questionnaireItem.Text}");

                int currentLevel = questionnaireItem.LinkId.Split('.').Length - 1;
                if (currentLevel == level)
                {
                    item = CreateItemComponentV1(questionnaireItem);
                    itemComponents.Add(item);
                }
                else if (currentLevel > level)
                {
                    if (item == null)
                    {
                        throw new Exception("LinkId cannot bypass a level, i.e. jumping from 1.1 to 1.1.1.1");
                    }
                    currentIndex = DiveV1(currentIndex, currentLevel, item.Item, questionnaireItems);
                }
                else if (currentLevel < level)
                {
                    // If current level is less than the entry level then break out of loop and return from recursion level.
                    break;
                }
            }
            return(currentIndex - 1);
        }
Ejemplo n.º 3
0
    protected void vQuestionnaire_List_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            QuestionnaireItem QuestionnaireItem = (QuestionnaireItem)e.Item.DataItem;

            string Result = "";
            if (_Results.Count() > 0)
            {
                Result = _Results[e.Item.ItemIndex].Split(':')[1];
            }


            //vTitle
            Literal vTitle = (Literal)e.Item.FindControl("vTitle");
            vTitle.Text = string.Format("{0}. {1}", QuestionnaireItem.Sort.ToString(), QuestionnaireItem.Title);

            //QuestionnaireItem
            switch (QuestionnaireItem.OptionType)
            {
            case OptionType.單選:
                RadioButtonList vRadioButtonList = (RadioButtonList)e.Item.FindControl("vRadioButtonList");
                vRadioButtonList.Visible = true;

                foreach (string Option in QuestionnaireItem.Options)
                {
                    vRadioButtonList.Items.Add(new ListItem(Option, Option));
                }
                vRadioButtonList.SelectedValue = Result;
                break;

            case OptionType.多選:
                CheckBoxList vCheckBoxList = (CheckBoxList)e.Item.FindControl("vCheckBoxList");
                vCheckBoxList.Visible = true;

                foreach (string Option in QuestionnaireItem.Options)
                {
                    vCheckBoxList.Items.Add(new ListItem(Option, Option));
                }
                vCheckBoxList.SelectedValue = Result;
                break;

            case OptionType.單行文字方塊:
                Repeater vTextBoxList = (Repeater)e.Item.FindControl("vTextBoxList");
                vTextBoxList.Visible = true;

                //將單行文字方塊要 Render 的格式改成 "標題:答案",並傳給 ItemDataBound
                List <string> QAs = new List <string>();
                for (int i = 0; i < QuestionnaireItem.Options.Count(); i++)
                {
                    string Option = QuestionnaireItem.Options[i];
                    QAs.Add(string.Format("{0}:{1}", Option, (string.IsNullOrWhiteSpace(Result)) ? "" : Result.Split(',')[i]));
                }
                vTextBoxList.DataSource = QAs;
                vTextBoxList.DataBind();
                break;
            }
        }
    }
Ejemplo n.º 4
0
 private static void LoadOptionGroupsIntoItem(XmlElement i, ref QuestionnaireItem item)
 {
     foreach (XmlElement og in i.GetElementsByTagName("OptionGroup"))
     {
         QuestionnaireItemOptionGroup opgrp = new QuestionnaireItemOptionGroup();
         LoadOptionGroup(og, ref opgrp);
     }
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Filters an items TextVersion instances
 /// </summary>
 /// <param name="item">The item to filter in</param>
 /// <param name="instance">The instance to filter on</param>
 /// <param name="platform">The platform to filter on</param>
 /// <param name="audience">The audience to filter on</param>
 internal static void Filter(ref QuestionnaireItem item, Instance instance, Platform platform, UserTypes audience)
 {
     item.TextVersions = item.TextVersions.Where(i => i.SupportsInstance(instance) && i.SupportsPlatform(platform) && i.SupportsAudience(audience)).ToList();
     item.Instructions = item.Instructions.Where(i => i.SupportsInstance(instance) && i.SupportsPlatform(platform) && i.SupportsAudience(audience)).ToList();
     if (item.OptionGroups != null)
     {
         foreach (QuestionnaireItemOptionGroup group in item.OptionGroups)
         {
             group.TextVersions = group.TextVersions.Where(i => i.SupportsInstance(instance) && i.SupportsPlatform(platform) && i.SupportsAudience(audience)).ToList();
         }
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Updates all the text inside the Questionnaire with the proper replacement values.
        /// Includes, Instructions, TextVersions, DefaultValues, etc.
        /// </summary>
        /// <param name="q">The questionnaire to update</param>
        /// <param name="objectsForParsing">Any objects that are available should be passed on as they may be used as part of the parsing process.</param>
        public void UpdateQuestionnaireTexts(Questionnaire q, Dictionary <ReplaceableObjectKeys, object> objectsForParsing)
        {
            ReplaceableRetriever retriever            = new ReplaceableRetriever(this.ahm, objectsForParsing);
            TextParser <ReplaceableObjectKeys> parser = new TextParser <ReplaceableObjectKeys>();

            foreach (QuestionnaireSection section in q.Sections)
            {
                foreach (TextVersion v in section.Instructions)
                {
                    v.Text = parser.ParseMessage(v.Text, retriever);
                }

                foreach (QuestionnaireElement element in section.Elements)
                {
                    foreach (TextVersion v in element.TextVersions)
                    {
                        v.Text = parser.ParseMessage(v.Text, retriever);
                    }

                    if (element.GetType() == typeof(QuestionnaireItem))
                    {
                        QuestionnaireItem item = (QuestionnaireItem)element;
                        foreach (TextVersion v in item.TextVersions)
                        {
                            v.Text = parser.ParseMessage(v.Text, retriever);
                        }

                        item.SummaryText = parser.ParseMessage(item.SummaryText, retriever);
                        foreach (QuestionnaireItemOptionGroup group in item.OptionGroups)
                        {
                            foreach (TextVersion v in group.TextVersions)
                            {
                                v.Text = parser.ParseMessage(v.Text, retriever);
                            }

                            group.DefaultValue = parser.ParseMessage(group.DefaultValue, retriever);
                            foreach (QuestionnaireItemOption option in group.Options)
                            {
                                option.DefaultValue = parser.ParseMessage(option.DefaultValue, retriever);
                                option.Text         = parser.ParseMessage(option.Text, retriever);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Filtes the different text versions inside a Questionnaire and it's sections and items down the line.
 /// </summary>
 /// <param name="q">The questionnaire to modify</param>
 /// <param name="instance">The instance to filter on</param>
 /// <param name="platform">The platform to filter on</param>
 /// <param name="audience">The audience to filter on</param>
 public static void Filter(ref Questionnaire q, Instance instance, Platform platform, UserTypes audience)
 {
     q.IntroductionMessages = q.IntroductionMessages.Where(i => i.SupportsInstance(instance) && i.SupportsPlatform(platform) && i.SupportsAudience(audience)).ToList();
     q.Descriptions         = q.Descriptions.Where(i => i.SupportsInstance(instance) && i.SupportsPlatform(platform) && i.SupportsAudience(audience)).ToList();
     foreach (QuestionnaireSection s in q.Sections)
     {
         s.Instructions = s.Instructions.Where(i => i.SupportsInstance(instance) && i.SupportsPlatform(platform) && i.SupportsAudience(audience)).ToList();
         foreach (QuestionnaireElement e in s.Elements)
         {
             e.TextVersions = e.TextVersions.Where(i => i.SupportsInstance(instance) && i.SupportsPlatform(platform) && i.SupportsAudience(audience)).ToList();
             if (e.GetType() == typeof(QuestionnaireItem))
             {
                 QuestionnaireItem item = (QuestionnaireItem)e;
                 Utilities.Filter(ref item, instance, platform, audience);
             }
         }
     }
 }
Ejemplo n.º 8
0
        private static void LoadItemIntoSection(XmlElement e, ref QuestionnaireSection section)
        {
            QuestionnaireItem item = new QuestionnaireItem();

            item.ActionId   = GetNodeValue(e, "ActionId");
            item.DisplayId  = GetNodeValue(e, "DisplayId");
            item.Attributes = QuestionnaireItemAttributes.CanSkip; //TODO

            item.SummaryText = GetNodeValue(e, "Summary");

            QuestionnaireElement x = item;

            LoadTextVersionsIntoElement(e, ref x);

            LoadOptionGroupsIntoItem(e, ref item);

            section.Elements.Add(item);
        }
Ejemplo n.º 9
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            _Argument = LeftHand.Gadget.Encoder.DictionaryDecoder(Server.UrlDecode(Request.QueryString.ToString()));
        }

        switch (_Argument["Mode"])
        {
        case "Add":
            _QuestionnaireItem = new QuestionnaireItem("", "", OptionType.單選);
            break;

        case "Edit":
            _QuestionnaireItem = QuestionnaireItemManager.GetById(_Argument["Id"]);
            break;
        }
    }
Ejemplo n.º 10
0
        private QuestionnaireItem AddItemToSection(QuestionnaireSection section, string actionId, string displayId, string text, Platform platform, Instance instance)
        {
            QuestionnaireItem item = new QuestionnaireItem()
            {
                ActionId       = actionId,
                DisplayId      = displayId,
                OrderInSection = section.Elements.Count + 1,
                Section        = section,
            };

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

            return(item);
        }
        /// <summary>
        /// Gets the full questionniare. Only the Id or the name has to be provided
        /// </summary>
        /// <param name="id">The Id of the questionnaire. If null or empty is not used</param>
        /// <param name="name">The name of the questionniare. If null or empty is not used</param>
        /// <returns>The questionniare requested</returns>
        private Questionnaire GetFullQuestionnaire(int?id = null, string name = null)
        {
            Questionnaire result = this.QuestionnaireQuery(id, name).SingleOrDefault();

            if (result == null)
            {
                return(null);
            }

            if (result.GetType() == typeof(ProInstrument))
            {
                ProInstrument ins = (ProInstrument)result;
                ins.Domains = this.context.ProDomains.Where(d => d.Instrument.Id == result.Id).Include(d => d.ResultRanges).ToList();
            }

            result.Tags = this.context.QuestionnaireTags.Where(q => q.QuestionnaireName == result.Name).Select(q => q.Tag).ToList();

            result.Sections = result.Sections.OrderBy(p => p.OrderInInstrument).ToList();
            foreach (QuestionnaireSection section in result.Sections)
            {
                section.Instructions.Count();
                section.Elements = section.Elements.OrderBy(e => e.OrderInSection).ToList();
                foreach (QuestionnaireElement el in section.Elements)
                {
                    if (el.GetType() == typeof(QuestionnaireItem))
                    {
                        QuestionnaireItem item = (QuestionnaireItem)el;
                        item.OptionGroups = item.OptionGroups.OrderBy(o => o.OrderInItem).ToList();
                        item.OptionGroups = this.context.QuestionnaireItemOptionGroups.Where(og => og.Item.Id == item.Id).Include(og => og.Options).ToList();
                        foreach (QuestionnaireItemOptionGroup g in item.OptionGroups)
                        {
                            g.TextVersions = this.context.QuestionnaireItemOptionGroupTextVersions.Where(tv => tv.QuestionnaireItemOptionGroup.Id == g.Id).ToList();
                            g.Options      = g.Options.OrderBy(o => o.OrderInGroup).ToList();
                        }

                        item.Instructions = this.context.QuestionnaireItemInstructions.Where(i => i.Item.Id == item.Id).ToList();
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 12
0
        private QuestionnaireItemOptionGroup AddOptionGroupToItem(QuestionnaireItem item, MyDictionary options, int rangeStep, QuestionnaireResponseType type)
        {
            QuestionnaireItemOptionGroup qog = new QuestionnaireItemOptionGroup();

            qog.OrderInItem  = item.OptionGroups.Count + 1;
            qog.RangeStep    = rangeStep;
            qog.ResponseType = type;
            foreach (int v in options.Keys)
            {
                qog.Options.Add(new QuestionnaireItemOption()
                {
                    Text = options[v].Text, Value = v, Group = qog, Action = options[v].Action
                });
            }

            qog.Item = item;

            item.OptionGroups.Add(qog);

            return(qog);
        }
Ejemplo n.º 13
0
    protected void vQuestionnaireItem_List_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            QuestionnaireItem QuestionnaireItem = (QuestionnaireItem)e.Item.DataItem;

            //vTitle
            Label vTitle = (Label)e.Item.FindControl("vTitle");
            vTitle.Text = QuestionnaireItem.Title;

            //vShortTitle
            Label vShortTitle = (Label)e.Item.FindControl("vShortTitle");
            vShortTitle.Text = string.Format("( {0} )", QuestionnaireItem.ShortTitle);

            //vOptionType
            Label vOptionType = (Label)e.Item.FindControl("vOptionType");
            vOptionType.Text = string.Format("類型:{0}", QuestionnaireItem.OptionType.ToString());

            //vOption_List
            Repeater vOption_List = (Repeater)e.Item.FindControl("vOption_List");
            vOption_List.DataSource = QuestionnaireItem.Options;
            vOption_List.DataBind();

            //Sort
            Literal vSort = (Literal)e.Item.FindControl("vSort");
            vSort.Text = QuestionnaireItem.Sort.ToString();

            //Edit
            Dictionary <string, string> Argument = new Dictionary <string, string>();
            Argument.Add("Mode", "Edit");
            Argument.Add("Id", QuestionnaireItem.Id);

            HyperLink vEdit = (HyperLink)e.Item.FindControl("vEdit");
            vEdit.NavigateUrl = "/Order/Manager/QuestionnaireItem_Modify.aspx?" + Server.UrlEncode(LeftHand.Gadget.Encoder.DictionaryEncoder(Argument));
        }
    }
Ejemplo n.º 14
0
        private IList <Questionnaire> GetQuestionnairesFromFlatFileFormatV1(string path)
        {
            if (string.IsNullOrWhiteSpace(path))
            {
                throw new ArgumentNullException(nameof(path));
            }
            if (!File.Exists(path))
            {
                throw new FileNotFoundException($"File not found: '{path}'", path);
            }

            IList <Questionnaire> questionnaires = new List <Questionnaire>();

            var engine = new MasterDetailEngine <QuestionnaireHeader, QuestionnaireItem>(new MasterDetailSelector(RecordSelector))
            {
                Encoding = new UTF8Encoding()
            };

            MasterDetails <QuestionnaireHeader, QuestionnaireItem>[] masterDetails = engine.ReadFile(path);
            foreach (MasterDetails <QuestionnaireHeader, QuestionnaireItem> masterDetail in masterDetails)
            {
                _logger.LogDebug($"Questionnaire: {masterDetail.Master.Name} - {masterDetail.Master.Title}");

                Questionnaire questionnaire = new Questionnaire();

                questionnaire.Meta = new Meta
                {
                    Profile = new string[] { "http://ehelse.no/fhir/StructureDefinition/sdf-Questionnaire" }
                };

                questionnaire.Id          = string.IsNullOrWhiteSpace(masterDetail.Master.Id) ? null : masterDetail.Master.Id;
                questionnaire.Url         = string.IsNullOrWhiteSpace(masterDetail.Master.Url) ? null : masterDetail.Master.Url;
                questionnaire.Version     = string.IsNullOrWhiteSpace(masterDetail.Master.Version) ? null : masterDetail.Master.Version;
                questionnaire.Name        = string.IsNullOrWhiteSpace(masterDetail.Master.Name) ? null : masterDetail.Master.Name;
                questionnaire.Title       = string.IsNullOrWhiteSpace(masterDetail.Master.Title) ? null : masterDetail.Master.Title;
                questionnaire.Status      = string.IsNullOrWhiteSpace(masterDetail.Master.Status) ? null : EnumUtility.ParseLiteral <PublicationStatus>(masterDetail.Master.Status);
                questionnaire.Date        = string.IsNullOrWhiteSpace(masterDetail.Master.Date) ? null : masterDetail.Master.Date;
                questionnaire.Publisher   = string.IsNullOrWhiteSpace(masterDetail.Master.Publisher) ? null : masterDetail.Master.Publisher;
                questionnaire.Description = string.IsNullOrWhiteSpace(masterDetail.Master.Description) ? null : new Markdown(masterDetail.Master.Description);
                questionnaire.Purpose     = string.IsNullOrWhiteSpace(masterDetail.Master.Purpose) ? null : new Markdown(masterDetail.Master.Purpose);
                questionnaire.Contact     = string.IsNullOrWhiteSpace(masterDetail.Master.Contact) ? null : new List <ContactDetail> {
                    new ContactDetail {
                        Telecom = new List <ContactPoint> {
                            new ContactPoint {
                                System = ContactPoint.ContactPointSystem.Url, Value = masterDetail.Master.Contact
                            }
                        }
                    }
                };

                if (!string.IsNullOrWhiteSpace(masterDetail.Master.Language))
                {
                    questionnaire.Language = masterDetail.Master.Language;
                    // TODO: Vi trenger definere Visningsnavn for språket, eksempelvis: Norsk (bokmål), osv.
                    questionnaire.Meta.Tag.Add(new Coding("urn:ietf:bcp:47", questionnaire.Language));
                }

                IList <string> linkIds           = new List <string>();
                Questionnaire.ItemComponent item = null;
                for (int i = 0; i < masterDetail.Details.Length; i++)
                {
                    QuestionnaireItem questionnaireItem = masterDetail.Details[i];

                    if (linkIds.IndexOf(questionnaireItem.LinkId) > 0)
                    {
                        throw new DuplicateLinkIdException(questionnaireItem.LinkId);
                    }

                    _logger.LogDebug($"Questionnaire Item: {questionnaireItem.LinkId} - {questionnaireItem.Type} - {questionnaireItem.Text}");

                    int level = questionnaireItem.LinkId.Split('.').Length - 1;
                    if (level > 0)
                    {
                        i = DiveV1(i, level, item.Item, masterDetail.Details);
                    }
                    else
                    {
                        item = CreateItemComponentV1(questionnaireItem);
                        questionnaire.Item.Add(item);
                    }
                }

                questionnaires.Add(questionnaire);
            }

            return(questionnaires);
        }
 public static void FillResponse(QuestionnaireItem i)
 {
     if (i is ChoiceQuestion)
     {
         var cq = (ChoiceQuestion)i;
         cq.Choices[0].IsSelected = true;
         if (cq.Choices[0].ContingencyQuestion != null)
         {
             FillResponse(cq.Choices[0].ContingencyQuestion);
         }
     }
     else if (i is DateQuestion)
     {
         ((DateQuestion)i).ResponseValue = DateTime.Now;
     }
     else if (i is IntegerQuestion)
     {
         ((IntegerQuestion)i).ResponseValue = 100;
     }
     else if (i is MatrixQuestion)
     {
         var q       = i as MatrixQuestion;
         var columns = q.ColumnSection;
         //Create response of each column
         foreach (var j in columns.Children)
         {
             FillResponse(j);
         }
         //Create response of each row question
         foreach (var rq in q.Children)
         {
             columns.CreateOrUpdateResponseValue();
             rq.ResponseValue = columns.ResponseValue;
         }
         //q.CreateResponseValue();
     }
     else if (i is MoneyQuestion)
     {
         ((MoneyQuestion)i).ResponseValue = 1234.56m;
     }
     else if (i is RealNumberQuestion)
     {
         ((RealNumberQuestion)i).ResponseValue = 11111.1234d;
     }
     else if (i is TextQuestion)
     {
         ((TextQuestion)i).ResponseValue = "Text response " + DateTime.Now.ToUniversalTime();
     }
     else if (i is BasicQuestionSection)
     {
         var q = i as BasicQuestionSection;
         foreach (var rq in q.Children)
         {
             FillResponse(rq);
         }
     }
     else if (i is GeneralItemSection)
     {
         var q = i as GeneralItemSection;
         foreach (var rq in q.Children)
         {
             FillResponse(rq);
         }
     }
 }
Ejemplo n.º 16
0
        public void AddFullProInstrumentTest()
        {
            ProInstrument pro = new ProInstrument();

            pro.Name     = "OES2";
            pro.Status   = QuestionnaireStatus.Indevelopment;
            pro.IsActive = true;

            pro.Tags.Add(new Tag()
            {
                TagName = "Gender", Value = "Male"
            });
            pro.Tags.Add(new Tag()
            {
                TagName = "Gender", Value = "Female"
            });

            {
                ProDomain d1 = new ProDomain();
                d1.Name         = "Total Domain";
                d1.Audience     = PCHI.Model.Users.UserTypes.Patient;
                d1.Description  = "Hello";
                d1.ScoreFormula = "{OES.1} + {OES.2}";
                {
                    ProDomainResultRange r1 = new ProDomainResultRange();
                    r1.Start   = 0;
                    r1.End     = 10;
                    r1.Meaning = "Great";
                    d1.ResultRanges.Add(r1);
                }
                {
                    ProDomainResultRange r2 = new ProDomainResultRange();
                    r2.Start   = 11;
                    r2.End     = 20;
                    r2.Meaning = "Oops";
                    d1.ResultRanges.Add(r2);
                }
                pro.Domains.Add(d1);
            }

            {
                ProDomain d2 = new ProDomain();
                d2.Name         = "Sleep Domain";
                d2.Audience     = PCHI.Model.Users.UserTypes.Patient;
                d2.Description  = "Hello";
                d2.ScoreFormula = "{OES.1} + {OES.2}";
                {
                    ProDomainResultRange r1 = new ProDomainResultRange();
                    r1.Start   = 0;
                    r1.End     = 10;
                    r1.Meaning = "Great";
                    d2.ResultRanges.Add(r1);
                }
                {
                    ProDomainResultRange r2 = new ProDomainResultRange();
                    r2.Start   = 11;
                    r2.End     = 20;
                    r2.Meaning = "Oops";
                    d2.ResultRanges.Add(r2);
                }
                pro.Domains.Add(d2);
            }

            pro.Concept = new QuestionnaireConcept()
            {
                Name = "Elbow", Description = "Tests Elbow Condition"
            };
            {
                QuestionnaireSection section = new QuestionnaireSection()
                {
                    OrderInInstrument = 1, Questionnaire = pro
                };
                pro.Sections.Add(section);
                AddTextToSection(section, "Intro1", @"", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                AddTextToSection(section, "Intro2", @"Please make sure you answer all the questions that follow by ticking one option for every question.", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
            }

            {
                //Dictionary<int, string> options = null;
                //var options;// = new MyDictionary();

                QuestionnaireSection section = new QuestionnaireSection()
                {
                    OrderInInstrument = 2, Questionnaire = pro
                };
                pro.Sections.Add(section);
                {
                    // same options apply to items 1 to 4
                    MyDictionary options = new MyDictionary()
                    {
                        { 4, new ValuesOption()
                          {
                              Action = "", Text = "No difficulty"
                          } }, { 3, new ValuesOption()
                                 {
                                     Action = "", Text = "A little bit of difficulty"
                                 } }, { 2, new ValuesOption()
                                        {
                                            Action = "", Text = "Moderate difficulty"
                                        } }, { 1, new ValuesOption()
                                               {
                                                   Action = "", Text = "Extreme difficulty"
                                               } }, { 0, new ValuesOption()
                                                      {
                                                          Action = "", Text = "Impossible to do"
                                                      } }
                    };

                    QuestionnaireItem qi = AddItemToSection(section, "OES.1", "1.", @"<strong>During the past 4 weeks</strong>, have you had difficulty lifting things in your home, such as putting out the rubbish, <u>because of your elbow problem</u>?", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.List);

                    qi = AddItemToSection(section, "OES.2", "2.", @"<strong>During the past 4 weeks</strong>, have you had difficulty lifting things in your home, such as putting out the rubbish, <u>because of your elbow problem</u>?", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.List);

                    qi = AddItemToSection(section, "OES.3", "3.", @"<strong>During the past 4 weeks</strong>, have you had difficulty washing yourself all over, <u>because of your elbow problem</u>?", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.List);

                    qi = AddItemToSection(section, "OES.4", "4.", @"<strong>During the past 4 weeks</strong>, have you had difficulty dressing yourself, <u>because of your elbow problem</u>?", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.List);

                    qi      = AddItemToSection(section, "OES.5", "5.", @"How difficult is for you to get up and down off the floor/gound?", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "", Text = "Extreme difficulty"
                          } }, { 100, new ValuesOption()
                                 {
                                     Action = "", Text = "No difficulty at all"
                                 } }
                    };
                    AddOptionGroupToItem(qi, options, 10, QuestionnaireResponseType.Range);

                    qi      = AddItemToSection(section, "OES.6", "6.", @"How much trouble do you have with sexual activity because of your hip?", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "MakeItemNotApplicable", Text = "This is not relevant to me"
                          } }
                    };
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.ConditionalItem);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "", Text = "Several trouble"
                          } }, { 100, new ValuesOption()
                                 {
                                     Action = "", Text = "No trouble at all"
                                 } }
                    };
                    AddOptionGroupToItem(qi, options, 10, QuestionnaireResponseType.Range);

                    qi      = AddItemToSection(section, "OES.7", "7.", @"How much trouble do you have pushing, pulling, lifting or carrying heavy objects at work?", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "MakeItemNotApplicable", Text = "I do not do these actions in my activities"
                          } }
                    };
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.ConditionalItem);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "", Text = "Several trouble"
                          } }, { 100, new ValuesOption()
                                 {
                                     Action = "", Text = "No trouble at all"
                                 } }
                    };
                    AddOptionGroupToItem(qi, options, 10, QuestionnaireResponseType.Range);

                    qi      = AddItemToSection(section, "OES.8", "8.", @"How concern are you about cutting/changing directions during your sport or recreational activities?", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "MakeItemNotApplicable", Text = "I do not do this action in my activities"
                          } }
                    };
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.ConditionalItem);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "", Text = "Extremly concerned"
                          } }, { 100, new ValuesOption()
                                 {
                                     Action = "", Text = "Not concerned at all"
                                 } }
                    };
                    AddOptionGroupToItem(qi, options, 10, QuestionnaireResponseType.Range);

                    qi      = AddItemToSection(section, "OES.9", "9.", @"Please indicate the sport or instrument which is most important to you:", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "", Text = ""
                          } }
                    };
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.Text);

                    qi = AddItemToSection(section, "OES.10", "10.", @"Enter your comments below:", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.Text);

                    //Part to add the definition for the body control
                    qi      = AddItemToSection(section, "OES.11", "11.", @"Select the parts of your body with some kind of mal functioning:", Platform.Classic | Platform.Chat, Instance.Baseline | Instance.Followup);
                    options = new MyDictionary()
                    {
                        { 0, new ValuesOption()
                          {
                              Action = "", Text = "Burning"
                          } }, { 1, new ValuesOption()
                                 {
                                     Action = "", Text = "Numbness"
                                 } }, { 2, new ValuesOption()
                                        {
                                            Action = "", Text = "Pins-Needles"
                                        } }, { 3, new ValuesOption()
                                               {
                                                   Action = "", Text = "Stabbing"
                                               } }, { 4, new ValuesOption()
                                                      {
                                                          Action = "", Text = "Ache"
                                                      } }
                    };
                    AddOptionGroupToItem(qi, options, 0, QuestionnaireResponseType.MultiSelect);

                    //Optiongroup for each body part

                    /*
                     * qiog1.OrderInItem = 1;
                     * {
                     *  qiog1.Options.Add(new QuestionnaireItemOption() { Text = "None", Value = 0, Group = qiog1 });
                     *  qiog1.Options.Add(new QuestionnaireItemOption() { Text = "Mild", Value = 1, Group = qiog1 });
                     *  qiog1.Options.Add(new QuestionnaireItemOption() { Text = "Moderate", Value = 2, Group = qiog1 });
                     *  qiog1.Options.Add(new QuestionnaireItemOption() { Text = "Severe", Value = 3, Group = qiog1 });
                     *  qiog1.Options.Add(new QuestionnaireItemOption() { Text = "Unbearable", Value = 4, Group = qiog1 });
                     *  qiog1.Item = q1;
                     * }
                     *
                     * q1.OptionGroups.Add(qiog1);
                     * section.Elements.Add(q1);
                     * q1.Section = section;
                     * */
                }
            }

            {
                QuestionnaireSection section = new QuestionnaireSection()
                {
                    OrderInInstrument = 3, Questionnaire = pro
                };
                pro.Sections.Add(section);
                AddTextToSection(section, "Footer1", @"Thank you for answering. You are done now and the results will be reported to your physician.", Platform.Classic, Instance.Baseline | Instance.Followup);
                AddTextToSection(section, "Footer1", @"Thank you for answering. You are done now and I will evaluate the results as soon as possible.", Platform.Chat, Instance.Baseline | Instance.Followup);
            }

            new AccessHandlerManager().QuestionnaireAccessHandler.AddFullQuestionnaire(pro);
        }
Ejemplo n.º 17
0
        private static Questionnaire.ItemComponent CreateItemComponentV1(QuestionnaireItem item)
        {
            Questionnaire.QuestionnaireItemType?itemType = EnumUtility.ParseLiteral <Questionnaire.QuestionnaireItemType>(item.Type);
            if (!itemType.HasValue)
            {
                throw new Exception($"QuestionnaireItemType at question with linkId: {item.LinkId} is not conforming to any valid literals. QuestionnaireItemType: {item.Type}");
            }

            Questionnaire.ItemComponent itemComponent = new Questionnaire.ItemComponent
            {
                Type = itemType,
            };

            itemComponent.LinkId = string.IsNullOrWhiteSpace(item.LinkId) ? null : item.LinkId;
            itemComponent.Prefix = string.IsNullOrWhiteSpace(item.Prefix) ? null : item.Prefix;
            itemComponent.Text   = string.IsNullOrWhiteSpace(item.Text) ? null : item.Text;
            if (!string.IsNullOrWhiteSpace(item.EnableWhen))
            {
                itemComponent.EnableWhen = ParseEnableWhen(item.EnableWhen).ToList();
                // TODO: Defaults to 'any' in the first iteration of "migrate to R4".
                itemComponent.EnableBehavior = Questionnaire.EnableWhenBehavior.Any;
            }

            if (itemType != Questionnaire.QuestionnaireItemType.Group && itemType != Questionnaire.QuestionnaireItemType.Display)
            {
                itemComponent.Required = item.Required.HasValue ? item.Required : null;
                itemComponent.ReadOnly = item.ReadOnly;
                itemComponent.Initial  = string.IsNullOrEmpty(item.Initial)
                    ? null
                    : new List <Questionnaire.InitialComponent> {
                    new Questionnaire.InitialComponent {
                        Value = GetElement(itemType.Value, item.Initial)
                    }
                };
            }

            if (itemType != Questionnaire.QuestionnaireItemType.Display)
            {
                itemComponent.Repeats = item.Repeats;
            }

            if (!string.IsNullOrWhiteSpace(item.ValidationText))
            {
                itemComponent.SetStringExtension(Constants.ValidationTextUri, item.ValidationText);
            }
            if (!string.IsNullOrWhiteSpace(item.ReferenceValue) && item.ReferenceValue.IndexOf('#') == 0)
            {
                itemComponent.AnswerValueSetElement = new Canonical($"#{item.ReferenceValue.Substring(1)}");
            }
            if (!string.IsNullOrWhiteSpace(item.EntryFormat))
            {
                itemComponent.SetStringExtension(Constants.EntryFormatUri, item.EntryFormat);
            }
            if (item.MaxValue.HasValue)
            {
                itemComponent.SetIntegerExtension(Constants.MaxValueUri, item.MaxValue.Value);
            }
            if (item.MinValue.HasValue)
            {
                itemComponent.SetIntegerExtension(Constants.MinValueUri, item.MinValue.Value);
            }

            return(itemComponent);
        }
Ejemplo n.º 18
0
        public static void Initialize(QuestionnairesContext context)
        {
            context.Database.EnsureCreated();

            if (context.Questionnaires.Any())
            {
                return; //If this happens the DB already exists and has been seeded with test data
            }

            var questionnaires = new Questionnaire[]
            {
                new Questionnaire {
                    Title = "Example questionnaire", IntroText = "A questionnaire on an example topic"
                }
            };

            foreach (Questionnaire q in questionnaires)
            {
                context.Questionnaires.Add(q);
            }
            context.SaveChanges();

            var sections = new QuestionnaireSection[]
            {
                new QuestionnaireSection {
                    QuestionnaireID = 1, Title = "Section 1", IntroText = "Intro 1"
                },
                new QuestionnaireSection {
                    QuestionnaireID = 1, Title = "Section 2", IntroText = "Intro 2"
                }
            };

            foreach (QuestionnaireSection s in sections)
            {
                context.QuestionnaireSections.Add(s);
            }
            context.SaveChanges();

            var items = new QuestionnaireItem[]
            {
                new QuestionnaireItem {
                    QuestionnaireSectionID = 1, ItemText = "Item 1", ItemType = ItemTypes.Text
                },
                new QuestionnaireItem {
                    QuestionnaireSectionID = 1, ItemText = "Item 2", ItemType = ItemTypes.Value
                },
                new QuestionnaireItem {
                    QuestionnaireSectionID = 1, ItemText = "Item 3", ItemType = ItemTypes.Likert
                },

                new QuestionnaireItem {
                    QuestionnaireSectionID = 2, ItemText = "Item 4", ItemType = ItemTypes.Text
                },
                new QuestionnaireItem {
                    QuestionnaireSectionID = 2, ItemText = "Item 5", ItemType = ItemTypes.Value
                },
                new QuestionnaireItem {
                    QuestionnaireSectionID = 2, ItemText = "Item 6", ItemType = ItemTypes.Likert
                }
            };

            foreach (QuestionnaireItem i in items)
            {
                context.QuestionnaireItems.Add(i);
            }
            context.SaveChanges();
        }
Ejemplo n.º 19
0
    protected void vSendButton_Click(object sender, EventArgs e)
    {
        try
        {
            List <string> Errors = new List <string>();

            #region QuestionResult;

            string QuestionResult         = "";
            int    QuestionnaireItemIndex = 0;
            foreach (RepeaterItem RepeaterItem in this.vQuestionnaire_List.Items)
            {
                QuestionnaireItem QuestionnaireItem = _QuestionnaireItems[QuestionnaireItemIndex];

                switch (QuestionnaireItem.OptionType)
                {
                case OptionType.單選:
                    RadioButtonList vRadioButtonList = (RadioButtonList)RepeaterItem.FindControl("vRadioButtonList");

                    if (string.IsNullOrWhiteSpace(vRadioButtonList.SelectedValue))
                    {
                        Errors.Add(string.Format("請填寫第{0}題的答案", QuestionnaireItem.Sort));
                    }
                    QuestionResult += string.Format("{0}:{1}<br />", QuestionnaireItem.ShortTitle, vRadioButtonList.SelectedValue);
                    break;

                case OptionType.多選:
                    CheckBoxList vCheckBoxList = (CheckBoxList)RepeaterItem.FindControl("vCheckBoxList");

                    if (string.IsNullOrWhiteSpace(vCheckBoxList.SelectedValue))
                    {
                        Errors.Add(string.Format("請填寫第{0}題的答案", QuestionnaireItem.Sort));
                    }
                    QuestionResult += string.Format("{0}:{1}<br />", QuestionnaireItem.ShortTitle, vCheckBoxList.SelectedValue);
                    break;

                case OptionType.單行文字方塊:
                    List <string> OptionResult = new List <string>();

                    Repeater vTextBoxList = (Repeater)RepeaterItem.FindControl("vTextBoxList");
                    foreach (RepeaterItem TextBoxItem in vTextBoxList.Items)
                    {
                        string Option = ((TextBox)TextBoxItem.FindControl("vResult")).Text.Trim().Replace(" ", "");
                        if (string.IsNullOrWhiteSpace(Option))
                        {
                            Errors.Add(string.Format("請填寫第{0}題第{1}項的答案", QuestionnaireItem.Sort, TextBoxItem.ItemIndex + 1));
                        }

                        OptionResult.Add(Option);
                    }

                    QuestionResult += string.Format("{0}:{1}<br />", QuestionnaireItem.ShortTitle, string.Join(",", OptionResult));
                    break;
                }

                QuestionnaireItemIndex += 1;
            }

            #endregion

            #region vSystemRemark;

            string SystemRemark = this.vSystemRemark.Value.Trim();

            #endregion

            if (Errors.Count > 0)
            {
                throw new Exception(string.Join("\\r\\n", Errors));
            }

            _CurrentOrderItem.QuestionResult = QuestionResult;
            _CurrentOrderItem.SyatemRemark   = SystemRemark;

            OrderItemManager.Save(_CurrentOrderItem);
            ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "Message", "top.location.replace('Finish_Form.aspx');", true);
        }
        catch (Exception ex)
        {
            LeftHand.Gadget.Dialog.Alert(ex.Message);
        }
    }
        /// <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);
            }
        }
 public QuestionnaireItemViewModel(QuestionnaireItem item)
 {
     this.Id = item.Id;
     this.Key = item.Key;
     this.Value = item.Value;
 }