Ejemplo n.º 1
0
        public async Task <int> CreateQuestionnaire(AthleteQuestionnaireDto questionnaireDto)
        {
            //Map to the Data Entity object
            var questionnaireDb = Mapper.Map <Questionnaire>(questionnaireDto);

            //1. Insert into Questionnaire table
            await _db.InsertAsync(questionnaireDb);

            if (questionnaireDb.Id <= 0)
            {
                return(0);
            }

            //2. Map to the Question entity and save into the DB
            foreach (var dtoQuestion in questionnaireDto.Questions)
            {
                var question = Mapper.Map <Question>(dtoQuestion);

                //2. Write to the DB
                await _db.InsertAsync(question);

                //3. Create relationship between the 2 tables
                var questJoin = new QuestionnaireQuestion()
                {
                    QuestionnaireId = questionnaireDb.Id,
                    QuestionId      = question.Id
                };
                await _db.InsertAsync(questJoin);
            }


            return(questionnaireDb.Id);
        }
 public QuestionnaireAppRecord(QCategory QCategory, QuestionnaireQuestion QuestionnaireQuestion, Question Question, SelectList Answers, QType QType, int Ordinal, int SubOrdinal, string Response)
 {
     this.QCategory             = QCategory;
     this.QuestionnaireQuestion = QuestionnaireQuestion;
     this.Question   = Question;
     this.Answers    = Answers;
     this.QType      = QType;
     this.Ordinal    = Ordinal;
     this.SubOrdinal = SubOrdinal;
     this.Response   = Response;
 }
Ejemplo n.º 3
0
        public ActionResult DuplicateQuestionnaireQCategory(QuestionnaireQCategory qqc)
        {
            if (qqc.Ordinal <= 0)
            {
                return(View());
            }

            var userGuid = new Guid(User.Identity.GetUserId()); //WebSecurity.GetUserId(User.Identity.Name);
            var userId   = BitConverter.ToInt32(userGuid.ToByteArray(), 0);

            var allOfOrdinal = _db.QuestionnaireQCategories.Where(a => a.Ordinal == qqc.Ordinal).OrderBy(o => o.SubOrdinal);

            allOfOrdinal = allOfOrdinal.Where(x => x.UserId == 0 || x.UserId == userId).OrderBy(o => o.SubOrdinal);
            var toDuplicate = allOfOrdinal.ToList().Last();

            /* add new QuestionnaireQCategory */
            var questionnaireqcategory = new QuestionnaireQCategory
            {
                QCategoryId     = toDuplicate.QCategoryId,
                QuestionnaireId = toDuplicate.QuestionnaireId,
                Ordinal         = toDuplicate.Ordinal,
                SubOrdinal      = toDuplicate.SubOrdinal + 1,
                UserId          = userId
            };

            _db.QuestionnaireQCategories.Add(questionnaireqcategory);
            _db.SaveChanges();

            /* get new Id */
            var newId = questionnaireqcategory.Id;

            /* get QuestionnaireQuestions to duplicate */
            var QQCI           = _db.QuestionnaireQCategories.Where(x => x.UserId == 0 && x.QCategoryId == toDuplicate.QCategoryId).FirstOrDefault().Id;
            var toDuplicateQQs = _db.QuestionnaireQuestions.Where(x => x.QQCategoryId == QQCI); //toDuplicate.QCategoryId);

            foreach (var dupQ in toDuplicateQQs)                                                //.Select(qq => new QuestionnaireQuestion()
            {
                var qq = new QuestionnaireQuestion
                {
                    QQCategoryId    = newId,
                    Ordinal         = dupQ.Ordinal,
                    QuestionnaireId = dupQ.QuestionnaireId,
                    QuestionId      = dupQ.QuestionId,
                    UserId          = userId
                };

                _db.QuestionnaireQuestions.Add(qq);
            }
            _db.SaveChanges();

            return(RedirectToAction("Edit", "Response", new { area = "", id = toDuplicate.QuestionnaireId }));
        }
Ejemplo n.º 4
0
 public QuestionTO(QuestionnaireQuestion mdo)
 {
     this.number             = mdo.Number;
     this.text               = mdo.Text;
     this.val                = mdo.Value;
     this.branchFromQuestion = mdo.BranchFromQuestion;
     this.branchCondition    = mdo.BranchCondition;
     if (mdo.Choices != null)
     {
         this.choices         = new TaggedTextArray();
         this.choices.results = new TaggedText[mdo.Choices.Count];
         for (int i = 0; i < mdo.Choices.Count; i++)
         {
             KeyValuePair <string, string> kvp = mdo.Choices[i];
             this.choices.results[i] = new TaggedText(kvp);
         }
         this.choices.count = mdo.Choices.Count;
     }
 }
        public IActionResult AddQuestionnaireQuestion(int questionnaireId, QuestionnaireQuestion qQ)
        {
            Questionnaire         toAdd       = ModMgr.GetQuestionnaire(questionnaireId, false);
            QuestionnaireQuestion newQuestion = new QuestionnaireQuestion
            {
                QuestionText  = qQ.QuestionText,
                QuestionType  = qQ.QuestionType,
                Module        = toAdd,
                Questionnaire = toAdd,
                Optional      = qQ.Optional,
                Answers       = new List <Answer>()
            };

            toAdd.Questions.Add(qQ);
            QqMgr.MakeQuestion(newQuestion, toAdd.Id);
            ModMgr.EditQuestionnaire(toAdd);

            return(RedirectToAction("AddQuestionnaire", toAdd.Id));
        }
Ejemplo n.º 6
0
        public QuestionnaireSet getSet(string filepath)
        {
            if (String.IsNullOrEmpty(filepath))
            {
                throw new ArgumentNullException("filename");
            }
            if (!File.Exists(filepath))
            {
                throw new ArgumentException("Missing XML questionnaire definition file");
            }

            QuestionnaireSet             qset             = null;
            List <QuestionnaireQuestion> currentQuestions = null;
            Questionnaire           currentQuestionnaire  = null;
            QuestionnaireQuestion   currentQuestion       = null;
            QuestionnaireSection    currentSection        = null;
            QuestionnairePage       currentPage           = null;
            QuestionnaireSubsection currentSubsection     = null;

            XmlReader reader = new XmlTextReader(filepath);

            while (reader.Read())
            {
                switch ((int)reader.NodeType)
                {
                case (int)XmlNodeType.Element:
                    string name = reader.Name;
                    if (name == "QuestionnaireSet")
                    {
                        qset                = new QuestionnaireSet();
                        qset.Name           = reader.GetAttribute("name");
                        qset.Title          = reader.GetAttribute("title");
                        qset.Description    = reader.GetAttribute("description");
                        qset.Questionnaires = new List <Questionnaire>();
                    }
                    else if (name == "Introduction")
                    {
                        currentQuestions = new List <QuestionnaireQuestion>();
                    }
                    else if (name == "Questionnaire")
                    {
                        currentQuestionnaire             = new Questionnaire();
                        currentQuestionnaire.Name        = reader.GetAttribute("name");
                        currentQuestionnaire.Title       = reader.GetAttribute("title");
                        currentQuestionnaire.Description = reader.GetAttribute("description");
                        currentQuestionnaire.Sections    = new List <QuestionnaireSection>();
                    }
                    else if (name == "Choices")
                    {
                        currentQuestion.Choices = new List <KeyValuePair <string, string> >();
                    }
                    else if (name == "Choice")
                    {
                        string nbr = reader.GetAttribute("number");
                        string txt = reader.GetAttribute("text");
                        currentQuestion.Choices.Add(new KeyValuePair <string, string>(nbr, txt));
                    }
                    else if (name == "Section")
                    {
                        currentSection       = new QuestionnaireSection();
                        currentSection.Name  = reader.GetAttribute("name");
                        currentSection.Title = reader.GetAttribute("title");
                        currentSection.Pages = new List <QuestionnairePage>();
                    }
                    else if (name == "Page")
                    {
                        currentPage          = new QuestionnairePage();
                        currentPage.Number   = reader.GetAttribute("number");
                        currentPage.Sections = new List <QuestionnaireSubsection>();
                    }
                    else if (name == "Subsection")
                    {
                        currentSubsection       = new QuestionnaireSubsection();
                        currentSubsection.Name  = reader.GetAttribute("name");
                        currentSubsection.Title = reader.GetAttribute("title");
                    }
                    else if (name == "Questions")
                    {
                        currentQuestions = new List <QuestionnaireQuestion>();
                    }
                    else if (name == "Question")
                    {
                        currentQuestion                    = new QuestionnaireQuestion();
                        currentQuestion.Number             = reader.GetAttribute("number");
                        currentQuestion.Text               = reader.GetAttribute("text");
                        currentQuestion.BranchFromQuestion = reader.GetAttribute("branchFrom");
                        currentQuestion.BranchCondition    = reader.GetAttribute("if");
                        currentQuestions.Add(currentQuestion);
                    }
                    break;

                case (int)XmlNodeType.EndElement:
                    name = reader.Name;
                    if (name == "Introduction")
                    {
                        qset.Questions   = currentQuestions;
                        currentQuestions = null;
                    }
                    else if (name == "Questionnaire")
                    {
                        qset.Questionnaires.Add(currentQuestionnaire);
                        currentQuestionnaire = null;
                    }
                    else if (name == "Choices")
                    {
                    }
                    else if (name == "Section")
                    {
                        currentQuestionnaire.Sections.Add(currentSection);
                        currentSection = null;
                    }
                    else if (name == "Page")
                    {
                        currentSection.Pages.Add(currentPage);
                        currentPage = null;
                    }
                    else if (name == "Subsection")
                    {
                        currentPage.Sections.Add(currentSubsection);
                        currentSubsection = null;
                    }
                    else if (name == "Questions")
                    {
                        currentSubsection.Questions = currentQuestions;
                        currentQuestions            = null;
                    }
                    break;
                }
            }
            return(qset);
        }
Ejemplo n.º 7
0
        /// <summary>Component from question.</summary>
        /// <param name="format">   Describes the format to use.</param>
        /// <param name="question"> The question.</param>
        /// <param name="itemOrder">[in,out] The item order.</param>
        /// <returns>A Questionnaire.ItemComponent.</returns>
        private static Questionnaire.ItemComponent ComponentFromQuestion(
            IReportingFormat format,
            QuestionnaireQuestion question,
            ref int itemOrder)
        {
            if (!format.Fields.ContainsKey(question.ValueFieldName))
            {
                return(null);
            }

            FormatField valueField = format.Fields[question.ValueFieldName];
            FormatField displayField;

            if (string.IsNullOrEmpty(question.DisplayFieldName) ||
                (!format.Fields.ContainsKey(question.DisplayFieldName)))
            {
                displayField = valueField;
            }
            else
            {
                displayField = format.Fields[question.DisplayFieldName];
            }

            Questionnaire.ItemComponent component = new Questionnaire.ItemComponent()
            {
                LinkId   = valueField.Name,
                Required = valueField.IsRequired == true,
                Repeats  = false,
            };

            if (!string.IsNullOrEmpty(question.FieldSystem))
            {
                component.Code = new List <Coding>()
                {
                    new Coding(question.FieldSystem, valueField.Name),
                };
            }

#if false   // 2020.05.13 - Argonaut extensions aren't valid in R4 yet
            component.AddExtension(
                "http://fhir.org/guides/argonaut/questionnaire/StructureDefinition/extension-itemOrder",
                new FhirDecimal(itemOrder++));
#endif

            if (question.UseTitleOnly)
            {
                component.Text = $"{displayField.Title}";
            }
            else
            {
                component.Text = $"{displayField.Title}: {displayField.Description}";
            }

            int optionOrder = 0;

            switch (valueField.Type)
            {
            case FormatField.FieldType.Date:
                component.Type = Questionnaire.QuestionnaireItemType.Date;
                break;

            case FormatField.FieldType.Count:
                component.Type = Questionnaire.QuestionnaireItemType.Integer;
                break;

            case FormatField.FieldType.Percentage:
                component.Type = Questionnaire.QuestionnaireItemType.Decimal;
                break;

            case FormatField.FieldType.Boolean:
                component.Type = Questionnaire.QuestionnaireItemType.Boolean;
                break;

            case FormatField.FieldType.Choice:
                component.Type         = Questionnaire.QuestionnaireItemType.Choice;
                component.AnswerOption = new List <Questionnaire.AnswerOptionComponent>();

                component.AddExtension(
                    "http://hl7.org/fhir/StructureDefinition/questionnaire-optionExclusive",
                    new FhirBoolean(true),
                    true);

                foreach (FormatFieldOption option in valueField.Options)
                {
                    Element element = new FhirString(option.Text);

#if false   // 2020.05.13 - Argonaut extensions aren't valid in R4 yet
                    element.AddExtension(
                        "http://fhir.org/guides/argonaut/questionnaire/StructureDefinition/extension-itemOrder",
                        new FhirDecimal(optionOrder++));
#endif

                    component.AnswerOption.Add(new Questionnaire.AnswerOptionComponent()
                    {
                        Value = element,
                    });
                }

                break;

            case FormatField.FieldType.MultiSelectChoice:
                component.Type         = Questionnaire.QuestionnaireItemType.Choice;
                component.AnswerOption = new List <Questionnaire.AnswerOptionComponent>();

                foreach (FormatFieldOption option in valueField.Options)
                {
                    Element element = new FhirString(option.Text);

#if false   // 2020.05.13 - Argonaut extensions aren't valid in R4 yet
                    element.AddExtension(
                        "http://fhir.org/guides/argonaut/questionnaire/StructureDefinition/extension-itemOrder",
                        new FhirDecimal(optionOrder++));
#endif

                    component.AnswerOption.Add(new Questionnaire.AnswerOptionComponent()
                    {
                        Value = element,
                    });
                }

                break;

            case FormatField.FieldType.Text:
                component.Type = Questionnaire.QuestionnaireItemType.Text;
                break;

            case FormatField.FieldType.ShortString:
                component.Type = Questionnaire.QuestionnaireItemType.String;
                break;

            case FormatField.FieldType.Display:
            default:
                component.Type = Questionnaire.QuestionnaireItemType.Display;
                break;
            }

            return(component);
        }
Ejemplo n.º 8
0
        //
        // GET: /Questionnaire/Details/5

        public ActionResult Details(int id = 0)
        {
            var viewModel = new QuestionnaireDetailData();

            /* Add Fully Loaded (.Included) Questionnaire to the ViewModel */
            viewModel.Questionnaire =
                _db.Questionnaires
                .Include(a => a.QuestionnaireQuestions
                         .Select(b => b.Question.QType))
                .Include(a => a.QuestionnaireQuestions
                         .Select(b => b.QuestionnaireQCategory))
                .Include(a => a.QuestionnaireQCategories
                         .Select(b => b.QCategory))
                .Where(n => n.QuestionnaireId == id)
                .Single();

            /* Sort by Questionnaire Question Categories: Step 1 - Left Join QuestionnaireQuestions to QuestionnaireQCategories on QCategoryId */
            var query = from questionnaireQuestions in viewModel.Questionnaire.QuestionnaireQuestions
                        join questionnaireQCategories in viewModel.Questionnaire.QuestionnaireQCategories
                        on questionnaireQuestions.QuestionnaireQCategory.QCategoryId equals
                        questionnaireQCategories.QCategoryId
                        into qqJoinQqc
                        from subset in qqJoinQqc.DefaultIfEmpty()
                        select new
            {
                questionnaireQuestions.Id,
                questionnaireQuestions.QuestionnaireId,
                questionnaireQuestions.QuestionId,
                questionnaireQuestions.QuestionnaireQCategory.QCategoryId,
                questionnaireQuestions.Ordinal,
                questionnaireQuestions.Question,
                questionnaireQuestions.QuestionnaireQCategory.QCategory,
                QQCOrdinal = (subset == null ? 99 : subset.Ordinal)
            };
            /* Sort by Questionnaire Question Categories: Step 2 - Sort on Ordinal from QuestionnaireQCategories */
            var sortedQuery = query.OrderBy(q => q.QQCOrdinal);
            /* Sort by Questionnaire Question Categories: Step 3 - Build List<QuestionnaireQuestion> (because QuestionnaireQuestions is an ICollection) */
            var sortedQuestionnaireQuestions = new List <QuestionnaireQuestion>();

            foreach (var item in sortedQuery)
            {
                var questionnaireQuestion = new QuestionnaireQuestion
                {
                    Id                     = item.Id,
                    Ordinal                = item.Ordinal,
                    QuestionnaireId        = item.QuestionnaireId,
                    QuestionId             = item.QuestionId,
                    QuestionnaireQCategory = { QCategoryId = item.QCategoryId },
                    Question               = item.Question
                };
                questionnaireQuestion.QuestionnaireQCategory.QCategory = item.QCategory;
                sortedQuestionnaireQuestions.Add(questionnaireQuestion);
            }
            /* Sort by Questionnaire Question Categories: Step 4 - Replace Questionnaire.QuestionnaireQuestions with Sorted List */
            viewModel.Questionnaire.QuestionnaireQuestions = sortedQuestionnaireQuestions;

            viewModel.Questionnaire.QuestionnaireQCategories =
                viewModel.Questionnaire.QuestionnaireQCategories.OrderBy(o => o.Ordinal).ToList();

            var detailRecords = new List <QuestionnaireDetailRecord>();

            foreach (QuestionnaireQuestion qq in viewModel.Questionnaire.QuestionnaireQuestions)
            {
                List <Answer> answers         = _db.Answers.Where(x => x.QTypeName == qq.Question.QTypeName).ToList();
                var           selectListItems = new List <SelectListItem>();

                for (int i = 0; i < answers.Count(); i++)
                {
                    var selectListItem = new SelectListItem
                    {
                        Text  = answers[i].AnswerText,
                        Value = answers[i].AnswerId.ToString()
                    };
                    selectListItems.Add(selectListItem);
                }
                var selectList = new SelectList(selectListItems, "Value", "Text");

                detailRecords.Add(new QuestionnaireDetailRecord
                {
                    Question  = qq.Question,
                    QCategory = qq.QuestionnaireQCategory.QCategory,
                    Answers   = selectList
                });
            }
            viewModel.DetailRecords = detailRecords;

            return(View(viewModel));
        }
Ejemplo n.º 9
0
        public ActionResult Edit(IEnumerable <QuestionnaireQuestion> qQuestions, int[] remove,
                                 int selectedQuestionAdd = -1, int selectedQQCategoryAdd = -1)
        {
            if (remove == null)
            {
                remove = new int[0];
            }

            QuestionnaireQuestion[] enumerable = qQuestions as QuestionnaireQuestion[] ?? qQuestions.ToArray();
            int?id = enumerable[0].QuestionnaireId;

            if (id == null)
            {
                return(View());
            }

            var questionnaireId = (int)id;

            var scope = new TransactionScope(
                // a new transaction will always be created
                TransactionScopeOption.RequiresNew,
                // we will allow volatile data to be read during transaction
                new TransactionOptions
            {
                IsolationLevel = IsolationLevel.ReadUncommitted
            }
                );

            using (scope)
            {
                try
                {
                    var qqnum = enumerable.Where(x => remove.Contains(x.Id));

                    // updates
                    foreach (QuestionnaireQuestion qQuestion in enumerable)
                    {
                        if (!remove.Contains(qQuestion.Id))
                        {
                            _db.Entry(qQuestion).State = System.Data.Entity.EntityState.Modified;
                        }
                    }
                    _db.SaveChanges();

                    // deletes
                    foreach (var i in remove)
                    {
                        var qq = _db.QuestionnaireQuestions.Single(x => x.Id == i);
                        _db.Entry(qq).State = System.Data.Entity.EntityState.Deleted;
                    }
                    _db.SaveChanges();

                    // new questionnaire question
                    if (selectedQuestionAdd != -1 && selectedQQCategoryAdd != -1)
                    {
                        int ordinal = 1;
                        if (_db.QuestionnaireQuestions.Any(x => x.QuestionnaireId == id && x.QQCategoryId == selectedQQCategoryAdd))
                        {
                            ordinal =
                                _db.QuestionnaireQuestions.Where(
                                    x => x.QuestionnaireId == id && x.QQCategoryId == selectedQQCategoryAdd)
                                .OrderBy(x => x.Ordinal)
                                .ToList()
                                .Last()
                                .Ordinal + 1;
                        }

                        var qq = new QuestionnaireQuestion
                        {
                            QuestionnaireId = id,
                            QuestionId      = selectedQuestionAdd,
                            QQCategoryId    = selectedQQCategoryAdd,
                            Ordinal         = ordinal
                        };

                        _db.Entry(qq).State = System.Data.Entity.EntityState.Added;
                    }
                    _db.SaveChanges();

                    scope.Complete();
                    return(RedirectToAction("Edit"));
                }
                catch (Exception ex)
                {
                    throw;
                }
            }


            return(View());
        }
Ejemplo n.º 10
0
 public static bool ContainsIssues(this QuestionnaireQuestion question)
 {
     return(question.Issues.Count > 0);
 }
Ejemplo n.º 11
0
 private static void SetOneAnswer(QuestionnaireQuestion q1)
 {
     QuestionnaireQuestionAnswer yes = new QuestionnaireQuestionAnswer();
     yes.Value = "1";
     yes.Answer = "YES";
     QuestionnaireQuestionAnswer no = new QuestionnaireQuestionAnswer();
     no.Value = "0";
     no.Answer = "NO";
     q1.Answers = new QuestionnaireQuestionAnswer[] { yes, no };
 }
Ejemplo n.º 12
0
        private static void SetFrequencyAnswer(QuestionnaireQuestion q1)
        {
            QuestionnaireQuestionAnswer Never = new QuestionnaireQuestionAnswer();
            Never.Value = "0";
            Never.Answer = "Never";

            QuestionnaireQuestionAnswer Happened = new QuestionnaireQuestionAnswer();
            Happened.Value = "1";
            Happened.Answer = "Happened but not in the last week";

            QuestionnaireQuestionAnswer OneOrTwoTimes = new QuestionnaireQuestionAnswer();
            OneOrTwoTimes.Value = "2";
            OneOrTwoTimes.Answer = "1 or 2 times in the last week";

            QuestionnaireQuestionAnswer FromThreeToSix = new QuestionnaireQuestionAnswer();
            FromThreeToSix.Value = "3";
            FromThreeToSix.Answer = "From 3 to 6 times in the last week";

            QuestionnaireQuestionAnswer Everyday = new QuestionnaireQuestionAnswer();
            Everyday.Value = "4";
            Everyday.Answer = "Everyday";

            QuestionnaireQuestionAnswer NotApplicable = new QuestionnaireQuestionAnswer();
            NotApplicable.Value = "9";
            NotApplicable.Answer = "I don’t know/Not applicable";

            q1.Answers = new QuestionnaireQuestionAnswer[] { Never, Happened, OneOrTwoTimes, FromThreeToSix, Everyday, NotApplicable};
        }
Ejemplo n.º 13
0
        private static void SerializeQuestionnaire()
        {
            Questionnaire q = new Questionnaire();
            q.Version = "1.0";
            List<QuestionnaireQuestion> QuestionnaireQuestions = new List<QuestionnaireQuestion>();

            #region 1. What is the year, season, date, day, and month?
            QuestionnaireQuestion q1 = new QuestionnaireQuestion();
            q1.ID = "1";
            q1.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q1.Title = "1. What is the year, season, date, day, and month?";
            SetOneAnswer(q1);
            QuestionnaireQuestions.Add(q1);

            QuestionnaireQuestion q1_1 = new QuestionnaireQuestion();
            q1_1.ID = "1.1";
            q1_1.Condition = "1";
            q1_1.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q1_1.Title = "1. Year";
            SetOneAnswer(q1_1);
            q1.Questions.Add(q1_1);

            QuestionnaireQuestion q1_2= new QuestionnaireQuestion();
            q1_2.ID = "1.2";
            q1_2.Condition = "1";
            q1_2.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q1_2.Title = "2. Season ";
            SetOneAnswer(q1_2);
            q1.Questions.Add(q1_2);

            QuestionnaireQuestion q1_3 = new QuestionnaireQuestion();
            q1_3.ID = "1.3";
            q1_3.Condition = "1";
            q1_3.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q1_3.Title = "3. Date";
            SetOneAnswer(q1_3);
            q1.Questions.Add(q1_3);

            QuestionnaireQuestion q1_4 = new QuestionnaireQuestion();
            q1_4.ID = "1.4";
            q1_4.Condition = "1";
            q1_4.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q1_4.Title = "4. Day ";
            SetOneAnswer(q1_4);
            q1.Questions.Add(q1_4);

            QuestionnaireQuestion q1_5 = new QuestionnaireQuestion();
            q1_5.ID = "1.5";
            q1_5.Condition = "1";
            q1_5.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q1_5.Title = "5. Month";
            SetOneAnswer(q1_5);
            q1.Questions.Add(q1_5);
            #endregion

            #region 2. Where are we (state, country, town or city, home/hospital, floor)?
            QuestionnaireQuestion q2 = new QuestionnaireQuestion();
            q2.ID = "2";
            q2.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q2.Title = "2. Where are we (state, country, town or city, home/hospital, floor)?";
            SetOneAnswer(q2);
            QuestionnaireQuestions.Add(q2);

            QuestionnaireQuestion q2_1 = new QuestionnaireQuestion();
            q2_1.ID = "2.1";
            q2_1.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q2_1.Title = "1. State";
            SetOneAnswer(q2_1);
            q2.Questions.Add(q2_1);

            QuestionnaireQuestion q2_2 = new QuestionnaireQuestion();
            q2_2.ID = "2.2";
            q2_2.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q2_2.Title = "2. Country ";
            SetOneAnswer(q2_2);
            q2.Questions.Add(q2_2);

            QuestionnaireQuestion q2_3 = new QuestionnaireQuestion();
            q2_3.ID = "2.3";
            q2_3.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q2_3.Title = "3. Town or city";
            SetOneAnswer(q2_3);
            q2.Questions.Add(q2_3);

            QuestionnaireQuestion q2_4 = new QuestionnaireQuestion();
            q2_4.ID = "2.4";
            q2_4.QuestionType = QuestionnaireQuestionAnswerType.OneAnswer;
            q2_4.Title = "4. Home/hospital ";
            SetOneAnswer(q2_4);
            q2.Questions.Add(q2_4);

            QuestionnaireQuestion q2_5 = new QuestionnaireQuestion("2.5", "5. Floor", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q2_5);
            q2.Questions.Add(q2_5);
            #endregion

            #region Cluster 1: Cognitive

            QuestionnaireQuestion q3 = new QuestionnaireQuestion("3", "3. Does he/she mix up past and present (e.g. thinking a deceased relative is alive)?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q3);
            QuestionnaireQuestions.Add(q3);

            QuestionnaireQuestion q3_Frequency = new QuestionnaireQuestion("3.1", "How often?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q3_Frequency);
            q3.Questions.Add(q3_Frequency);

            QuestionnaireQuestion q4 = new QuestionnaireQuestion("4", "4. Does he/she loose, misplace or hide things?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q4);
            QuestionnaireQuestions.Add(q4);

            QuestionnaireQuestion q4_Frequency = new QuestionnaireQuestion("4.1", "How often?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q4_Frequency);
            q4.Questions.Add(q4_Frequency);

            QuestionnaireQuestion q5 = new QuestionnaireQuestion("5", "5.  Does he/she wander or get lost?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q5);
            QuestionnaireQuestions.Add(q5);

            QuestionnaireQuestion q5_Frequency = new QuestionnaireQuestion("5.1", "How often?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q5_Frequency);
            q5.Questions.Add(q5_Frequency);

            QuestionnaireQuestion q6 = new QuestionnaireQuestion("6", "6.  Does he/she not recognize familiar people?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q6);
            QuestionnaireQuestions.Add(q6);

            QuestionnaireQuestion q6_Frequency = new QuestionnaireQuestion("6.1", "How often?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q6_Frequency);
            q6.Questions.Add(q6_Frequency);

            QuestionnaireQuestion q7 = new QuestionnaireQuestion("7", "7. Does he/she see or hear things that are not there (hallucinations or illusions)?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q7);
            QuestionnaireQuestions.Add(q7);

            QuestionnaireQuestion q7_Frequency = new QuestionnaireQuestion("7.1", "How often?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q7_Frequency);
            q7.Questions.Add(q7_Frequency);

            #endregion

            #region Cluster 2: Aggressiveness

            QuestionnaireQuestion q8 = new QuestionnaireQuestion("8", "Does he/she become angry?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q8);
            QuestionnaireQuestions.Add(q8);

            QuestionnaireQuestion q9 = new QuestionnaireQuestion("9", "Is he/she suspicious or makes accusations?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q9);
            q8.Questions.Add(q9);

            QuestionnaireQuestion q10 = new QuestionnaireQuestion("10", "Does he/she strike out or try to hit?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q10);
            q8.Questions.Add(q10);

            QuestionnaireQuestion q11 = new QuestionnaireQuestion("11", "Does he/she engage in behaviour potentially dangerous to others or him/herself?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q11);
            q8.Questions.Add(q11);

            QuestionnaireQuestion q12 = new QuestionnaireQuestion("12", "Does he/she talk in an aggressive or threatening manner?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q12);
            q8.Questions.Add(q12);

            QuestionnaireQuestion q13 = new QuestionnaireQuestion("13", "Is he/she uncooperative when I want him/her to do something?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q13);
            q8.Questions.Add(q13);

            #endregion

            #region Cluster 3: Mood

            QuestionnaireQuestion q14 = new QuestionnaireQuestion("14", "Does he/she appear sad or depressed?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q14);
            QuestionnaireQuestions.Add(q14);

            QuestionnaireQuestion q15 = new QuestionnaireQuestion("15", "Is he/she unable to keep occupied or busy by self?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q15);
            q14.Questions.Add(q15);

            QuestionnaireQuestion q16 = new QuestionnaireQuestion("16", "Does he/she spend long periods of time inactive?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q16);
            q14.Questions.Add(q16);

            QuestionnaireQuestion q17 = new QuestionnaireQuestion("17", "Does he/she talk little or not at all?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q17);
            q14.Questions.Add(q17);

            QuestionnaireQuestion q18 = new QuestionnaireQuestion("18", "Does he/she cry or become tearful or appear emotionally instable?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q18);
            q14.Questions.Add(q18);

            QuestionnaireQuestion q19 = new QuestionnaireQuestion("19", "Does he/she eat excessively or not at all?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetFrequencyAnswer(q19);
            q14.Questions.Add(q19);

            #endregion

            #region Questions 20 - 32

            QuestionnaireQuestion q20 = new QuestionnaireQuestion("20", "Is he/she able to solve daily problems?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q20);
            q14.Questions.Add(q20);

            QuestionnaireQuestion q21 = new QuestionnaireQuestion("21", "Does he/she take care of his/her personal hygiene?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q21);
            q14.Questions.Add(q21);

            QuestionnaireQuestion q22 = new QuestionnaireQuestion("22", "Is he/she involved in social activities?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q22);
            q14.Questions.Add(q22);

            QuestionnaireQuestion q23 = new QuestionnaireQuestion("23", "Did he/she fall in the last week?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q23);
            q14.Questions.Add(q23);

            QuestionnaireQuestion q24 = new QuestionnaireQuestion("24", "Does he/she have difficulties in the speech?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q24);
            q14.Questions.Add(q24);

            QuestionnaireQuestion q25 = new QuestionnaireQuestion("25", "Does he/she appear anxious or agitated?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q25);
            q14.Questions.Add(q25);

            QuestionnaireQuestion q26 = new QuestionnaireQuestion("26", "Does he/she appear apathetic?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q26);
            q14.Questions.Add(q26);

            QuestionnaireQuestion q27 = new QuestionnaireQuestion("27", "Does he/she sleep?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q27);
            q14.Questions.Add(q27);

            QuestionnaireQuestion q28 = new QuestionnaireQuestion("28", "Does he/she have appetite?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q28);
            q14.Questions.Add(q28);

            QuestionnaireQuestion q29 = new QuestionnaireQuestion("29", "Did he/she assume therapy every day in the last week?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q29);
            q14.Questions.Add(q29);

            QuestionnaireQuestion q30 = new QuestionnaireQuestion("30", " Does he/she report side effects?", QuestionnaireQuestionAnswerType.FreeText);
            SetOneAnswer(q30);
            q14.Questions.Add(q30);

            QuestionnaireQuestion q31 = new QuestionnaireQuestion("31", "Any other problem (specify)?", QuestionnaireQuestionAnswerType.FreeText);
            SetOneAnswer(q31);
            q14.Questions.Add(q31);

            QuestionnaireQuestion q32 = new QuestionnaireQuestion("32", "Has it been necessary to visit Emergency, has the patient needed any non-programmed resource, visits to their doctor or a specialist, has hospital admission or to a Long Term Care Unit or Residential Centre been necessary?", QuestionnaireQuestionAnswerType.OneAnswer);
            SetOneAnswer(q32);
            q14.Questions.Add(q32);

            #endregion

            QuestionnaireQuestion[] questions = QuestionnaireQuestions.ToArray();

            q.Questions = questions;

            SerializeMe(q, "DailyQuestionnaire.xml");
        }
Ejemplo n.º 14
0
        public QuestionnaireSet getSet(string filepath)
        {
            if (String.IsNullOrEmpty(filepath))
            {
                throw new ArgumentNullException("filename");
            }
            if (!File.Exists(filepath))
            {
                throw new ArgumentException("Missing XML questionnaire definition file");
            }

            QuestionnaireSet qset = null;
            List<QuestionnaireQuestion> currentQuestions = null;
            Questionnaire currentQuestionnaire = null;
            QuestionnaireQuestion currentQuestion = null;
            QuestionnaireSection currentSection = null;
            QuestionnairePage currentPage = null;
            QuestionnaireSubsection currentSubsection = null;

            XmlReader reader = new XmlTextReader(filepath);
            while (reader.Read())
            {
                switch ((int)reader.NodeType)
                {
                    case (int)XmlNodeType.Element:
                        string name = reader.Name;
                        if (name == "QuestionnaireSet")
                        {
                            qset = new QuestionnaireSet();
                            qset.Name = reader.GetAttribute("name");
                            qset.Title = reader.GetAttribute("title");
                            qset.Description = reader.GetAttribute("description");
                            qset.Questionnaires = new List<Questionnaire>();
                        }
                        else if (name == "Introduction")
                        {
                            currentQuestions = new List<QuestionnaireQuestion>();
                        }
                        else if (name == "Questionnaire")
                        {
                            currentQuestionnaire = new Questionnaire();
                            currentQuestionnaire.Name = reader.GetAttribute("name");
                            currentQuestionnaire.Title = reader.GetAttribute("title");
                            currentQuestionnaire.Description = reader.GetAttribute("description");
                            currentQuestionnaire.Sections = new List<QuestionnaireSection>();
                        }
                        else if (name == "Choices")
                        {
                            currentQuestion.Choices = new List<KeyValuePair<string, string>>();
                        }
                        else if (name == "Choice")
                        {
                            string nbr = reader.GetAttribute("number");
                            string txt = reader.GetAttribute("text");
                            currentQuestion.Choices.Add(new KeyValuePair<string, string>(nbr, txt));
                        }
                        else if (name == "Section")
                        {
                            currentSection = new QuestionnaireSection();
                            currentSection.Name = reader.GetAttribute("name");
                            currentSection.Title = reader.GetAttribute("title");
                            currentSection.Pages = new List<QuestionnairePage>();
                        }
                        else if (name == "Page")
                        {
                            currentPage = new QuestionnairePage();
                            currentPage.Number = reader.GetAttribute("number");
                            currentPage.Sections = new List<QuestionnaireSubsection>();
                        }
                        else if (name == "Subsection")
                        {
                            currentSubsection = new QuestionnaireSubsection();
                            currentSubsection.Name = reader.GetAttribute("name");
                            currentSubsection.Title = reader.GetAttribute("title");
                        }
                        else if (name == "Questions")
                        {
                            currentQuestions = new List<QuestionnaireQuestion>();
                        }
                        else if (name == "Question")
                        {
                            currentQuestion = new QuestionnaireQuestion();
                            currentQuestion.Number = reader.GetAttribute("number");
                            currentQuestion.Text = reader.GetAttribute("text");
                            currentQuestion.BranchFromQuestion = reader.GetAttribute("branchFrom");
                            currentQuestion.BranchCondition = reader.GetAttribute("if");
                            currentQuestions.Add(currentQuestion);
                        }
                        break;
                    case (int)XmlNodeType.EndElement:
                        name = reader.Name;
                        if (name == "Introduction")
                        {
                            qset.Questions = currentQuestions;
                            currentQuestions = null;
                        }
                        else if (name == "Questionnaire")
                        {
                            qset.Questionnaires.Add(currentQuestionnaire);
                            currentQuestionnaire = null;
                        }
                        else if (name == "Choices")
                        {
                        }
                        else if (name == "Section")
                        {
                            currentQuestionnaire.Sections.Add(currentSection);
                            currentSection = null;
                        }
                        else if (name == "Page")
                        {
                            currentSection.Pages.Add(currentPage);
                            currentPage = null;
                        }
                        else if (name == "Subsection")
                        {
                            currentPage.Sections.Add(currentSubsection);
                            currentSubsection = null;
                        }
                        else if (name == "Questions")
                        {
                            currentSubsection.Questions = currentQuestions;
                            currentQuestions = null;
                        }
                        break;
                }
            }
            return qset;
        }