/// <summary>
        /// Saves Qnum field for a specified question. USES TEST BACKEND.
        /// </summary>
        /// <param name="sq"></param>
        /// <returns></returns>
        public static int UpdateQnum(SurveyQuestion sq)
        {
            using (SqlDataAdapter sql = new SqlDataAdapter())
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ISISConnectionString"].ConnectionString))
                {
                    conn.Open();

                    sql.UpdateCommand = new SqlCommand("proc_updateQnum", conn)
                    {
                        CommandType = CommandType.StoredProcedure
                    };

                    sql.UpdateCommand.Parameters.AddWithValue("@newqnum", sq.Qnum);
                    sql.UpdateCommand.Parameters.AddWithValue("@qid", sq.ID);

                    try
                    {
                        sql.UpdateCommand.ExecuteNonQuery();
                    }
                    catch (Exception)
                    {
                        return(1);
                    }
                }
            return(0);
        }
Beispiel #2
0
        /// <summary>
        /// Returns the variable name immediately following the provided heading question.
        /// </summary>
        /// <param name="sq"></param>
        /// <returns></returns>
        public string GetSectionLowerBound(SurveyQuestion sq)
        {
            if (!sq.VarName.FullVarName.StartsWith("Z"))
            {
                return(sq.VarName.FullVarName);
            }

            int index = 0;

            for (int i = 0; i < Questions.Count; i++)
            {
                if (Questions[i].VarName.Equals(sq.VarName))
                {
                    index = i;
                    break;
                }
            }

            // if this heading is the last question, return nothing
            if (index == Questions.Count)
            {
                return("");
            }

            // if a heading is the next question return this Varname
            if (Questions[index + 1].VarName.FullVarName.StartsWith("Z"))
            {
                return(sq.VarName.FullVarName);
            }

            return(Questions[index + 1].VarName.FullVarName);
        }
        /// <summary>
        /// Updates the wording numbers for the provided question. USES TEST BACKEND
        /// </summary>
        /// <param name="question"></param>
        /// <returns></returns>
        public static int UpdateQuestionWordings(SurveyQuestion question)
        {
            using (SqlDataAdapter sql = new SqlDataAdapter())
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ISISConnectionString"].ConnectionString))
                {
                    conn.Open();

                    sql.UpdateCommand = new SqlCommand("proc_updateQuestionWordings", conn)
                    {
                        CommandType = CommandType.StoredProcedure
                    };

                    sql.UpdateCommand.Parameters.AddWithValue("@QID", question.ID);
                    sql.UpdateCommand.Parameters.AddWithValue("@prep", question.PrePNum);
                    sql.UpdateCommand.Parameters.AddWithValue("@prei", question.PreINum);
                    sql.UpdateCommand.Parameters.AddWithValue("@prea", question.PreANum);
                    sql.UpdateCommand.Parameters.AddWithValue("@litq", question.LitQNum);
                    sql.UpdateCommand.Parameters.AddWithValue("@psti", question.PstINum);
                    sql.UpdateCommand.Parameters.AddWithValue("@pstp", question.PstPNum);
                    sql.UpdateCommand.Parameters.AddWithValue("@respname", question.RespName);
                    sql.UpdateCommand.Parameters.AddWithValue("@nrname", question.NRName);

                    try
                    {
                        sql.UpdateCommand.ExecuteNonQuery();
                    }
                    catch (Exception)
                    {
                        return(1);
                    }
                }
            return(0);
        }
Beispiel #4
0
        public SurveyQuestion DeepCopyWordings()
        {
            SurveyQuestion copy = new SurveyQuestion();

            copy.VarName     = new VariableName(VarName.FullVarName);
            copy.PreP        = string.Copy(PreP);
            copy.PreI        = string.Copy(PreI);
            copy.PreA        = string.Copy(PreA);
            copy.LitQ        = string.Copy(LitQ);
            copy.PstI        = string.Copy(PstI);
            copy.PstP        = string.Copy(PstP);
            copy.RespOptions = string.Copy(RespOptions);
            copy.NRCodes     = string.Copy(NRCodes);

            foreach (Translation t in Translations)
            {
                copy.Translations.Add(new Translation
                {
                    ID              = t.ID,
                    QID             = t.QID,
                    Language        = string.Copy(t.Language),
                    TranslationText = string.Copy(t.TranslationText),
                    Bilingual       = t.Bilingual
                });
            }
            return(copy);
        }
Beispiel #5
0
 /// <summary>
 /// Adds a question to the survey's question list.
 /// </summary>
 /// <param name="newQ"></param>
 public void AddQuestion(SurveyQuestion newQ)
 {
     if (!Questions.Contains(newQ, new SurveyQuestionComparer()))
     {
         Questions.Add(newQ);
         UpdateEssentialQuestions();
     }
 }
Beispiel #6
0
 /// <summary>
 /// Adds a question to the survey's question list at the specified location.
 /// </summary>
 /// <param name="newQ"></param>
 public void AddQuestion(SurveyQuestion newQ, int afterIndex, bool withRenumber)
 {
     Questions.Insert(afterIndex, newQ);
     if (withRenumber)
     {
         Renumber(0);
     }
     UpdateEssentialQuestions();
 }
Beispiel #7
0
 /// <summary>
 /// Removes the question from the Survey's question list.
 /// </summary>
 /// <param name="newQ"></param>
 public void RemoveQuestion(SurveyQuestion q, bool withRenumber)
 {
     Questions.Remove(q);
     if (withRenumber)
     {
         Renumber(0);
     }
     UpdateEssentialQuestions();
 }
Beispiel #8
0
        /// <summary>
        /// Inserts LITQ and TBLROS/E tags around the LitQ and Response sets in the translation text. Only works on series starters (Qnum ends in 'a')
        /// </summary>
        /// <param name="sq"></param>
        public void InsertTranslationTableTags(SurveyQuestion sq)
        {
            if (!sq.Qnum.EndsWith("a"))
            {
                return;
            }

            Regex           rx = new Regex("[0-9][0-9]*  ");
            MatchCollection matches;
            string          litq, currentChar;
            int             litqPos = 0, index = 0;

            foreach (Translation t in sq.Translations)
            {
                matches = rx.Matches(t.TranslationText);
                if (matches.Count == 1)
                {
                    t.TranslationText = t.TranslationText.Substring(0, matches[0].Index) + "[/LitQ][TBLROS]" + t.TranslationText.Substring(matches[0].Index + 1) + "[TBLROE]";
                }

                if (string.IsNullOrEmpty(t.LitQ))
                {
                    litq = sq.LitQ;
                }
                else
                {
                    litq = t.LitQ;
                }

                index = 0;
                do
                {
                    if (index > litq.Length)
                    {
                        break;
                    }

                    currentChar = litq.Substring(index, 1);
                    if (currentChar.Equals(".") || currentChar.Equals("/") || currentChar.Equals("\r") || currentChar.Equals("\n") || currentChar.Equals(":") || currentChar.Equals("?") ||
                        string.IsNullOrEmpty(currentChar))
                    {
                        break;
                    }

                    index++;
                }while (true);

                litq = litq.Substring(0, index - 1);

                litqPos = t.TranslationText.IndexOf(litq, StringComparison.OrdinalIgnoreCase);

                if (litqPos > 0)
                {
                    t.TranslationText = t.TranslationText.Substring(0, litqPos - 1) + "[LitQ]" + t.TranslationText.Substring(litqPos);
                }
            }
        }
Beispiel #9
0
 /// <summary>
 /// Adds a question to the survey's question list.
 /// </summary>
 /// <param name="newQ"></param>
 public void AddQuestion(SurveyQuestion newQ, bool withRenumber)
 {
     Questions.Add(newQ);
     if (withRenumber)
     {
         Renumber(0);
     }
     UpdateEssentialQuestions();
 }
Beispiel #10
0
        /// <summary>
        /// Searches a string for a VarName pattern and, if found, looks up and inserts the Qnum right before the VarName. If a Qnum can not be found,
        /// "QNU" (Qnum Unknown) is used instead.
        /// </summary>
        /// <remarks> Each word in the string is compared to the VarName pattern.</remarks>
        /// <param name="wording"></param>
        /// <param name="numbering"></param>
        /// <returns></returns>
        private string InsertQnums(string wording, Enumeration numbering)
        {
            int             offset       = 0;
            string          qnum         = "";
            string          foundVarname = "";
            MatchCollection matches;
            Regex           rx = new Regex("\\b[A-Z]{2}[0-9]{3}[a-z]*", RegexOptions.IgnoreCase);

            // if wording contains a variable name, look up the qnum and place it before the variable
            if (rx.Match(wording).Success)
            {
                matches = rx.Matches(wording);
                foreach (Match match in matches)
                {
                    // for each found pattern, replace the found variable once, starting at the position in the string where it was found
                    // an offset is added to this position to account for previous insertions
                    foundVarname = match.Groups[0].Value;

                    SurveyQuestion foundQ = Questions.SingleOrDefault(x => x.VarName.RefVarName == foundVarname);

                    if (foundQ == null)
                    {
                        qnum = "QNU";
                    }
                    else
                    {
                        switch (numbering)
                        {
                        case Enumeration.Both:
                        case Enumeration.Qnum:
                            qnum = foundQ.Qnum;
                            break;

                        case Enumeration.AltQnum:
                            qnum = foundQ.AltQnum;
                            break;

                        default:
                            qnum = foundQ.Qnum;
                            break;
                        }
                    }

                    wording = rx.Replace(wording, qnum + "/" + foundVarname, 1, match.Index + offset);
                    offset += qnum.Length + 1; // offset the starting point but the length of the qnum and slash just inserted
                }

                if (qnum.Equals("QNU"))
                {
                    QNUlist.Add(foundVarname);
                }
                offset = 0;
            }

            return(wording);
        }
        /// <summary>
        /// Populates the provided Survey's corrected questions list.
        /// </summary>
        /// <param name="s"></param>
        /// <param name="withComments"></param>
        /// <param name="withTranslation"></param>
        public static void FillCorrectedQuestions(Survey s)
        {
            SurveyQuestion q;
            string         query = "SELECT * FROM Questions.FN_GetCorrectedQuestions(@survey) ORDER BY Qnum";

            using (SqlDataAdapter sql = new SqlDataAdapter())
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ISISConnectionString"].ConnectionString))
                {
                    conn.Open();

                    sql.SelectCommand = new SqlCommand(query, conn);
                    sql.SelectCommand.Parameters.AddWithValue("@survey", s.SurveyCode);
                    try
                    {
                        using (SqlDataReader rdr = sql.SelectCommand.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                q = new SurveyQuestion
                                {
                                    ID         = (int)rdr["ID"],
                                    SurveyCode = (string)rdr["Survey"],
                                    //VarName = (string)rdr["VarName"],
                                    Qnum = (string)rdr["Qnum"],
                                    //AltQnum = (string)rdr["AltQnum"],
                                    //PreP = new Wording((int)rdr["PreP#"], (string)rdr["PreP"]),
                                    PrePNum     = (int)rdr["PreP#"],
                                    PreP        = (string)rdr["PreP"],
                                    PreINum     = (int)rdr["PreI#"],
                                    PreI        = (string)rdr["PreI"],
                                    PreANum     = (int)rdr["PreA#"],
                                    PreA        = (string)rdr["PreA"],
                                    LitQNum     = (int)rdr["LitQ#"],
                                    LitQ        = (string)rdr["LitQ"],
                                    PstINum     = (int)rdr["PstI#"],
                                    PstI        = (string)rdr["PstI"],
                                    PstPNum     = (int)rdr["PstP#"],
                                    PstP        = (string)rdr["PstP"],
                                    RespName    = (string)rdr["RespName"],
                                    RespOptions = (string)rdr["RespOptions"],
                                    NRName      = (string)rdr["NRName"],
                                    NRCodes     = (string)rdr["NRCodes"]
                                };

                                s.CorrectedQuestions.Add(q);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        return;
                    }
                }
        }
Beispiel #12
0
 /// <summary>
 /// Compares each wording field between 2 questions and determines if they are equal.
 /// </summary>
 /// <param name="sq1"></param>
 /// <param name="sq2"></param>
 /// <returns>True if all wording fields are equal.</returns>
 private bool AreWordingsEqual(SurveyQuestion sq1, SurveyQuestion sq2)
 {
     return((sq1.PreP == sq2.PreP) &&
            (sq1.PreI == sq2.PreI) &&
            (sq1.PreA == sq2.PreA) &&
            (sq1.LitQ == sq2.LitQ) &&
            (sq1.PstI == sq2.PstI) &&
            (sq1.PstP == sq2.PstP) &&
            (sq1.NRCodes == sq2.NRCodes) &&
            (sq1.RespOptions == sq2.RespOptions));
 }
Beispiel #13
0
 /// <summary>
 /// Modifies each wording field in a single SurveyQuestion object to include the country code for any standard variable name found in the wording.
 /// </summary>
 /// <param name="sq">The question to modify.</param>
 public void InsertCountryCodes(SurveyQuestion sq)
 {
     sq.PreP        = InsertCountryCodes(sq.PreP);
     sq.PreI        = InsertCountryCodes(sq.PreI);
     sq.PreA        = InsertCountryCodes(sq.PreA);
     sq.LitQ        = InsertCountryCodes(sq.LitQ);
     sq.PstI        = InsertCountryCodes(sq.PstI);
     sq.PstP        = InsertCountryCodes(sq.PstP);
     sq.RespOptions = InsertCountryCodes(sq.RespOptions);
     sq.NRCodes     = InsertCountryCodes(sq.NRCodes);
 }
Beispiel #14
0
 /// <summary>
 /// Modifies each wording field in a single SurveyQuestion object to include Qnums before any non-standard variable name found in the wording.
 /// </summary>
 /// <param name="numbering">Determines whether Qnum or AltQnum is inserted.</param>
 /// <param name="sq">The question to modify.</param>
 public void InsertOddQnums(SurveyQuestion sq, Enumeration numbering)
 {
     sq.PreP        = InsertOddQnums(sq.PreP, numbering);
     sq.PreI        = InsertOddQnums(sq.PreI, numbering);
     sq.PreA        = InsertOddQnums(sq.PreA, numbering);
     sq.LitQ        = InsertOddQnums(sq.LitQ, numbering);
     sq.PstI        = InsertOddQnums(sq.PstI, numbering);
     sq.PstP        = InsertOddQnums(sq.PstP, numbering);
     sq.RespOptions = InsertOddQnums(sq.RespOptions, numbering);
     sq.NRCodes     = InsertOddQnums(sq.NRCodes, numbering);
 }
Beispiel #15
0
        public static int InsertQuestion(string surveyCode, SurveyQuestion question)
        {
            using (SqlDataAdapter sql = new SqlDataAdapter())
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ISISConnectionString"].ConnectionString))
                {
                    conn.Open();

                    //
                }
            return(1);
        }
Beispiel #16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sq"></param>
        public void FormatRouting(SurveyQuestion sq)
        {
            QuestionRouting qr;

            // format the response options
            qr             = new QuestionRouting(sq.PstP, sq.RespOptions);
            sq.RespOptions = qr.ToString();

            // format the non-response options
            qr         = new QuestionRouting(sq.PstP, sq.NRCodes);
            sq.NRCodes = qr.ToString();

            // format the PstP
            sq.PstP = string.Join("\r\n", qr.RoutingText);
        }
Beispiel #17
0
        /// <summary>
        /// Returns a string that contains all the Survey Codes that match the provided SurveyQuestion.
        /// </summary>
        /// <param name="cq"></param>
        /// <returns></returns>
        private string GetSurveyList(SurveyQuestion cq)
        {
            //string list = "";
            List <string> list = new List <string>();

            foreach (SurveyQuestion sq in questions)
            {
                if (HarmonyMatch(sq, cq))
                {
                    list.Add(sq.SurveyCode);
                }
            }


            list.Sort();

            return(String.Join(", ", list.ToArray()));
        }
Beispiel #18
0
        public SurveyQuestion Copy()
        {
            SurveyQuestion sq;

            sq = new SurveyQuestion
            {
                //VarName = this.VarName,
                VarName = VarName,
                //RefVarName = RefVarName,
                Qnum             = Qnum,
                AltQnum          = AltQnum,
                AltQnum2         = AltQnum2,
                AltQnum3         = AltQnum3,
                PreviousNameList = PreviousNameList,
                //PreP = new Wording(this.PreP.ID, this.PreP.WordingText),
                PrePNum       = PrePNum,
                PreP          = PreP,
                PreINum       = PreINum,
                PreI          = PreI,
                PreANum       = PreANum,
                PreA          = PreA,
                LitQNum       = LitQNum,
                LitQ          = LitQ,
                PstINum       = PstINum,
                PstI          = PstI,
                PstPNum       = PstPNum,
                PstP          = PstP,
                RespName      = RespName,
                RespOptions   = RespOptions,
                NRName        = NRName,
                NRCodes       = NRCodes,
                NumCol        = NumCol,
                NumDec        = NumDec,
                NumFmt        = NumFmt,
                VarType       = VarType,
                ScriptOnly    = ScriptOnly,
                TableFormat   = TableFormat,
                CorrectedFlag = CorrectedFlag
            };

            return(sq);
        }
Beispiel #19
0
        /// <summary>
        /// Compares each translation field of the same language between 2 questions and determines if they are equal.
        /// </summary>
        /// <param name="sq1"></param>
        /// <param name="sq2"></param>
        /// <returns></returns>
        private bool AreTranslationsEqual(SurveyQuestion sq1, SurveyQuestion sq2)
        {
            foreach (Translation t1 in sq1.Translations)
            {
                Translation t2 = sq2.GetTranslation(t1.Language);

                if (t2 == null)
                {
                    return(false);
                }
                else
                {
                    if (t1.TranslationText == t2.TranslationText)
                    {
                        return(true);
                    }
                }
            }


            return(false);
        }
Beispiel #20
0
        /// <summary>
        /// Apply corrected wordings to the questions list. Overwrites the wording fields in the questions list with those found in the correctedQuestions list.
        /// </summary>
        public void CorrectWordings()
        {
            foreach (SurveyQuestion cq in CorrectedQuestions)
            {
                try
                {
                    SurveyQuestion sq = Questions.Single(x => x.ID == cq.ID);

                    sq.PreP        = cq.PreP;
                    sq.PreI        = cq.PreI;
                    sq.PreA        = cq.PreA;
                    sq.LitQ        = cq.LitQ;
                    sq.PstI        = cq.PstI;
                    sq.PstP        = cq.PstP;
                    sq.RespOptions = cq.RespOptions;
                    sq.NRCodes     = cq.NRCodes;
                }
                catch (ArgumentNullException)
                {
                }
            }
        }
Beispiel #21
0
        /// <summary>
        /// Determines the type of questions for the given row.
        /// </summary>
        /// <param name="row"></param>
        /// <returns>QuestionType enum based on the Qnum and VarName.</returns>
        public static QuestionType GetQuestionType(SurveyQuestion q)
        {
            string qnum    = q.Qnum;
            string varname = q.VarName.FullVarName;

            int    head = Int32.Parse(GetSeriesQnum(qnum));
            string tail = GetQnumSuffix(qnum);

            QuestionType qType;

            // get Question Type
            if (varname.StartsWith("Z"))
            {
                if (varname.EndsWith("s"))
                {
                    qType = QuestionType.Subheading; // subheading
                }
                else
                {
                    qType = QuestionType.Heading; // heading
                }
            }
            else if (varname.StartsWith("HG"))
            {
                qType = QuestionType.Standalone; // QuestionType.InterviewerNote; // interviewer note
            }
            else
            {
                if ((tail == "" || tail == "a") && (head != 0))
                {
                    qType = QuestionType.Standalone; // standalone or first in series
                }
                else
                {
                    qType = QuestionType.Series; // series
                }
            }
            return(qType);
        }
Beispiel #22
0
        /// <summary>
        /// Looks for any refVarName in the wording and places it's Qnum or AltQnum before the refVarName. This method does not detect unknown VarNames.
        /// </summary>
        /// <param name="wording"></param>
        /// <param name="numbering"></param>
        /// <returns></returns>
        private string InsertAllQnums(string wording, Enumeration numbering)
        {
            foreach (SurveyQuestion sq in Questions)
            {
                Regex rxReplace = new Regex("\\b" + sq.VarName.RefVarName + "\\b", RegexOptions.IgnoreCase);

                // if words[i] contains a variable name, look up the qnum and place it before the variable
                if (rxReplace.Match(wording).Success)
                {
                    SurveyQuestion foundQ = Questions.SingleOrDefault(x => x.VarName.RefVarName == sq.VarName.RefVarName);
                    string         qnum;
                    switch (numbering)
                    {
                    case Enumeration.Both:
                    case Enumeration.Qnum:
                        qnum = foundQ.Qnum;
                        break;

                    case Enumeration.AltQnum:
                        qnum = foundQ.AltQnum;
                        break;

                    default:
                        qnum = foundQ.Qnum;
                        break;
                    }

                    if (qnum.Equals(""))
                    {
                        QNUlist.Add(sq.VarName.RefVarName);
                        qnum = "QNU";
                    }

                    wording = rxReplace.Replace(wording, qnum + "/" + sq.VarName.RefVarName);
                }
            }

            return(wording);
        }
Beispiel #23
0
        /// <summary>
        /// Returns the variable name immediately preceding the heading that follows the provided heading question.
        /// </summary>
        /// <param name="sq"></param>
        /// <returns></returns>
        public string GetSectionUpperBound(SurveyQuestion sq)
        {
            if (!sq.VarName.FullVarName.StartsWith("Z"))
            {
                return(sq.VarName.FullVarName);
            }

            int  index     = 0;
            bool inSection = false;

            for (int i = 0; i < Questions.Count; i++)
            {
                if (Questions[i].VarName.Equals(sq.VarName))
                {
                    inSection = true;
                    continue;
                }

                if (Questions[i].VarName.FullVarName.StartsWith("Z") && inSection)
                {
                    index = i - 1;
                    break;
                }
            }
            // next heading not found, so we must be looking for the end of the survey
            if (index == 0)
            {
                return(Questions[Questions.Count - 1].VarName.FullVarName);
            }

            // if the next heading is the next question return nothing
            if (Questions[index].VarName.Equals(sq.VarName))
            {
                return("");
            }

            return(Questions[index].VarName.FullVarName);
        }
 /// <summary>
 /// Returns comments for the specified question.
 /// </summary>
 /// <param name="QID"></param>
 /// <returns></returns>
 public static List <QuestionComment> GetQuesCommentsByQID(SurveyQuestion question)
 {
     return(GetQuesCommentsByQID(question.ID));
 }
        //
        // Fill Methods
        //

        /// <summary>
        /// Populates the provided Survey's question list.
        /// </summary>
        /// <param name="s"></param>
        public static void FillQuestions(Survey s, bool clearBeforeFill = false)
        {
            if (clearBeforeFill)
            {
                s.Questions.Clear();
            }

            SurveyQuestion q;
            string         query = "SELECT * FROM Questions.FN_GetSurveyQuestions(@SID) ORDER BY Qnum";

            using (SqlDataAdapter sql = new SqlDataAdapter())
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ISISConnectionString"].ConnectionString))
                {
                    conn.Open();

                    sql.SelectCommand = new SqlCommand(query, conn);
                    sql.SelectCommand.Parameters.AddWithValue("@SID", s.SID);
                    try
                    {
                        using (SqlDataReader rdr = sql.SelectCommand.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                q = new SurveyQuestion
                                {
                                    ID         = (int)rdr["ID"],
                                    SurveyCode = (string)rdr["Survey"],
                                    // VarName = (string)rdr["VarName"],
                                    Qnum = (string)rdr["Qnum"],
                                    //PreP = new Wording((int)rdr["PreP#"], (string)rdr["PreP"]),
                                    PrePNum = (int)rdr["PreP#"],
                                    //PreP = (string)rdr["PreP"],
                                    PreINum = (int)rdr["PreI#"],
                                    // PreI = (string)rdr["PreI"],
                                    PreANum = (int)rdr["PreA#"],
                                    //PreA = (string)rdr["PreA"],
                                    LitQNum = (int)rdr["LitQ#"],
                                    // LitQ = (string)rdr["LitQ"],
                                    PstINum = (int)rdr["PstI#"],
                                    // PstI = (string)rdr["PstI"],
                                    PstPNum = (int)rdr["PstP#"],
                                    // PstP = (string)rdr["PstP"],
                                    RespName    = (string)rdr["RespName"],
                                    RespOptions = (string)rdr["RespOptions"],
                                    NRName      = (string)rdr["NRName"],
                                    NRCodes     = (string)rdr["NRCodes"],

                                    VarName = new VariableName((string)rdr["VarName"])
                                    {
                                        VarLabel = (string)rdr["VarLabel"],
                                        Domain   = new DomainLabel((int)rdr["DomainNum"], (string)rdr["Domain"]),
                                        Topic    = new TopicLabel((int)rdr["TopicNum"], (string)rdr["Topic"]),
                                        Content  = new ContentLabel((int)rdr["ContentNum"], (string)rdr["Content"]),
                                        Product  = new ProductLabel((int)rdr["ProductNum"], (string)rdr["Product"])
                                    },
                                    TableFormat   = (bool)rdr["TableFormat"],
                                    CorrectedFlag = (bool)rdr["CorrectedFlag"],
                                    NumCol        = (int)rdr["NumCol"],
                                    NumDec        = (int)rdr["NumDec"],
                                    VarType       = (string)rdr["VarType"],
                                    ScriptOnly    = (bool)rdr["ScriptOnly"]
                                };

                                if (!rdr.IsDBNull(rdr.GetOrdinal("AltQnum")))
                                {
                                    q.AltQnum = (string)rdr["AltQnum"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("AltQnum2")))
                                {
                                    q.AltQnum2 = (string)rdr["AltQnum2"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("AltQnum3")))
                                {
                                    q.AltQnum3 = (string)rdr["AltQnum3"];
                                }

                                if (!rdr.IsDBNull(rdr.GetOrdinal("PreP")))
                                {
                                    q.PreP = (string)rdr["PreP"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("PreI")))
                                {
                                    q.PreI = (string)rdr["PreI"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("PreA")))
                                {
                                    q.PreA = (string)rdr["PreA"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("LitQ")))
                                {
                                    q.LitQ = (string)rdr["LitQ"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("PstI")))
                                {
                                    q.PstI = (string)rdr["PstI"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("PstP")))
                                {
                                    q.PstP = (string)rdr["PstP"];
                                }

                                s.AddQuestion(q);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        return;
                    }
                }
        }
        /// <summary>
        /// Returns a list of questions from a backup database.
        /// </summary>
        /// <remarks>
        /// This could be achieved by changing the FROM clause in GetSurveyTable but often there are columns that don't exist in the backups, due to
        /// their age and all the changes that have happened to the database over the years.
        /// </remarks>
        public static List <SurveyQuestion> GetBackupQuestions(Survey s, DateTime backup)
        {
            List <SurveyQuestion> qs = new List <SurveyQuestion>();
            SurveyQuestion        q;
            DataTable             rawTable;
            //string filePath = backup.ToString("yyyy-MM-dd") + ".7z";
            BackupConnection bkp    = new BackupConnection(backup);
            string           select = "SELECT tblSurveyNumbers.[ID], [Qnum] AS SortBy, [Survey], tblSurveyNumbers.[VarName], refVarName, Qnum, AltQnum, CorrectedFlag, TableFormat, tblDomain.ID AS DomainNum, tblDomain.[Domain], " +
                                      "tblTopic.ID AS TopicNum, [Topic], tblContent.ID AS ContentNum, [Content], VarLabel, tblProduct.ID AS ProductNum, [Product], PreP, [PreP#], PreI, [PreI#], PreA, [PreA#], LitQ, [LitQ#], PstI, [PstI#], PstP, [PstP#], RespOptions, tblSurveyNumbers.RespName, NRCodes, tblSurveyNumbers.NRName ";

            string where = "Survey = '" + s.SurveyCode + "'";


            if (bkp.Connected)
            {
                Console.Write("unzipped");
                rawTable = bkp.GetSurveyTable(select, where);
            }
            else
            {
                // could not unzip backup/7zip not installed etc.
                return(null);
            }

            foreach (DataRow r in rawTable.Rows)
            {
                q = new SurveyQuestion();

                q.ID                  = (int)r["ID"];
                q.SurveyCode          = (string)r["Survey"];
                q.VarName.FullVarName = (string)r["VarName"];

                q.Qnum = (string)r["Qnum"];
                if (!DBNull.Value.Equals(r["AltQnum"]))
                {
                    q.AltQnum = (string)r["AltQnum"];
                }
                //q.PreP = new Wording(Convert.ToInt32(r["PreP#"]), (string)r["PreP"]);
                q.PrePNum = Convert.ToInt32(r["PreP#"]);
                q.PreP    = r["PreP"].Equals(DBNull.Value) ? "" : (string)r["PreP"];
                q.PreINum = Convert.ToInt32(r["PreI#"]);
                q.PreI    = r["PreI"].Equals(DBNull.Value) ? "" : (string)r["PreI"];
                q.PreANum = Convert.ToInt32(r["PreA#"]);
                q.PreA    = r["PreA"].Equals(DBNull.Value) ? "" : (string)r["PreA"];
                q.LitQNum = Convert.ToInt32(r["LitQ#"]);
                q.LitQ    = r["LitQ"].Equals(DBNull.Value) ? "" : (string)r["LitQ"];
                q.PstINum = Convert.ToInt32(r["PstI#"]);
                if (DBNull.Value.Equals(r["PstI"]))
                {
                    q.PstI = "";
                }
                else
                {
                    q.PstI = (string)r["PstI"];
                }
                q.PstPNum     = Convert.ToInt32(r["PstP#"]);
                q.PstP        = r["PstP"].Equals(DBNull.Value) ? "" : (string)r["PstP"];
                q.RespName    = (string)r["RespName"];
                q.RespOptions = r["RespOptions"].Equals(DBNull.Value) ? "" : (string)r["RespOptions"];
                q.NRName      = (string)r["NRName"];
                q.NRCodes     = r["NRCodes"].Equals(DBNull.Value) ? "" : (string)r["NRCodes"];

                q.VarName = new VariableName((string)r["VarName"])
                {
                    VarLabel = (string)r["VarLabel"],
                    Domain   = new DomainLabel((int)r["DomainNum"], (string)r["Domain"]),
                    Topic    = new TopicLabel((int)r["TopicNum"], (string)r["Topic"]),
                    Content  = new ContentLabel((int)r["ContentNum"], (string)r["Content"]),
                    Product  = new ProductLabel((int)r["ProductNum"], (string)r["Product"])
                };

                q.TableFormat   = (bool)r["TableFormat"];
                q.CorrectedFlag = (bool)r["CorrectedFlag"];

                qs.Add(q);
            }

            return(qs);
        }
Beispiel #27
0
 /// <summary>
 /// Removes the question from the Survey's question list.
 /// </summary>
 /// <param name="newQ"></param>
 public void RemoveQuestion(SurveyQuestion q)
 {
     Questions.Remove(q);
     UpdateEssentialQuestions();
 }
Beispiel #28
0
        /// <summary>
        /// Return a string that contains the values of the match fields.
        /// </summary>
        /// <param name="sq"></param>
        /// <returns></returns>
        private string GetGroupByFields(SurveyQuestion sq)
        {
            List <string> matchFieldValues = new List <string>();

            foreach (string s in matchFields)
            {
                if (s.Equals("PreP"))
                {
                    matchFieldValues.Add(Convert.ToString(sq.PrePNum));
                }

                if (s.Equals("PreI"))
                {
                    matchFieldValues.Add(Convert.ToString(sq.PreINum));
                }

                if (s.Equals("PreA"))
                {
                    matchFieldValues.Add(Convert.ToString(sq.PreANum));
                }

                if (s.Equals("LitQ"))
                {
                    matchFieldValues.Add(Convert.ToString(sq.LitQNum));
                }

                if (s.Equals("PstI"))
                {
                    matchFieldValues.Add(Convert.ToString(sq.PstINum));
                }

                if (s.Equals("PstP"))
                {
                    matchFieldValues.Add(Convert.ToString(sq.PstPNum));
                }

                if (s.Equals("RespOptions"))
                {
                    matchFieldValues.Add(sq.RespName);
                }

                if (s.Equals("NRCodes"))
                {
                    matchFieldValues.Add(sq.NRName);
                }

                if (s.Equals("Domain"))
                {
                    matchFieldValues.Add(sq.VarName.Domain.LabelText);
                }

                if (s.Equals("Topic"))
                {
                    matchFieldValues.Add(sq.VarName.Topic.LabelText);
                }

                if (s.Equals("Content"))
                {
                    matchFieldValues.Add(sq.VarName.Content.LabelText);
                }

                if (s.Equals("Product"))
                {
                    matchFieldValues.Add(sq.VarName.Product.LabelText);
                }

                if (s.Equals("VarLabel"))
                {
                    matchFieldValues.Add(sq.VarName.VarLabel);
                }

                if (s.Equals("Translation"))
                {
                    matchFieldValues.Add(Lang);
                }
            }

            return(String.Join(", ", matchFieldValues));
        }
Beispiel #29
0
        /// <summary>
        /// Returns true if the provided SurveyQuestion objects are equal in terms of refVarName and the match fields.
        /// </summary>
        /// <param name="sq1"></param>
        /// <param name="sq2"></param>
        /// <returns></returns>
        public bool HarmonyMatch(SurveyQuestion sq1, SurveyQuestion sq2)
        {
            bool prepMatch = false, preiMatch = false, preaMatch = false, litqMatch = false, pstiMatch = false, pstpMatch = false, roMatch = false, nrMatch = false;
            bool tranMatch = false;

            if (!matchFields.Contains("PreP"))
            {
                prepMatch = true;
            }
            if (!matchFields.Contains("PreI"))
            {
                preiMatch = true;
            }
            if (!matchFields.Contains("PreA"))
            {
                preaMatch = true;
            }
            if (!matchFields.Contains("LitQ"))
            {
                litqMatch = true;
            }
            if (!matchFields.Contains("PstI"))
            {
                pstiMatch = true;
            }
            if (!matchFields.Contains("PstP"))
            {
                pstpMatch = true;
            }
            if (!matchFields.Contains("RespOptions"))
            {
                roMatch = true;
            }
            if (!matchFields.Contains("NRCodes"))
            {
                nrMatch = true;
            }
            if (!matchFields.Contains("Translation"))
            {
                tranMatch = true;
            }

            foreach (string s in matchFields)
            {
                if (s.Equals("PreP"))
                {
                    prepMatch = (sq1.PreP == sq2.PreP);
                }

                if (s.Equals("PreI"))
                {
                    preiMatch = (sq1.PreI == sq2.PreI);
                }

                if (s.Equals("PreA"))
                {
                    preaMatch = (sq1.PreA == sq2.PreA);
                }

                if (s.Equals("LitQ"))
                {
                    litqMatch = (sq1.LitQ == sq2.LitQ);
                }

                if (s.Equals("PstI"))
                {
                    pstiMatch = (sq1.PstI == sq2.PstI);
                }

                if (s.Equals("PstP"))
                {
                    pstpMatch = (sq1.PstP == sq2.PstP);
                }

                if (s.Equals("RespOptions"))
                {
                    roMatch = (sq1.RespOptions == sq2.RespOptions);
                }

                if (s.Equals("NRCodes"))
                {
                    nrMatch = (sq1.NRCodes == sq2.NRCodes);
                }

                if (s.Equals("Translation"))
                {
                    tranMatch = (sq1.GetTranslationText(Lang) == sq2.GetTranslationText(Lang));
                }
            }

            return(prepMatch && preiMatch && preaMatch && litqMatch && pstiMatch & pstpMatch && roMatch && nrMatch);
        }
        /// <summary>
        /// Retrieves a set of records for a particular VarName and returns a list of SurveyQuestion objects.
        /// </summary>
        /// <param name="refvarname">A valid VarName.</param>
        /// <param name="surveyGlob">Survey code pattern.</param>
        /// <returns>List of SurveyQuestions</returns>
        public static List <SurveyQuestion> GetRefVarNameQuestionsGlob(string refvarname, string surveyGlob)
        {
            List <SurveyQuestion> qs = new List <SurveyQuestion>();
            SurveyQuestion        q;
            string query = "SELECT * FROM Questions.FN_GetRefVarNameQuestionsGlob(@refvarname, @surveyPattern) ORDER BY Qnum";

            using (SqlDataAdapter sql = new SqlDataAdapter())
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ISISConnectionString"].ConnectionString))
                {
                    conn.Open();

                    sql.SelectCommand = new SqlCommand(query, conn);
                    sql.SelectCommand.Parameters.AddWithValue("@refVarName", refvarname);
                    sql.SelectCommand.Parameters.AddWithValue("@surveyPattern", surveyGlob.Replace("*", "%"));
                    try
                    {
                        using (SqlDataReader rdr = sql.SelectCommand.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                q = new SurveyQuestion
                                {
                                    ID         = (int)rdr["ID"],
                                    SurveyCode = (string)rdr["Survey"],
                                    //VarName = (string)rdr["VarName"],
                                    Qnum = (string)rdr["Qnum"],
                                    //PreP = new Wording((int)rdr["PreP#"], (string)rdr["PreP"]),
                                    PrePNum     = (int)rdr["PreP#"],
                                    PreP        = (string)rdr["PreP"],
                                    PreINum     = (int)rdr["PreI#"],
                                    PreI        = (string)rdr["PreI"],
                                    PreANum     = (int)rdr["PreA#"],
                                    PreA        = (string)rdr["PreA"],
                                    LitQNum     = (int)rdr["LitQ#"],
                                    LitQ        = (string)rdr["LitQ"],
                                    PstINum     = (int)rdr["PstI#"],
                                    PstI        = (string)rdr["PstI"],
                                    PstPNum     = (int)rdr["PstP#"],
                                    PstP        = (string)rdr["PstP"],
                                    RespName    = (string)rdr["RespName"],
                                    RespOptions = (string)rdr["RespOptions"],
                                    NRName      = (string)rdr["NRName"],
                                    NRCodes     = (string)rdr["NRCodes"],
                                    VarName     = new VariableName((string)rdr["VarName"])
                                    {
                                        VarLabel = (string)rdr["VarLabel"],
                                        Domain   = new DomainLabel((int)rdr["DomainNum"], (string)rdr["Domain"]),
                                        Topic    = new TopicLabel((int)rdr["TopicNum"], (string)rdr["Topic"]),
                                        Content  = new ContentLabel((int)rdr["ContentNum"], (string)rdr["Content"]),
                                        Product  = new ProductLabel((int)rdr["ProductNum"], (string)rdr["Product"])
                                    },
                                    TableFormat   = (bool)rdr["TableFormat"],
                                    CorrectedFlag = (bool)rdr["CorrectedFlag"],
                                    NumCol        = (int)rdr["NumCol"],
                                    NumDec        = (int)rdr["NumDec"],
                                    VarType       = (string)rdr["VarType"],
                                    ScriptOnly    = (bool)rdr["ScriptOnly"]
                                };

                                if (!rdr.IsDBNull(rdr.GetOrdinal("AltQnum")))
                                {
                                    q.AltQnum = (string)rdr["AltQnum"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("AltQnum2")))
                                {
                                    q.AltQnum2 = (string)rdr["AltQnum2"];
                                }
                                if (!rdr.IsDBNull(rdr.GetOrdinal("AltQnum3")))
                                {
                                    q.AltQnum3 = (string)rdr["AltQnum3"];
                                }

                                qs.Add(q);
                            }
                        }
                    }
                    catch (Exception)
                    {
                    }
                }

            return(qs);
        }