Ejemplo n.º 1
0
        public void FormResultDelete(def_FormResults fr)
        {
            /*
             * *** NOTE: this code does NOT work correctly. ***
             * *** Needs to be replaced with a Stored Procedure ***
             * *** same for DeleteItemResult  ***
             */
            try
            {
                GetFormResultItemResults(fr);
                Debug.WriteLine("* * *  FormsRepository  FormResultDelete  ItemResults count: " + fr.def_ItemResults.Count.ToString());
                for (int i = 0; i < fr.def_ItemResults.Count; i++)
                {
                    def_ItemResults ir = fr.def_ItemResults.ToList()[i];
                    DeleteItemResult(ir);
                }
                // Read again to eliminate the associated Collections (doesn't seem to work)
                // def_FormResults frmRslt = GetFormResultById(fr.formResultId);
                db.def_FormResults.Remove(fr);
                Save();
            }
            catch (SqlException qex)
            {
                Debug.WriteLine("* * *  FormsRepository  FormResultDelete SqlException: " + qex.Message);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("* * *  FormsRepository  DeleteFormResult exception: " + ex.Message);
            }

            return;
        }
        public def_ItemResults SaveItemResult(int formResultId, int itmId)
        {
            // Add/Update Item Result
            def_ItemResults itemResult = formsRepo.GetItemResultByFormResItem(formResultId, itmId);

            if (itemResult == null)
            {
                // Add the ItemResult
                itemResult = new def_ItemResults()
                {
                    formResultId  = formResultId,
                    itemId        = itmId,
                    sessionStatus = 0,
                    dateUpdated   = DateTime.Now
                };

                formsRepo.AddItemResultNoSave(itemResult);
            }
            else
            {
                // Update the ItemResult
                itemResult.dateUpdated = DateTime.Now;
            }

            return(itemResult);
        }
        public bool SaveFileUploads(int formResultId, HttpRequestBase httpRequest)
        {
            //for debugging runtime
            //DateTime startTime = DateTime.Now;
            Debug.WriteLine("***  SaveFileUploads formResultId: " + formResultId.ToString());

            // This section handles files uploaded as part of an HTML file upload
            if ((httpRequest != null) && (httpRequest.Files != null))
            {
                foreach (string key in httpRequest.Files.AllKeys)
                {
                    def_ItemVariables iv = formsRepo.GetItemVariableByIdentifier(key);
                    if (iv != null)
                    {
                        HttpPostedFileWrapper upload = (HttpPostedFileWrapper)httpRequest.Files[iv.identifier];
                        if (upload.ContentLength > 0)
                        {
                            // RRB 11/10/15 moved to Business layer
                            // val = formsRepo.SaveUpload(upload, iv.identifier, SessionHelper.SessionForm.formResultId);
                            string rspVal = Assmnts.Business.Uploads.FileUploads.SaveUpload(
                                upload.InputStream, Path.GetFileName(upload.FileName), iv.identifier, formResultId);

                            def_ItemResults ir = SaveItemResult(formResultId, iv.itemId);
                            SaveResponseVariable(ir, iv, rspVal);
                        }
                    }
                }

                // All responses are now in Entity Framework, so Save all the Entities to the Forms Repository
                formsRepo.Save();
            }

            return(true);
        }
        private void UpdateResponse(string itemVariableIdentifier, string response)
        {
            def_ItemVariables iv = formsRepo.GetItemVariableByIdentifier(itemVariableIdentifier);

            if (iv == null)
            {
                throw new Exception("Cannot find itemVariable with identifier \"" + itemVariableIdentifier + "\"");
            }
            def_ItemResults ir = userData.SaveItemResult(toFormResultId, iv.itemId);

            userData.SaveResponseVariable(ir, iv, response);
        }
        /// <summary>
        /// Get the application data from Ramsell in their XML format.
        /// Nearly identical to the XML format that is sent to Ramsell
        /// </summary>
        /// <param name="oauthToken">Oauth 2 security token</param>
        /// <param name="fromMemberId">Ramsell MemberId</param>
        /// <returns></returns>
        public int ImportApplication(string oauthToken, string fromMemberId)
        {
            string decodedXml = Services.Api.Ramsell.GetApplicationXml(oauthToken, fromMemberId);

            if (String.IsNullOrWhiteSpace(decodedXml))
            {
                throw new Exception("received empty response from Ramsell for memberId \"" + fromMemberId + "\"");
            }

            // Process the XML returned from Ramsell
            List <string> checkedBoxes = new List <string>();
            Dictionary <string, string> specialCaseValuesByTagname = new Dictionary <string, string>();

            using (System.Xml.XmlReader reader = XmlReader.Create(new StringReader(decodedXml)))
            {
                //iterate through each element node in the file
                while (reader.Read())
                {
                    //tags "string" and "Patient" are boilerplate, they can be ignored (this doesn't skip their children)
                    if ((reader.NodeType != XmlNodeType.Element) || (reader.Name == "string") || (reader.Name == "Patient"))
                    {
                        continue;
                    }

                    //update DEF responses based on tagname + contents
                    ImportXmlNodeFromRamsell(reader, checkedBoxes, specialCaseValuesByTagname);
                }
            }

            //for any checkboxes that are included in the "ramsellIdentifierMap" in RamsellExport.cs,
            //uncheck the ones that weren't included in the xml
            List <string> checkboxIvIdentifiers = GetGroupedCheckboxItemVarIdentifiers();

            foreach (string checkboxIvIdent in checkboxIvIdentifiers)
            {
                if (checkedBoxes.Contains(checkboxIvIdent))
                {
                    continue;
                }
                def_ItemVariables checkBoxIv = formsRepo.GetItemVariableByIdentifier(checkboxIvIdent);
                def_ItemResults   ir         = userData.SaveItemResult(toFormResultId, checkBoxIv.itemId);
                userData.SaveResponseVariable(ir, checkBoxIv, "0");
            }

            //handle any special-case ramsell tags that require on-off transformations
            RamsellTransformations.ImportSpecialCasesNoSave(specialCaseValuesByTagname, toFormResultId, formsRepo);

            formsRepo.Save();

            return(0);
        }
        protected string GetSingleResponse(def_Items itm)
        {
            def_ItemResults ir = formsRepo.GetItemResultByFormResItem(formResultId, itm.itemId);

            if (ir == null)
            {
                return(String.Empty);
            }

            formsRepo.GetItemResultsResponseVariables(ir);
            def_ResponseVariables rv = ir.def_ResponseVariables.FirstOrDefault();

            return((rv == null) ? String.Empty : rv.rspValue);
        }
Ejemplo n.º 7
0
        public void CreateEligibilityField(string identifier)
        {
            //  Get the FormResult to get the subject of the current Application
            def_FormResults fr = formsRepo.GetFormResultById(SessionHelper.SessionForm.formResultId);

            // Get the Eligibility Form for the subject
            IEnumerable <def_FormResults> frElgList = formsRepo.GetFormResultsByFormSubject(18, fr.subject);
            var frmRes = frElgList.First <def_FormResults>();
            Dictionary <string, string> DataToPopulate = new Dictionary <string, string>();

            DataToPopulate.Add(identifier, string.Empty);

            foreach (String s in DataToPopulate.Keys)
            {
                def_Items       item = formsRepo.GetItemByIdentifier(s + "_item");
                def_ItemResults ir   = new def_ItemResults()
                {
                    itemId        = item.itemId,
                    sessionStatus = 0,
                    dateUpdated   = DateTime.Now
                };

                var itemResult = formsRepo.GetItemResultByFormResItem(frmRes.formResultId, item.itemId);
                if (itemResult == null)
                {
                    frmRes.def_ItemResults.Add(ir);
                }
                else
                {
                    ir = itemResult;
                }

                foreach (var iv in formsRepo.GetItemVariablesByItemId(item.itemId))
                {
                    // Note for General forms like ADAP there should only be 1 ItemVariable per Item
                    def_ResponseVariables rv = new def_ResponseVariables();
                    rv.itemVariableId = iv.itemVariableId;
                    // rv.rspDate = DateTime.Now;    // RRB 11/11/15 The date, fp, and int fields are for the native data conversion.
                    rv.rspValue = DataToPopulate[s];

                    formsRepo.ConvertValueToNativeType(iv, rv);
                    ir.def_ResponseVariables.Add(rv);
                }
            }

            formsRepo.Save();
        }
Ejemplo n.º 8
0
        public static void UpdateScoreResponseNoSave(IFormsRepository formsRepo, int formResultId, string itemVariableIdent, double response)
        {
            //if response exists already...
            def_ResponseVariables rv = formsRepo.GetResponseVariablesByFormResultIdentifier(formResultId, itemVariableIdent);

            if (rv != null)
            {
                rv.rspValue = response.ToString();
            }

            //if not...
            def_ItemVariables iv = formsRepo.GetItemVariableByIdentifier(itemVariableIdent);

            if (iv == null)
            {
                throw new Exception("could not find itemVariable with identifier \"" + itemVariableIdent + "\"");
            }
            def_ItemResults ir = formsRepo.GetItemResultByFormResItem(formResultId, iv.itemId);

            if (ir == null)
            {
                ir = new def_ItemResults()
                {
                    itemId        = iv.itemId,
                    formResultId  = formResultId,
                    dateUpdated   = DateTime.Now,
                    sessionStatus = 0
                };
                formsRepo.AddItemResult(ir);
            }
            rv = ir.def_ResponseVariables.FirstOrDefault(trv => trv.itemVariableId == iv.itemVariableId);
            if (rv == null)
            {
                rv = new def_ResponseVariables()
                {
                    itemResultId   = ir.itemResultId,
                    itemVariableId = iv.itemVariableId,
                    rspValue       = response.ToString()
                };
                formsRepo.AddResponseVariable(rv);
            }
            else
            {
                rv.rspValue = response.ToString();
            }
        }
        private void SaveAssessmentFromDataTable(int formResultId, DataTable dt)
        {
            int prevItemId = -1;

            def_ItemResults itemResult = null;

            foreach (DataRow row in dt.Rows)
            {
                int    currItemId     = Int32.Parse(row["itemId"].ToString());
                int    itemVariableId = Int32.Parse(row["itemVariableId"].ToString());
                string rspValue       = row["rspValue"].ToString();

                if (currItemId != prevItemId)
                {
                    itemResult               = new def_ItemResults();
                    itemResult.dateUpdated   = DateTime.Now;
                    itemResult.itemId        = currItemId;
                    itemResult.sessionStatus = 0;
                    itemResult.formResultId  = formResultId;

                    formsRepo.AddItemResultNoSave(itemResult);
                }

                if (itemResult != null)
                {
                    def_ResponseVariables responseVariable = new def_ResponseVariables();
                    responseVariable.itemVariableId = itemVariableId;
                    responseVariable.rspValue       = rspValue;

                    def_ItemVariables itemVariable = formsRepo.GetItemVariableById(itemVariableId);

                    if (itemVariable != null)
                    {
                        formsRepo.ConvertValueToNativeType(itemVariable, responseVariable);

                        itemResult.def_ResponseVariables.Add(responseVariable);
                    }
                }
                prevItemId = currItemId;
            }

            formsRepo.Save();
        }
Ejemplo n.º 10
0
        private void InsertNewResponse(def_FormResults fr, string ivIdentifier, string response)
        {
            def_ItemVariables iv = formsRepo.GetItemVariableByIdentifier(ivIdentifier);

            def_ResponseVariables rv = new def_ResponseVariables()
            {
                itemVariableId = iv.itemVariableId,
                rspValue       = response
            };

            def_ItemResults ir = new def_ItemResults()
            {
                itemId                = iv.itemId,
                sessionStatus         = 0,
                dateUpdated           = DateTime.Now,
                def_ResponseVariables = { rv }
            };

            fr.def_ItemResults.Add(ir);
        }
Ejemplo n.º 11
0
        public def_ResponseVariables SaveResponseVariable(def_ItemResults ir, def_ItemVariables iv, string val)
        {
            // Add / Update the associated Response Variable in the database
            def_ResponseVariables rv = ir.def_ResponseVariables.Where(rrv => rrv.itemVariableId == iv.itemVariableId).FirstOrDefault();

            if (rv == null)
            {
                rv = new def_ResponseVariables()
                {
                    //itemResultId = ir.itemResultId,
                    itemVariableId = iv.itemVariableId,
                    rspValue       = val
                };

                try
                {
                    formsRepo.ConvertValueToNativeType(iv, rv);
                }
                catch (Exception xcptn)
                {
                    Debug.WriteLine(iv.identifier + " Exception: " + xcptn.Message);
                }

                ir.def_ResponseVariables.Add(rv);
            }
            else
            {
                rv.rspValue = val;
                try
                {
                    formsRepo.ConvertValueToNativeType(iv, rv);
                }
                catch (Exception xcptn)
                {
                    Debug.WriteLine(iv.identifier + " Exception: " + xcptn.Message);
                }
            }

            return(rv);
        }
        //Public instance methods

        /// <summary>
        /// Used by the create application method to populate the application with data from UAS.
        /// Creates a new forms result object for the application.
        /// </summary>
        /// <param name="subjectUserId">Numerical Identifier of the user creating a new application.</param>
        /// <param name="formId">Numerical Identifier of the form to use for the new application</param>
        /// <param name="DataToPopulate">Dictionary object listing the items to be pulled from UAS.</param>
        /// <returns>Returns the forms result object created by this method.</returns>
        public def_FormResults CreateFormResultPopulatedFromUAS(int entId, int groupId, int subjectUserId, int formId, Dictionary <string, string> DataToPopulate)
        {
            Debug.WriteLine("*** populateFromUAS ***");
            def_FormResults frmRes = Assmnts.Models.FormResults.CreateNewFormResultModel(formId.ToString());

            frmRes.EnterpriseID = entId;
            frmRes.GroupID      = groupId;
            frmRes.subject      = subjectUserId;
            frmRes.interviewer  = subjectUserId;
            frmRes.assigned     = subjectUserId;
            frmRes.reviewStatus = 0;

            foreach (String s in DataToPopulate.Keys)
            {
                def_Items       item = formsRepo.GetItemByIdentifier(s);
                def_ItemResults ir   = new def_ItemResults()
                {
                    itemId        = item.itemId,
                    sessionStatus = 0,
                    dateUpdated   = DateTime.Now
                };

                frmRes.def_ItemResults.Add(ir);

                foreach (var iv in formsRepo.GetItemVariablesByItemId(item.itemId))
                {
                    // Note for General forms like ADAP there should only be 1 ItemVariable per Item
                    def_ResponseVariables rv = new def_ResponseVariables();
                    rv.itemVariableId = iv.itemVariableId;
                    // rv.rspDate = DateTime.Now;    // RRB 11/11/15 The date, fp, and int fields are for the native data conversion.
                    rv.rspValue = DataToPopulate[s];

                    formsRepo.ConvertValueToNativeType(iv, rv);
                    ir.def_ResponseVariables.Add(rv);
                }
            }

            Debug.WriteLine("PopulateFromUAS FormResults populated.");
            return(frmRes);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// called by RamsellImport
        /// </summary>
        /// <param name="specialCaseValuesByTagname"></param>
        /// <param name="toFormResultId"></param>
        /// <param name="formsRepo"></param>
        public static void ImportSpecialCasesNoSave(Dictionary <string, string> specialCaseValuesByTagname, int toFormResultId, IFormsRepository formsRepo)
        {
            UserData ud = new UserData(formsRepo);

            foreach (string ramsellTagName in specialCaseValuesByTagname.Keys)
            {
                Transformation matchingTrans = GetTransformationforRamsellTagName(ramsellTagName);
                if (matchingTrans == null)
                {
                    continue;
                }

                //prepare in/out vars for the transformation
                Dictionary <string, string> inRamsellValsByTag = new Dictionary <string, string>();
                foreach (string tag in matchingTrans.GetRamsellTagNames())
                {
                    inRamsellValsByTag.Add(tag, specialCaseValuesByTagname.ContainsKey(tag) ? specialCaseValuesByTagname[tag] : null);
                }

                //output is pre-populated with existing responses - though they are typically ignored by transformations
                Dictionary <string, string> outRspValsByItmVar = new Dictionary <string, string>();
                foreach (string ivIdentifier in matchingTrans.GetItemVariableIdentifiers())
                {
                    def_ResponseVariables existingRv = formsRepo.GetResponseVariablesByFormResultIdentifier(toFormResultId, ivIdentifier);
                    outRspValsByItmVar.Add(ivIdentifier, existingRv == null ? null : existingRv.rspValue);
                }

                //run transformation
                matchingTrans.GetImportValuesByItemVarIdentifier(inRamsellValsByTag, outRspValsByItmVar);

                //insert output values into DB
                foreach (string ivIdent in outRspValsByItmVar.Keys)
                {
                    def_ItemVariables iv = formsRepo.GetItemVariableByIdentifier(ivIdent);
                    def_ItemResults   ir = ud.SaveItemResult(toFormResultId, iv.itemId);
                    ud.SaveResponseVariable(ir, iv, outRspValsByItmVar[ivIdent]);
                }
            }
        }
        public void PopulateItemsFromPrevApplication(def_FormResults frmRes, string[] previousApplicationItemIdentifiers)
        {
            Debug.WriteLine("*** PopulateItemsFromPrevApplication ***");
            //Convert.ToInt32(frmRes.subject);
            IQueryable <def_FormResults> query = formsRepo.GetFormResultsByFormId(frmRes.formId);

            query = query.Where(q => q.subject == frmRes.subject);
            query = query.OrderByDescending(q => q.dateUpdated);
            def_FormResults prevApp = query.FirstOrDefault();

            if (prevApp != null)
            {
                foreach (string s in previousApplicationItemIdentifiers)
                {
                    def_Items item = formsRepo.GetItemByIdentifier(s);
                    if (item != null)
                    {
                        def_ItemResults noExist =
                            (from check in frmRes.def_ItemResults.OfType <def_ItemResults>()
                             where check.itemId == item.itemId
                             select check).FirstOrDefault();

                        // *** RRB 11/12/15 - test if the statements above/below are equivalent
                        // bool itmRsltExists = frmRes.def_ItemResults.Any(ir => ir.itemId == item.itemId);

                        // ItemResult may have been populated by UAS.
                        if (noExist == null)
                        {
                            def_ItemResults ir = new def_ItemResults()
                            {
                                itemId        = item.itemId,
                                sessionStatus = 0,
                                dateUpdated   = DateTime.Now
                            };
                            frmRes.def_ItemResults.Add(ir);

                            def_ItemResults prevItmRslt =
                                (from prev in prevApp.def_ItemResults.OfType <def_ItemResults>()
                                 where prev.itemId == item.itemId
                                 select prev).FirstOrDefault();

                            // *** RRB 11/12/15 - test if the statements above/below are equivalent
                            // bool PrevItmRsltExists = prevApp.def_ItemResults.Any(pir => pir.itemId == item.itemId);

                            if (prevItmRslt != null)
                            {
                                def_ResponseVariables prevRV =
                                    (from prev in prevItmRslt.def_ResponseVariables.OfType <def_ResponseVariables>()
                                     where prev.itemResultId == prevItmRslt.itemResultId
                                     select prev).FirstOrDefault();

                                // *** RRB 11/12/15 - test if the statements above/below are equivalent
                                // bool prevRspVarExists = prevItmRslt.def_ResponseVariables.Any(prv => prv.itemResultId == prevItmRslt.itemResultId);

                                foreach (var iv in formsRepo.GetItemVariablesByItemId(item.itemId))
                                {
                                    // Note for General forms like ADAP there should only be 1 ItemVariable per Item
                                    def_ResponseVariables rv = new def_ResponseVariables();
                                    rv.itemVariableId = iv.itemVariableId;
                                    // rv.rspDate = DateTime.Now;  RRB - 11/12/15 - populated by ConvertValueToNative below if necessary.
                                    rv.rspValue = (prevRV != null) ? prevRV.rspValue : String.Empty;

                                    try {
                                        formsRepo.ConvertValueToNativeType(iv, rv);
                                    }
                                    catch (Exception e) {
                                        Debug.WriteLine("error converting response to native type for itemvariable \""
                                                        + iv.identifier + "\": " + e.Message);
                                    }

                                    ir.def_ResponseVariables.Add(rv);
                                }
                            }
                        }
                    }
                }
            }
        }
        //Private instance methods

        private void PopulateItems(def_FormResults formResult, def_FormResults previousFormResult, List <ItemToPrepopulate> itemsToPrepopulate)
        {
            List <Tuple <def_Items, ItemToPrepopulate> > itemTuples = new List <Tuple <def_Items, ItemToPrepopulate> >();

            foreach (ItemToPrepopulate itemToPrepopulate in itemsToPrepopulate)
            {
                def_Items item = formsRepo.GetItemByIdentifier(itemToPrepopulate.Title + Constants.CAADAP.IDENTIFIER_SUFFIX);                 //This is coming from cache
                if (item != null)
                {
                    item = new def_Items(item);                     //We can't modify an item from the cache
                    itemTuples.Add(new Tuple <def_Items, ItemToPrepopulate>(item, itemToPrepopulate));
                }
            }
            if (itemTuples.Count == 0)
            {
                return;
            }

            formsRepo.GetItemLabelsResponses(previousFormResult.formResultId, itemTuples.Select(x => x.Item1).ToList());

            foreach (var itemTuple in itemTuples)
            {
                def_Items         item = itemTuple.Item1;
                ItemToPrepopulate itemToPrepopulate  = itemTuple.Item2;
                def_ItemResults   itemResult         = formResult.def_ItemResults.Where(x => x.itemId == item.itemId).FirstOrDefault();
                def_ItemResults   previousItemResult = item.def_ItemResults.FirstOrDefault();
                def_ItemVariables itemVariable       = item.def_ItemVariables.FirstOrDefault();
                if (previousItemResult == null || itemVariable == null)
                {
                    continue;
                }
                def_ResponseVariables previousResponseVariable = itemVariable.def_ResponseVariables.FirstOrDefault();
                if (previousResponseVariable != null && !String.IsNullOrWhiteSpace(previousResponseVariable.rspValue))
                {
                    bool addItemResult       = false;
                    bool addResponseVariable = false;
                    if (itemResult == null)
                    {
                        itemResult = new def_ItemResults()
                        {
                            itemId        = item.itemId,
                            sessionStatus = 0,
                            dateUpdated   = DateTime.Now
                        };
                        addItemResult = true;
                    }
                    def_ResponseVariables responseVariable = itemResult.def_ResponseVariables.FirstOrDefault();
                    if (responseVariable == null)
                    {
                        responseVariable = new def_ResponseVariables {
                            itemVariableId = itemVariable.itemVariableId
                        };
                        addResponseVariable = true;
                    }
                    if (String.IsNullOrWhiteSpace(responseVariable.rspValue))
                    {
                        bool documentCopyFailed = false;
                        if (itemToPrepopulate.Document.HasValue && itemToPrepopulate.Document.Value)
                        {
                            string newSaveDirectoryPath = Assmnts.Business.Uploads.FileUploads.GetSaveDirectoryPath(formResult.formResultId, itemToPrepopulate.Title);
                            string newDocumentPath;
                            if (TryCopyDocument(previousResponseVariable.rspValue, newSaveDirectoryPath, out newDocumentPath))
                            {
                                responseVariable.rspValue = newDocumentPath;
                            }
                            else
                            {
                                documentCopyFailed = true;
                            }
                        }
                        else
                        {
                            //The item is not a document, just copy the value
                            responseVariable.rspValue = previousResponseVariable.rspValue;
                            try {
                                formsRepo.ConvertValueToNativeType(itemVariable, responseVariable);
                            }
                            catch (Exception ex) {
                                Debug.WriteLine("error converting response to native type for itemvariable \""
                                                + itemVariable.identifier + "\": " + ex.Message);
                            }
                        }
                        if (!documentCopyFailed)
                        {
                            if (addResponseVariable)
                            {
                                itemResult.def_ResponseVariables.Add(responseVariable);
                            }
                            if (addItemResult)
                            {
                                itemResult.dateUpdated = DateTime.Now;
                                formResult.def_ItemResults.Add(itemResult);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 16
0
        protected void PrintSupportNeedsGraph(PdfOutput output, int ageInYears)
        {
            Debug.WriteLine("PrintSupportNeedsGraph() method.");

            new Assessments(formsRepo).UpdateAssessmentScores(formResults);

            def_Parts prt = formsRepo.GetPartByFormAndIdentifier(form, "Section 2. Supports Needs Index");

            formsRepo.GetPartSections(prt);
            int row = 0, nRows = prt.def_PartSections.Count();

            double[]      percentiles       = new double[nRows];
            string[][]    supNeedsTableVals = new string[nRows][];
            List <string> subscaleLabels    = new List <string>();

            Debug.WriteLine("     Print Part 3");
            foreach (def_PartSections ps in prt.def_PartSections)
            {
                // Debug.WriteLine("     ps.sectionId: " + ps.sectionId.ToString());
                def_Sections sct = formsRepo.GetSectionById(ps.sectionId);
                subscaleLabels.Add(sct.title);
                Debug.WriteLine("     sct.sectionId: " + sct.sectionId.ToString());


                //pull subscale scores from database
                string sctNumberLetter = sct.title.Substring(0, sct.title.IndexOf('.'));
                double totalRawScore   = getScoreResponse("scr_" + sctNumberLetter + "_raw");
                double standardScore   = getScoreResponse("scr_" + sctNumberLetter + "_std");
                double rawScoreAvg     = getScoreResponse("scr_" + sctNumberLetter + "_avg");
                double percentile      = getScoreResponse("scr_" + sctNumberLetter + "_pct");
                double confidenceLow   = Math.Max(0, standardScore - 1);
                double confidenceHigh  = standardScore + 1;

                percentiles[row] = percentile;
                string rowLabel = sct.title.Replace("ActivitiesHI", "");
                rowLabel = rowLabel.Replace("and Neighborhood", "...");
                supNeedsTableVals[row] = new string[] {
                    rowLabel,
                    (form.formId == 1) ? totalRawScore.ToString() : String.Format("{0:0.##}", rawScoreAvg),
                    standardScore.ToString(),
                    percentile.ToString(),
                    confidenceLow + "-" + confidenceHigh
                };

                row++;
            }

            //pull overall scores from database
            double totalRawScoreTotal       = getScoreResponse("scr_total_rawscores_all_SIS_sections");
            double standardScoreTotal       = getScoreResponse("scr_standard_score_total");
            double compositeIndex           = getScoreResponse("scr_support_needs_index");
            double compositePercentile      = getScoreResponse("scr_sni_percentile_rank");
            double totalRating              = getScoreResponse("scr_total_rating");
            double meanRating               = Math.Round((double)totalRating / 7, 2); //usd only for SIS-C reports

            AppendPartHeader(output, "Support Needs Profile - Graph");

            output.appendWrappedText("The graph provides a visual presentation of the six life activity areas from section 2. ", .5, 7.5);

            output.drawY -= .1;
            output.appendWrappedText("The graph reflects the pattern and intensity of the individual’s level of support. "
                                     + "The intent of the graph is to provide an easy means to prioritize the life activity areas in consideration "
                                     + "of setting goals and developing the Individual Support Plan. ", .5, 7.5);

            output.drawY -= .15;

            if (options[OptionKey.includeScores])
            {
                output.appendSimpleTable(
                    new string[] { "Activities Subscale", (form.formId == 1) ? "Total Raw Score" : "Average Raw Score",
                                   "Standard Score", "Percentile", "Confidence Interval (95%)" },
                    supNeedsTableVals,
                    new double[] { 0, .35, .35, .3, .35 });
                output.drawY -= PdfOutput.itemSpacing;

                if (form.identifier.Equals("SIS-A"))
                {
                    //for SIS-A, add a row to the bottom of the table, with totals
                    output.DrawLine(.75, output.drawY + .05, 7.75, output.drawY + .05, .01);
                    output.appendSimpleTable(
                        new string[] { "Total:",
                                       totalRawScoreTotal.ToString(),
                                       standardScoreTotal.ToString(), "", "" },
                        new string[0][],
                        new double[] { 0, .35, .35, .3, .35 },
                        new double[] { .08, .35, .35, .3, .35 }
                        );

                    output.drawY -= .2;
                }
                else
                {
                    //for SIS-C
                    output.appendItem("Overall Mean Rating", String.Format("{0:0.##}", meanRating), 2);
                }

                output.appendItem("SIS Support Needs Index", compositeIndex.ToString(), 2);
                output.appendItem("Percentile", compositePercentile.ToString(), 2);
                output.drawY -= PdfOutput.itemSpacing;
            }

            //AppendPartHeader(output, "Support Needs Profile");
            AppendReportChart(output, subscaleLabels.ToArray(), percentiles, compositePercentile);

            if (!options[OptionKey.includeScores])
            {
                return;
            }

            if (form.identifier.Equals("SIS-A"))
            {
                Debug.WriteLine("     Print Part 4");
                prt = formsRepo.GetPartByFormAndIdentifier(form, "Section 3. Supplemental Protection and Advocacy Scale");
                formsRepo.GetPartSections(prt);
                List <def_Sections> scts   = formsRepo.GetSectionsInPart(prt);
                def_Sections        proSct = scts[0];
                if (proSct == null)
                {
                    throw new Exception("could not find any sections in part \"Section 3. Supplemental Protection and Advocacy Scale\"");
                }

                List <def_Items> proItms = formsRepo.GetSectionItems(proSct);  // getItemsInSection(proSct);
                // RRB 3/17/15 - this is hokey, but not sure how else to do it at this point w/o the SectionItems.
                //                  should be checking SectionItems.subSectionId != null
                // Prune out the subSections (this is
                for (int i = 0; i < proItms.Count; i++)
                {
                    if (proItms[i].itemId == 1)
                    {
                        proItms.Remove(proItms[i]);
                    }
                }

                int        nProItms        = proItms.Count();
                string[][] supProTableVals = new string[nProItms][];
                for (int i = 0; i < nProItms; i++)
                {
                    def_Items itm      = proItms[i];
                    int       rawScore = 0;
                    // def_ItemResults itmResults = itm.def_ItemResults.SingleOrDefault(ir => ir.formResultId == formResultId);
                    def_ItemResults itmResults = formsRepo.GetItemResultByFormResItem(formResultId, itm.itemId);
                    for (int j = 0; j < 3; j++)
                    {
                        string suffix   = SupportNeedsColumnSuffixes[j];
                        string rspValue = null;

                        try
                        {
                            rspValue = itmResults.def_ResponseVariables.SingleOrDefault(rv => rv.def_ItemVariables.identifier.EndsWith(suffix)).rspValue;
                        }
                        catch (System.NullReferenceException ex)
                        {
                            Debug.Print("for itemId " + itm.itemId + ", could not find responseVariable linked to itemVariableIdentifier with suffix \"" + suffix + "\"");
                        }

                        try
                        {
                            rawScore += Int16.Parse(rspValue);
                        }
                        catch (Exception ex)
                        {
                            Debug.Print("could not parse integer from response value \"" + rspValue + "\"");
                        }
                    }

                    supProTableVals[i]    = new string[2];
                    supProTableVals[i][0] = itm.label;
                    supProTableVals[i][1] = rawScore.ToString();
                }

                output.drawY -= PdfOutput.itemSpacing;
                AppendPartHeader(output, "Section 3: Supplemental Protection and Advocacy Scale");
                output.appendSimpleTable(new string[] { "Protection and Advocacy Activities", "Raw Score" }, supProTableVals, new double[] { 0, .2 });

                output.drawY -= .2;
                output.appendWrappedText("The support needs profile reflects the pattern and intensity of the "
                                         + "individual’s support. The information provided in sections 1, 2, and 3, can be beneficial "
                                         + "in the development of the individual’s support plan.", .5, 7.5);
            }
        }
        /// <summary>
        /// Save the ItemResults and ResponseVariables associated with a SectionItem.
        /// </summary>
        /// <param name="sctn"></param>
        /// <param name="frmCllctn"></param>
        /// <param name="formResultId"></param>
        private void SaveSectionItems(def_Sections sctn, FormCollection frmCllctn, int formResultId)
        {
            Debug.WriteLine("* * *  UserData.SaveFormCollection:SaveSectionItems ==> " + sctn.sectionId.ToString() + ": " + sctn.title);

            formsRepo.GetSectionItems(sctn);
            foreach (def_SectionItems sctnItm in sctn.def_SectionItems)
            {
                // Skip the subSections (only process Items)
                if (sctnItm.subSectionId.GetValueOrDefault() > 0)
                {
                    continue;
                }
                // Get item variables from cache
                var itemVariables = formsRepo.GetItemVariablesByItemId(sctnItm.itemId);
                foreach (var itemVariable in itemVariables)
                {
                    var deleteResponseVariable = false;
                    if (frmCllctn.AllKeys.Contains("DELETE_RESPONSE_FROM_DB_" + itemVariable.identifier))
                    {
                        deleteResponseVariable = true;
                    }
                    if (frmCllctn.AllKeys.Contains(itemVariable.identifier) || deleteResponseVariable)
                    {
                        string value = frmCllctn[itemVariable.identifier];
                        value = value == null ? String.Empty : value.Trim();

                        // HTML encode the value
                        value = AntiXssEncoder.HtmlEncode(value, false);

                        try {
                            #region Comment1
                            // OT  03/10/16 - no, so far this isn't used for any screens outside of ADAP.
                            //                  but it could be used for other inputs or special one-off code
                            //                  e.g. within cshtml, a "gender=male" dropdown option could be set up to automatically
                            //                  delete any existing responses to a "pregnancy" item in a different section
                            // RRB 01/16/16 - this seems to be ADAP specific code for the Income HTML screen.
                            //                  Is it meant to be used for other inputs as well??
                            // OT 9/16/15 - added possibility to explicitly delete responses (in order to fix Bug 12652, comment 64, part 1)
                            #endregion
                            if (deleteResponseVariable)
                            {
                                def_ResponseVariables rvToDelete = formsRepo.GetResponseVariablesByFormResultItemVarId(formResultId, itemVariable.itemVariableId);
                                formsRepo.DeleteResponseVariableNoSave(rvToDelete);
                            }
                            else if (itemVariable.baseTypeId == 1 && value.Equals("unanswered", StringComparison.InvariantCultureIgnoreCase))
                            {
                                #region Comment2
                                // *** IMPORTANT ***
                                // Use the FormCollection from the HTML form to collect the values entered on the screen.
                                // This requires that ALL templates must use fields (INPUT, etc.) that have the 'name' attribute match the ItemVariable 'identifier'
                                // So using MVC Razor fields will probably not work (at least I couldn't get it to work).

                                // RRB 1/30/15 - since text fields aren't being returned if unchanged, need to skip them or the data will get deleted when iv.identifier not found!!
                                //          *** The problem this may cause is that there will be ItemResults w/o ResponseVariables ***

                                // OT 2/6/15 - for boolean itemVariables that are missing from formCollection, they will be given the default value of false (empty string) rather than being skipped

                                // OT 9/2/15 - undid change from 2/6/15, boolean itemvariables missing from formCollection will not be given a response variable
                                // RB 9/7/15 - undid change from 9/2/15, checkboxes not being Saved due to 'unchecked' not being sent from HTML Form.
                                //if (!frmCllctn.AllKeys.Contains(iv.identifier) && (iv.baseTypeId != 1)) {
                                //    continue;
                                //}

                                //string val = frmCllctn.AllKeys.Contains(iv.identifier) ? frmCllctn[iv.identifier].Trim() : String.Empty;

                                // OT 3/24/16 - I thought we were already doing this: "unanswered" response to booleans should be saved as nulls (Bug 13132, #1 in description)
                                #endregion

                                value = null;
                            }
                            def_ItemResults itemResult = SaveItemResult(formResultId, itemVariable.itemId);
                            if (!deleteResponseVariable)
                            {
                                SaveResponseVariable(itemResult, itemVariable, value);
                            }
                        }
                        catch (Exception ex) {
                            Debug.WriteLine("* * *  FormResultsSave SaveSectionItems Dictionary item not found. ==> " + itemVariable.identifier + ": " + ex.Message);
                            throw new Exception("* * *  FormResultsSave SaveSectionItems Dictionary item not found. ==> " + itemVariable.identifier + ": " + ex.Message);
                        }
                    }
                }
            }
        }
Ejemplo n.º 18
0
        public static string ImportFormResultJSON(IFormsRepository formsRepo, string json)
        {
            string result = String.Empty;

            try
            {
                var dFormResults = fastJSON.JSON.Parse(json);
                Dictionary <string, Object> resDict = (Dictionary <string, Object>)dFormResults;

                ////add the def_FormResults object to the database, which will assign and return a formResultId
                //int formRsltId = formsRepo.AddFormResult((def_FormResults) dFormResults);

                def_FormResults formResult = new def_FormResults()
                {
                    formId        = Convert.ToInt32(resDict["formId"]),
                    dateUpdated   = DateTime.Now,
                    formStatus    = Convert.ToByte(resDict["formStatus"]),
                    sessionStatus = Convert.ToByte(resDict["sessionStatus"])
                };

                int formRsltId = formsRepo.AddFormResult(formResult);

                List <Object> itemObjectList = (List <Object>)resDict["def_ItemResults"];
                foreach (Object o in itemObjectList)
                {
                    Dictionary <string, object> dict        = (Dictionary <string, object>)o;
                    def_ItemResults             itemResults = new def_ItemResults
                    {
                        formResultId  = formRsltId,
                        itemId        = Convert.ToInt32(dict["itemId"]),
                        sessionStatus = Convert.ToInt32(dict["sessionStatus"]),
                        dateUpdated   = Convert.ToDateTime(dict["dateUpdated"])
                    };

                    int itemResultId = formsRepo.AddItemResult(itemResults);

                    List <Object> respVarObjectList = (List <Object>)dict["def_ResponseVariables"];

                    foreach (Object r in respVarObjectList)
                    {
                        Dictionary <string, object> rDict = (Dictionary <string, object>)r;

                        DateTime?date;
                        if (rDict["rspDate"] == null)
                        {
                            date = null;
                        }
                        else
                        {
                            date = Convert.ToDateTime(rDict["rspDate"]);
                        }

                        def_ResponseVariables dResponseVariables = new def_ResponseVariables
                        {
                            itemResultId   = itemResultId,
                            itemVariableId = Convert.ToInt32(rDict["itemVariableId"]),
                            rspInt         = Convert.ToInt32(rDict["rspInt"]),
                            rspFloat       = Convert.ToDouble(rDict["rspFloat"]),
                            rspDate        = date,
                            rspValue       = Convert.ToString(rDict["rspValue"])
                        };

                        formsRepo.AddResponseVariableNoSave(dResponseVariables);
                    }
                }

                formsRepo.Save();

                //pass the formResultId to the return value container
                result = formRsltId.ToString();

                AccessLogging.InsertAccessLogRecord(formsRepo, formRsltId, (int)AccessLogging.accessLogFunctions.IMPORT, "Imported assessment from JSON.");
            }
            catch (Exception excptn)
            {
                Debug.WriteLine("Def3WebServices.LoadFormResultJSON exception:" + excptn.Message);
            }

            return(result);
        }
Ejemplo n.º 19
0
        public static int UpdateSisScoresNoSave(
            IFormsRepository formsRepo,
            def_Forms frm,
            int formResultId,
            SubscaleCatagory[] subscales,
            Func <int, double, SubscaleCatagory, double> GetSubscaleStandardScore,
            Func <int, double, SubscaleCatagory, double> GetSubscalePercentile)
        {
            DateTime startTime = DateTime.Now;

            updateSection1ScoresNoSave(formsRepo, frm, formResultId);
            if (frm.identifier == "SIS-A")
            {
                updateSection3ScoresNoSave(formsRepo, frm, formResultId);
            }

            double standardScoreTotal = 0, totalRating = 0;
            int    totalRawScoreTotal = 0;
            int    standardScoreCount = 0;

            foreach (SubscaleCatagory cat in subscales)
            {
                def_Sections sct = GetSectionForSubscaleCatagory(frm, cat);
                formsRepo.SortSectionItems(sct);

                int totalRawScore = 0, countRawScore = 0;


                foreach (def_SectionItems si in sct.def_SectionItems)
                {
                    if (si.subSectionId != null)        // skip the Subsections
                    {
                        continue;
                    }
                    def_Items itm = formsRepo.GetItemById(si.itemId);
                    // def_ItemResults itmResults = itm.def_ItemResults.SingleOrDefault(ir => ir.formResultId == formResultId);
                    def_ItemResults itmResults = formsRepo.GetItemResultByFormResItem(formResultId, itm.itemId);
                    if (itmResults == null)
                    {
                        continue;
                    }
                    formsRepo.GetItemResultsResponseVariables(itmResults);
                    foreach (def_ResponseVariables rv in itmResults.def_ResponseVariables)
                    {
                        rv.def_ItemVariables = formsRepo.GetItemVariableById(rv.itemVariableId);
                    }
                    for (int i = 0; i < 3; i++)
                    {
                        string suffix   = SupportNeedsColumnSuffixes[i];
                        string rspValue = null;

                        def_ResponseVariables rv = itmResults.def_ResponseVariables.SingleOrDefault(trv => trv.def_ItemVariables.identifier.EndsWith(suffix));
                        if (rv != null)
                        {
                            rspValue = rv.rspValue;
                        }

                        if (!String.IsNullOrWhiteSpace(rspValue))
                        {
                            int rspInt;
                            if (Int32.TryParse(rspValue, out rspInt))
                            {
                                totalRawScore += rspInt;
                                countRawScore++;
                            }
                            else
                            {
                                Debug.WriteLine("* * * Skipping item on updating scores: " +
                                                "Could not parse integer from response value \"{0}\" for itemVariable \"{1}\". (formResultID {2})",
                                                rv.rspValue, rv.def_ItemVariables.identifier, formResultId);
                                Debug.Print("could not parse integer from response value \"" + rspValue + "\"");
                            }
                        }
                    }
                }

                double rawScoreAvg   = Math.Round((double)totalRawScore / countRawScore, 2);
                double standardScore = GetSubscaleStandardScore(totalRawScore, rawScoreAvg, cat); //totalRawScore / 5;
                double percentile    = GetSubscalePercentile(totalRawScore, rawScoreAvg, cat);    //totalRawScore;

                //save subscale scores to database
                string sctNumberLetter = sct.title.Substring(0, sct.title.IndexOf('.'));
                UpdateScoreResponseNoSave(formsRepo, formResultId, "scr_" + sctNumberLetter + "_raw", totalRawScore);
                UpdateScoreResponseNoSave(formsRepo, formResultId, "scr_" + sctNumberLetter + "_std", standardScore);
                UpdateScoreResponseNoSave(formsRepo, formResultId, "scr_" + sctNumberLetter + "_avg", rawScoreAvg);
                UpdateScoreResponseNoSave(formsRepo, formResultId, "scr_" + sctNumberLetter + "_pct", percentile);

                standardScoreTotal += standardScore;
                totalRawScoreTotal += totalRawScore;
                totalRating        += rawScoreAvg;
                standardScoreCount++;
            }

            //save overall scores to database
            //int compositeIndex = GetSupportNeedsIndex((int)standardScoreTotal);//19;
            //int compositePercentile = GetSupportNeedsPercentile((int)standardScoreTotal);
            UpdateScoreResponseNoSave(formsRepo, formResultId, "scr_total_rawscores_all_SIS_sections", totalRawScoreTotal);
            UpdateScoreResponseNoSave(formsRepo, formResultId, "scr_standard_score_total", standardScoreTotal);
            //saveResponse(formsRepo, formResultId, "scr_support_needs_index", compositeIndex);
            //saveResponse(formsRepo, formResultId, "scr_sni_percentile_rank", compositePercentile);
            UpdateScoreResponseNoSave(formsRepo, formResultId, "scr_total_rating", totalRating);

            TimeSpan duration = DateTime.Now - startTime;

            Debug.WriteLine("* * *  SharedScoring:UpdateSisScores COMPLETED IN " + duration.ToString());
            return((int)standardScoreTotal);
        }
Ejemplo n.º 20
0
        public static void updateSection3ScoresNoSave(
            IFormsRepository formsRepo,
            def_Forms frm,
            int formResultId)
        {
            if (frm.identifier == "SIS-C")
            {
                return;
            }

            string       sectionIdentifier = "SIS-A 3";
            def_Sections sct = formsRepo.GetSectionByIdentifier(sectionIdentifier);

            if (sct == null)
            {
                throw new Exception("Could not find section with identifier \"" + sectionIdentifier + "\"");
            }
            int rawTotal = 0;

            foreach (def_SectionItems si in sct.def_SectionItems)
            {
                if (si.subSectionId != null)        // skip the Subsections
                {
                    continue;
                }
                def_Items itm = formsRepo.GetItemById(si.itemId);
                // def_ItemResults itmResults = itm.def_ItemResults.SingleOrDefault(ir => ir.formResultId == formResultId);
                def_ItemResults itmResults = formsRepo.GetItemResultByFormResItem(formResultId, itm.itemId);
                if (itmResults == null)
                {
                    continue;
                }
                formsRepo.GetItemResultsResponseVariables(itmResults);
                foreach (def_ResponseVariables rv in itmResults.def_ResponseVariables)
                {
                    rv.def_ItemVariables = formsRepo.GetItemVariableById(rv.itemVariableId);
                }
                for (int i = 0; i < 3; i++)
                {
                    string suffix   = SupportNeedsColumnSuffixes[i];
                    string rspValue = null;

                    def_ResponseVariables rv = itmResults.def_ResponseVariables.SingleOrDefault(trv => trv.def_ItemVariables.identifier.EndsWith(suffix));
                    if (rv != null)
                    {
                        rspValue = rv.rspValue;
                    }

                    if (!String.IsNullOrWhiteSpace(rspValue))
                    {
                        int rawScore;
                        if (Int32.TryParse(rv.rspValue, out rawScore))
                        {
                            rawTotal += rawScore;
                        }
                        else
                        {
                            Debug.WriteLine("* * * Skipping item on updating section 1 scores: " +
                                            "Could not parse integer from response value \"{0}\" for itemVariable \"{1}\". (formResultID {2})",
                                            rv.rspValue, rv.def_ItemVariables.identifier, formResultId);
                        }
                    }
                }
            }

            UpdateScoreResponseNoSave(formsRepo, formResultId, "scr_3_raw_total", rawTotal);
        }
Ejemplo n.º 21
0
        public void SaveBatchResponses(Dictionary <int, Dictionary <int, string[]> > rspValsByIvByItem, int[] formResultIds)
        {
            DateTime startTime = DateTime.Now;

            try
            {
                using (formsEntities tempCtx = DataContext.GetDbContext())
                {
                    for (int i = 0; i < formResultIds.Length; i++)
                    {
                        int frId = formResultIds[i];

                        def_FormResults fr = tempCtx.def_FormResults.Where(frt => frt.formResultId == frId).SingleOrDefault();
                        foreach (int itmId in rspValsByIvByItem.Keys)
                        {
                            Dictionary <int, string[]> rspValsByIv = rspValsByIvByItem[itmId];
                            def_ItemResults            ir          = new def_ItemResults()
                            {
                                itemId        = itmId,
                                sessionStatus = 0,
                                dateUpdated   = DateTime.Now
                            };

                            foreach (int ivId in rspValsByIv.Keys)
                            {
                                string rspVal = rspValsByIv[ivId][i];
                                ir.def_ResponseVariables.Add(new def_ResponseVariables()
                                {
                                    itemVariableId = ivId,
                                    rspValue       = rspVal
                                });
                            }

                            fr.def_ItemResults.Add(ir);
                        }

                        tempCtx.def_FormResults.Attach(fr);
                        tempCtx.Entry(fr).State = EntityState.Modified;
                    }
                    tempCtx.SaveChanges();
                }
            }
            catch (DbEntityValidationException dbEx)
            {
                Debug.WriteLine("* * *  FormsRepository  SaveBatchResponses DbEntityValidationException: " + dbEx.Message);
                foreach (DbEntityValidationResult devr in dbEx.EntityValidationErrors)
                {
                    foreach (DbValidationError dve in devr.ValidationErrors)
                    {
                        Debug.WriteLine("    DbEntityValidationResult: " + dve.ErrorMessage);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("* * *  FormsRepository  SaveBatchResponses exception: " + ex.Message);
            }

            Debug.WriteLine("* * * FormsRepository  SaveBatchResponses completed in " + (DateTime.Now - startTime).Ticks + " ticks");

            return;
        }
Ejemplo n.º 22
0
        /// <summary>
        /// New function to handle a uploading an assessment in the JSON format created in the FormsSql CreateFormResultJSON.
        ///
        /// Reads in a form result record first and updates it.
        ///
        /// Adds/modifies item results and response variables for this form result.
        ///
        /// Item result and response variable data is in the following order:
        ///
        /// responseVariableId, itemId, itemVariableId, rspValue
        ///
        /// The data is sorted by itemId
        ///
        /// responseVariableId is only included so that the data table on the client side has a primary key
        /// (we may find a better way to do this later)
        /// </summary>
        /// <param name="json"></param>
        /// <returns>string - Exception message if any.</returns>

        public static string UpdateAssessmentJSONVenture(IFormsRepository formsRepo, string json)
        {
            string result = String.Empty;

            try
            {
                var dResults = fastJSON.JSON.Parse(json);
                Dictionary <string, Object> resDict = (Dictionary <string, Object>)dResults;

                Dictionary <string, object> formResultDict = (Dictionary <string, object>)resDict["FormResult"];

                // Find the form result we are updating.
                def_FormResults formResult = formsRepo.GetFormResultById(Int32.Parse(formResultDict["newFormResultId"].ToString()));

                // Update the form result's data (More values can be added here as needed to fill in other def_FormResults table fields)
                if (formResult != null)
                {
                    // 4/4/2016 Bug #13143 LK All uploaded assessments should have completed status; some were being set to uploaded somehow. Sets to completed.
                    formResult.formStatus  = 2; // Hard code status "2" for "Complete" (all uploaded assessments must be Complete). To see other formStatus, visit: AJBoggs.Sis.Domain.FormResults_formStatus. OLD code: //Byte.Parse(formResultDict["formStatus"].ToString());
                    formResult.dateUpdated = DateTime.Parse(formResultDict["dateUpdated"].ToString());
                    formResult.interviewer = Int32.Parse(formResultDict["interviewer"].ToString());
                }

                // Get a list of all the data

                List <object> data = (List <object>)resDict["Data"];

                def_ItemResults itemResult = null;

                bool newItemResult = false;


                // Loop over the data items and process them, adding/modifying item results and response variables as needed
                foreach (object dataValue in data)
                {
                    // Order of data in this list is: responseVariableId, itemId, itemVariableId, rspValue
                    Dictionary <string, object> dataValueDict = (Dictionary <string, object>)dataValue;

                    int itemId = Int32.Parse(dataValueDict["itemId"].ToString());


                    // Find the item result corresponding to the form result and item
                    if (itemResult == null)
                    {
                        itemResult = formsRepo.GetItemResultByFormResItem(formResult.formResultId, itemId);
                    }
                    else if (itemResult.itemId != itemId) // we have moved on to the next item
                    {
                        // if the item result was new, and it has response variables, it is added to the item result list of the form result
                        // (this will be saved later)
                        if (newItemResult == true && itemResult.def_ResponseVariables.Count > 0)
                        {
                            formResult.def_ItemResults.Add(itemResult);
                            newItemResult = false;
                        }

                        // Attempt to get the next item result
                        itemResult = formsRepo.GetItemResultByFormResItem(formResult.formResultId, itemId);
                    }

                    // Create a new item result if it doesn't already exist
                    if (itemResult == null)
                    {
                        itemResult               = new def_ItemResults();
                        itemResult.itemId        = itemId;
                        itemResult.formResultId  = formResult.formResultId;
                        itemResult.sessionStatus = 0;
                        newItemResult            = true;
                    }

                    // Set the date updated for the item result (new or old) to now
                    itemResult.dateUpdated = DateTime.Now;


                    int itemVariableId = Int32.Parse(dataValueDict["itemVariableId"].ToString());

                    string rspValue = String.Empty;
                    if (dataValueDict["rspValue"] != null)
                    {
                        rspValue = dataValueDict["rspValue"].ToString();
                    }

                    // Attempt to find a response variable corresponding to the item variable id and form result
                    def_ResponseVariables responseVariable = formsRepo.GetResponseVariablesByFormResultItemVarId(formResult.formResultId, itemVariableId);

                    def_ItemVariables itemVariable = formsRepo.GetItemVariableById(itemVariableId);

                    // If no response variable is found, create one, convert it, and add it to the item result's response variable collection
                    if (responseVariable == null)
                    {
                        responseVariable = new def_ResponseVariables();
                        responseVariable.itemVariableId = itemVariableId;
                        responseVariable.rspValue       = rspValue;

                        formsRepo.ConvertValueToNativeType(itemVariable, responseVariable);

                        itemResult.def_ResponseVariables.Add(responseVariable);
                    }
                    else // A response variable was found. Change the value and convert it.
                    {
                        responseVariable.rspValue = rspValue;

                        formsRepo.ConvertValueToNativeType(itemVariable, responseVariable);
                    }
                }

                // After all changes are made, save everything.
                formsRepo.Save();

                // check is this assessment has been scored.  If not, update the scores.
                def_ItemVariables     iv = formsRepo.GetItemVariableByIdentifier("scr_total_rawscores_all_SIS_sections");
                def_ResponseVariables rv = formsRepo.GetResponseVariablesByFormResultItemVarId(formResult.formResultId, iv.itemVariableId);
                if (rv == null || String.IsNullOrEmpty(rv.rspValue))
                {
                    new Assessments(formsRepo).UpdateAssessmentScores(formResult);
                }

                try
                {
                    // Add access log record for check in.
                    AccessLogging.InsertAccessLogRecord(formsRepo, formResult.formResultId, (int)AccessLogging.accessLogFunctions.CHECK_IN, "Check in of assessment from Venture by " + SessionHelper.LoginInfo.LoginID);

                    // Add status log record for check in.
                    ReviewStatus.ChangeStatus(formsRepo, formResult, ReviewStatus.CHECKED_IN, "Checked in from Venture by " + SessionHelper.LoginInfo.LoginID);

                    // Change assessment status to completed (multiple workflows determined by enterprise; has separate method from ChangeStatus)
                    ReviewStatus.AssessmentIsCompleted(formsRepo, formResult);

                    // If webservice is enabled, add record to webservice activity table
                    if (WebServiceActivity.IsWebServiceEnabled())
                    {
                        WebServiceActivity.CallWebService(formsRepo, (int)WebServiceActivity.webServiceActivityFunctions.UPLOAD, "formResultId=" + formResult.formResultId.ToString());
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.StackTrace);
                }
            }
            catch (Exception excptn)
            {
                // If any exception is thrown, put the messages from it into the result returned to the client for troubleshooting purposes.

                Debug.WriteLine("JsonImports UpdateAssessmentJSON exception:" + excptn.Message);
                Debug.WriteLine(excptn.StackTrace);
                result = excptn.Message + "\n" + excptn.StackTrace;
                if ((excptn.InnerException != null) && (excptn.InnerException.Message != null))
                {
                    result = result + "\n " + excptn.InnerException.Message;
                }
                Debug.WriteLine("JsonImports UpdateAssessmentJSONVenture exception json:" + json);
            }


            return(result);
        }
Ejemplo n.º 23
0
        // This is for the sets of items that have 3 numerical response values
        private void BuildDetailedResponseTable(def_Parts part, PdfOutput output, def_Sections sct)
        {
            int nCols = 6;

            string[] headers = { sct.title, "", "Freq", "Time", "Type", "Important \"To\" or \"For\"" };
            double[] indents = { .5, .75, 5.3, 5.6, 5.95, 6.75 };

            //headers
            output.drawY -= .1;
            for (int i = 0; i < nCols; i++)
            {
                output.DrawText(output.boldFont, output.fontSize, indents[i], output.drawY, headers[i]);
            }
            output.drawY += .13; output.appendSectionBreak();
            output.drawY -= PdfOutput.itemSpacing;

            indents = new double[] { .5, .75, 5.38, 5.73, 6.05, 6.75 };
            List <def_Items> itms = formsRepo.GetSectionItems(sct);

            // Values
            for (int row = 0; row < itms.Count; row++)
            {
                def_Items       itm        = itms[row];
                def_ItemResults itmResults = formsRepo.GetItemResultByFormResItem(formResultId, itm.itemId);
                formsRepo.GetItemResultsResponseVariables(itmResults);
                foreach (def_ResponseVariables rv in itmResults.def_ResponseVariables)
                {
                    rv.def_ItemVariables = formsRepo.GetItemVariableById(rv.itemVariableId);
                }

                output.drawY -= .1;
                for (int col = 0; col < nCols; col++)
                {
                    string s = "ERROR";
                    switch (col)
                    {
                    case 0:
                        s = (row + 1).ToString();
                        break;

                    case 1:
                        s = itm.label;
                        break;

                    case 2:
                    case 3:
                    case 4:
                        s = null;
                        string suffix = SupportNeedsColumnSuffixes[col - 2];
                        try
                        {
                            //Debug.WriteLine("\titemvariableId= " + ivEnum.Current.itemVariableId);
                            s = itmResults.def_ResponseVariables.SingleOrDefault(rv => rv.def_ItemVariables.identifier.EndsWith(suffix)).rspValue;
                        }
                        catch (System.NullReferenceException ex)
                        {
                            Debug.Print("for itemId " + itm.itemId + ", could not find responseVariable linked to itemVariableIdentifier with suffix \"" + suffix + "\"");
                            Debug.Print("   NullReferenceException: " + ex.Message);
                        }
                        s = String.IsNullOrEmpty(s) ? "N/A" : s;
                        break;

                    case 5:
                        s = String.Empty;
                        break;
                    }
                    output.DrawText(output.contentFont, output.fontSize, indents[col], output.drawY, s);
                }
                output.drawY -= PdfOutput.itemSpacing * 2.5;
                if (output.drawY < 1)
                {
                    output.appendPageBreak();
                }
            }

            output.drawY -= .1;
            output.DrawText(output.boldFont, output.fontSize, indents[1], output.drawY, "Page Notes:");
            output.drawY -= PdfOutput.itemSpacing * 4;
            if (output.drawY < 1)
            {
                output.appendPageBreak();
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// Process a single node from an XML improted from Ramsell, modifying the specified formResult as applicable.
        /// Noramlly this will only be called from within a loop to iterate over xml nodes, however this function will recurse to handle Ramsell's "income" structures
        /// </summary>
        /// <param name="fromReader">XmlReader where Read() has already been called</param>
        /// <param name="checkedBoxes">this should ba appended to with itemVariable identifiers for each checked checkbox. Used to uncheck excluded boxes at the end of the import</param>
        /// <param name="specialCaseValuesByTagname">this will be used to run special-case transformations that may involve multiple ramsell tags</param>
        private void ImportXmlNodeFromRamsell(
            XmlReader fromReader,
            List <string> checkedBoxes,
            Dictionary <string, string> specialCaseValuesByTagname)
        {
            if (fromReader.NodeType != XmlNodeType.Element)
            {
                throw new Exception("Expecting NodeType \"" + XmlNodeType.Element + "\", found \"" + fromReader.NodeType + "\"");
            }
            string ramellTagName = fromReader.Name;

            //the "Income_Item" tag is a one-off structure with multiple occurances
            if (ramellTagName == "Income_Item")
            {
                ImportIncomeStructureFromRamsell(fromReader);
                return;
            }

            //get the nodes contents
            string ramsellVal = String.Empty;

            if (!fromReader.IsEmptyElement)
            {
                fromReader.Read();
                if (fromReader.NodeType == XmlNodeType.EndElement)
                {
                    return;
                }
                if (fromReader.NodeType != XmlNodeType.Text)
                {
                    throw new Exception("Inside of node \"" + ramellTagName + "\", found NodeType \"" + fromReader.NodeType
                                        + "\", expecting NodeType \"" + XmlNodeType.Text + "\", or \"" + XmlNodeType.EndElement + "\"");
                }
                ramsellVal = fromReader.Value;
            }


            //based on tagName, check if this a simple case (no transformation necessary)
            List <string> ivIdentifiers = RamsellExport.GetItemVariableIdentifiersForRamsellTagName(ramellTagName);

            if (ivIdentifiers.Count == 1)
            {
                //one-to-one case: this ramsell tagName corresponds with exactly one itemVariable
                //so just save the text contents as a response to that itemVariable

                // RRB 4/18/16 Ramsell seems to be sending a default date of 1900-01-01
                //              This should be tested more.  If doesn't fix, maybe our date converter is causing an empty DOB to be this date.
                if (ramellTagName.Equals("DOB") && (string.IsNullOrEmpty(ramsellVal) || ramsellVal.StartsWith("1900")))
                {
                    ;
                }
                else
                {
                    UpdateResponse(ivIdentifiers[0], ramsellVal);
                }
            }
            else if (ivIdentifiers.Count > 1)
            {
                //checkbox case: this ramsell tagName corresponds to a set of itemVariables (representing checkboxes in the application)
                //so pick the checkbox based on this node's text contents, and save the response "1" for that checkbox
                #region checkbox case

                //based on lookups, pick the inidividual itemvariable (matchIv) that matches the node contents (ramsellVal)
                def_ItemVariables matchIv = null;
                foreach (string ivIdent in ivIdentifiers)
                {
                    def_ItemVariables iv = formsRepo.GetItemVariableByIdentifier(ivIdent);
                    if (iv.baseTypeId == 1)
                    {
                        def_LookupMaster lm = formsRepo.GetLookupMastersByLookupCode(iv.identifier);
                        if (lm != null)
                        {
                            List <def_LookupDetail> ld = formsRepo.GetLookupDetailsByLookupMasterEnterprise(lm.lookupMasterId, SessionHelper.LoginStatus.EnterpriseID);
                            if (ld.Where(ldt => ramsellVal == ldt.dataValue).Any())
                            {
                                matchIv = iv;
                                break;
                            }
                        }
                    }
                }

                //save the respones "1" to the single matched itemVariable, and add it to the "checkedBoxes" list
                //at the end of the import, any grouped checkboxes that haven't been added to that list will be unchecked
                if (matchIv == null)
                {
                    Debug.WriteLine("* * * RamsellImport: Could not find matching itemVariable for ramsell tag/value \"" + ramellTagName + "/" + ramsellVal + "\", skipping...");
                }
                else
                {
                    def_ItemResults ir = userData.SaveItemResult(toFormResultId, matchIv.itemId);
                    userData.SaveResponseVariable(ir, matchIv, "1");
                    checkedBoxes.Add(matchIv.identifier);
                }
                #endregion
            }
            else
            {
                //this tagname must be either ignorable or handled by a special one-off transformation,
                //so just record the tagname/value pair to be handled later on.
                //the special-cases can involve multiple ramsell tags so there is no way to handle them one tag at a time.
                specialCaseValuesByTagname.Add(ramellTagName, ramsellVal);
            }
        }
Ejemplo n.º 25
0
        private void Upload_SaveResponseVariable(string itmVarIdentifier, string rspVal, def_FormResults fr)
        {
            if (String.IsNullOrWhiteSpace(rspVal))
            {
                return;
            }

            Debug.WriteLine("sving identifier/value: " + itmVarIdentifier + " -> " + rspVal);

            def_ItemVariables iv = GetItemVariableByIdentifier(itmVarIdentifier);

            if (iv == null)
            {
                Debug.WriteLine("could not find item variable with identifier \"" + itmVarIdentifier + "\" (not case-sensitive)");
                return;
            }

            //delete any existing response for this formResult+itemVariable
            def_ResponseVariables existingRv = formsRepo.GetResponseVariablesByFormResultItemVarId(fr.formResultId, iv.itemVariableId);

            if (existingRv != null)
            {
                formsRepo.DeleteResponseVariableNoSave(existingRv);
            }

            //for response values that reresent dates, convert them to the new format
            try
            {
                if (iv.baseTypeId == 3)
                {
                    rspVal = convertOldToNewDate(rspVal);
                }
            }
            catch (DateNotSupportedException dnse)
            {
                Debug.WriteLine("found date prior to 1900 in response for item variable \"" + itmVarIdentifier + "\", skipping...");
                return;
            }

            //
            if (itmVarIdentifier.Equals("sis_cl_attend"))
            {
                switch (rspVal)
                {
                case "All Of":  rspVal = "1"; break;

                case "Part Of": rspVal = "2"; break;

                case "Did Not": rspVal = "3"; break;
                }
            }

            def_ItemResults ir = fr.def_ItemResults.Where(r => r.itemId == iv.itemId).FirstOrDefault();//formsRepo.GetItemResultByFormResItem(formRsltId, iv.itemId);

            //int itemResultId;
            if (ir == null)
            {
                ir = new def_ItemResults();
                //ir.formResultId = formRsltId;
                ir.itemId        = iv.itemId;
                ir.sessionStatus = 0;
                ir.dateUpdated   = DateTime.Now;

                fr.def_ItemResults.Add(ir);
                //try{
                //    itemResultId = formsRepo.AddItemResult(ir);
                //}
                //catch (Exception e)
                //{
                //    return;
                //    Debug.WriteLine("error while adding item result! ItemVariable Identifier: \"{0}\", response value: \"{1}\", formResultId: \"{2}\"", itmVarIdentifier, rspVal, formRsltId);
                //}
            }
            //else
            //{
            //    itemResultId = ir.itemResultId;
            //}

            //if there is already a response variable for this itemvariable, return
            //if (ir.def_ResponseVariables.Where(v => v.itemVariableId == iv.itemVariableId).Any())
            //    return;

            def_ResponseVariables rv = new def_ResponseVariables
            {
                //itemResultId = itemResultId,
                itemVariableId = iv.itemVariableId,
                rspValue       = rspVal
            };

            try
            {
                formsRepo.ConvertValueToNativeType(iv, rv);
            }
            catch (Exception e)
            {
                Debug.WriteLine("For item variable \"{0}\", Unable to convert value \"{1}\" to native type (baseTypeId {2})", iv.identifier, rspVal, iv.baseTypeId);
                return;
            }

            ir.def_ResponseVariables.Add(rv);
            //try
            //{
            //    formsRepo.AddResponseVariable(rv);
            //}
            //catch (Exception e)
            //{
            //    Debug.WriteLine("error while adding response variable! ItemVariable Identifier: \"{0}\", response value: \"{1}\", formResultId: \"{2}\"", itmVarIdentifier, rspVal, formRsltId);
            //}

            //formsRepo.Save();
        }
Ejemplo n.º 26
0
        public void CreateElgibility(int formResultId)
        {
            string     formIdent = "CA-ADAP-DASHBOARD", entName = "California";
            def_Forms  frm = formsRepo.GetFormByIdentifier(formIdent);
            Enterprise ent = new AuthenticationClient().GetEnterpriseByName(entName);

            //  Get the FormResult to get the subject of the current Application
            def_FormResults fr = formsRepo.GetFormResultById(formResultId);

            // Get the Eligibility Form for the subject
            IEnumerable <def_FormResults> frElgList = formsRepo.GetFormResultsByFormSubject(frm.formId, fr.subject);
            def_FormResults frmRes = null;

            if ((frElgList == null) || frElgList.Count <def_FormResults>() == 0)
            {
                mLogger.Debug("Couldn't find a current FormResult for Eligibility.  Create one.");
                frmRes = new def_FormResults()
                {
                    formId               = frm.formId,
                    formStatus           = 0,
                    sessionStatus        = 0,
                    dateUpdated          = DateTime.Now,
                    deleted              = false,
                    locked               = false,
                    archived             = false,
                    EnterpriseID         = ent.EnterpriseID,
                    GroupID              = fr.GroupID, // User the same Enrollment Center
                    subject              = fr.subject,
                    interviewer          = fr.interviewer,
                    assigned             = fr.assigned,
                    training             = false,
                    reviewStatus         = 0,
                    statusChangeDate     = DateTime.Now,
                    LastModifiedByUserId = fr.LastModifiedByUserId
                };

                int newFrmRsltId = formsRepo.AddFormResult(frmRes);
                mLogger.Debug("New Eligibility FormResult created: {0}", newFrmRsltId);
            }
            else
            {
                frmRes = frElgList.First <def_FormResults>();
            }

            // make sure item responses exist for the form
            Dictionary <string, string> DataToPopulate = new Dictionary <string, string>();
            var sectionItems = formsRepo.GetSectionItemsBySectionId(756);

            AuthenticationClient authClient = new AuthenticationClient();
            var uasData = authClient.GetUser(fr.subject.Value);
            var adapId  = authClient.GetADAPIdentifier(uasData.UserID, uasData.EnterpriseID);

            foreach (var item in sectionItems)
            {
                var defItem = formsRepo.GetItemById(item.itemId);

                if (defItem.identifier == "C1_MemberIdentifier_item")
                {
                    DataToPopulate.Add(defItem.identifier, adapId);
                }
                else if (defItem.identifier == "C1_MemberFirstName_item")
                {
                    def_ResponseVariables firstName = formsRepo.GetResponseVariablesBySubjectForm(fr.subject.Value, 15, "C1_MemberFirstName");
                    DataToPopulate.Add(defItem.identifier, firstName != null ? firstName.rspValue : string.Empty);
                }
                else if (defItem.identifier == "C1_MemberLastName_item")
                {
                    def_ResponseVariables lastName = formsRepo.GetResponseVariablesBySubjectForm(fr.subject.Value, 15, "C1_MemberLastName");
                    DataToPopulate.Add(defItem.identifier, lastName != null ? lastName.rspValue : string.Empty);
                }
                else if (defItem.identifier == "C1_MemberDateOfBirth_item")
                {
                    def_ResponseVariables dob = formsRepo.GetResponseVariablesBySubjectForm(fr.subject.Value, 15, "C1_MemberDateOfBirth");
                    DataToPopulate.Add(defItem.identifier, dob != null ? dob.rspValue : string.Empty);
                }
                else
                {
                    DataToPopulate.Add(defItem.identifier, string.Empty);
                }
            }

            foreach (String s in DataToPopulate.Keys)
            {
                def_Items       item = formsRepo.GetItemByIdentifier(s);
                def_ItemResults ir   = new def_ItemResults()
                {
                    itemId        = item.itemId,
                    sessionStatus = 0,
                    dateUpdated   = DateTime.Now
                };

                // check if the key already exist
                var itemResult = formsRepo.GetItemResultByFormResItem(frmRes.formResultId, item.itemId);
                if (itemResult == null)
                {
                    frmRes.def_ItemResults.Add(ir);

                    foreach (var iv in formsRepo.GetItemVariablesByItemId(item.itemId))
                    {
                        // Note for General forms like ADAP there should only be 1 ItemVariable per Item
                        def_ResponseVariables rv = new def_ResponseVariables();
                        rv.itemVariableId = iv.itemVariableId;
                        // rv.rspDate = DateTime.Now;    // RRB 11/11/15 The date, fp, and int fields are for the native data conversion.
                        rv.rspValue = DataToPopulate[s];

                        formsRepo.ConvertValueToNativeType(iv, rv);
                        ir.def_ResponseVariables.Add(rv);
                    }
                }
                else
                {
                    ir = itemResult;
                }
            }

            formsRepo.Save();
        }
        /*  This method Saves data from the screen when the Submit button is clicked.
         *  The concept is that we know which Section was last displayed from the session variables.
         *  So we cycle through the ItemVariables and update the associated ResponseValues from the FormCollection of screen values.
         */
        public ActionResult Save(FormCollection frmCllctn, Assmnts.Models.TemplateItems ti)
        {
            mLogger.Debug("  ResultController:Save");

            Dictionary <string, string> previousResponseValues = SessionHelper.ResponseValues;

            if (previousResponseValues != null)
            {
                //Throw out responses that haven't changed
                foreach (var previousResponseKvp in previousResponseValues)
                {
                    if (!string.IsNullOrWhiteSpace(previousResponseKvp.Key))
                    {
                        var newResponseValue = frmCllctn.GetValue(previousResponseKvp.Key);
                        //If the value is bool and it is now false (checkbox for example) it won't be sent back in the form collection
                        //we need to test for bool and set these values to false (if they are true)
                        var itemVariable = formsRepo.GetItemVariableByIdentifier(previousResponseKvp.Key);
                        //itemVariable will often be null because all the PREVIOUS_ identifiers get sent through also
                        var impliedBooleanFalseResult = false;
                        if (newResponseValue == null && itemVariable != null && itemVariable.baseTypeId == Assmnts.Constants.CAADAP.BASE_TYPE_BOOLEAN)
                        {
                            newResponseValue          = new ValueProviderResult("0", "0", CultureInfo.CurrentCulture);
                            impliedBooleanFalseResult = true;
                        }
                        if (newResponseValue != null)
                        {
                            //Compare previous with posted values
                            //Note if they are both null or both empty we want to throw it out
                            if (newResponseValue.AttemptedValue == null && previousResponseKvp.Value == null)
                            {
                                frmCllctn.Remove(previousResponseKvp.Key);
                            }
                            else if (newResponseValue.AttemptedValue != null && previousResponseKvp.Value != null)
                            {
                                var  previousResponseString = previousResponseKvp.Value;
                                var  newResponseString      = newResponseValue.AttemptedValue;
                                bool previousResponseTrue   = false;
                                bool previousResponseFalse  = false;
                                //If it's a bool, try to convert 'false' to '0' and so on
                                if (previousResponseTrue = previousResponseString.Equals("true", StringComparison.InvariantCultureIgnoreCase) ||
                                                           (previousResponseFalse = previousResponseString.Equals("false", StringComparison.InvariantCultureIgnoreCase)))
                                {
                                    if (itemVariable != null && itemVariable.baseTypeId == Assmnts.Constants.CAADAP.BASE_TYPE_BOOLEAN)
                                    {
                                        if (previousResponseFalse)
                                        {
                                            previousResponseString = "0";
                                        }
                                        else if (previousResponseTrue)
                                        {
                                            previousResponseString = "1";
                                        }
                                    }
                                }
                                if (newResponseString.Equals(previousResponseString))
                                {
                                    frmCllctn.Remove(previousResponseKvp.Key);
                                }
                                else if (impliedBooleanFalseResult)
                                {
                                    //The values are different, but the form collection doesn't contain the result
                                    frmCllctn.Add(previousResponseKvp.Key, newResponseValue.AttemptedValue);
                                }
                            }
                        }
                    }
                }
            }

            // If User is not logged in, there are no session variables.
            // This prevents saving the formResultId
            if (!SessionHelper.IsUserLoggedIn)
            {
                return(RedirectToAction("Index", "Account", null));
            }

            //check if the form is unchanged
            //bool unchanged = true;
            //foreach (string key in frmCllctn.Keys)
            //{
            //    HttpCookie oldVal = Request.Cookies["frmOriginal___" + key];
            //    if (oldVal != null && !frmCllctn[key].Trim().Equals(oldVal.Value.Replace("%0d%0a","").Trim()))
            //    {
            //        //mLogger.Debug("* * *  ResultsController:SaveSectionItems changed key: \"" + key + "\", original value: \"" + Session["frmOriginal___" + key] + "\", new value: \"" + frmCllctn[key] + "\"" );
            //        unchanged = false;
            //        break;
            //    }
            //}

            bool        unchanged = false;
            SessionForm sf        = SessionHelper.SessionForm;

            if (unchanged || sf.readOnlyMode)
            {
                mLogger.Debug("* * *  ResultsController:SaveSectionItems form is unchanged, skipping update");
            }
            else
            {
                mLogger.Debug("* * *  ResultsController:Save method  * * *    sectionId: {0}", sf.sectionId);

                // save responses to database

                //* * * OT 03/10/16 Switched to using AJBoggs\Def\Domain\UserData.SaveFormCollection.cs
                UserData ud = new UserData(formsRepo);
                ud.SaveFormCollection(frmCllctn, sf.sectionId, sf.formResultId);
                ud.SaveFileUploads(sf.formResultId, Request);

                def_FormResults formResult = formsRepo.GetFormResultById(sf.formResultId);
                formResult.LastModifiedByUserId = SessionHelper.LoginStatus.UserID;
                formResult.dateUpdated          = DateTime.Now;

                // Update the assigned field in the formResults based on the data in the Interviewer field on idprof1.
                if (sf.sectionId == 1)
                {
                    def_ItemVariables interviewerVar = formsRepo.GetItemVariableByIdentifier("sis_int_id");
                    if (interviewerVar != null)
                    {
                        def_ItemResults ir = formsRepo.GetItemResultByFormResItem(formResult.formResultId, interviewerVar.itemId);
                        if (ir != null)
                        {
                            def_ResponseVariables rv = formsRepo.GetResponseVariablesByItemResultItemVariable(ir.itemResultId, interviewerVar.itemVariableId);
                            if (rv != null && !String.IsNullOrEmpty(rv.rspValue))
                            {
                                int rspInt;
                                if (Int32.TryParse(rv.rspValue, out rspInt))
                                {
                                    formResult.assigned = rspInt;
                                }
                                else
                                {
                                    mLogger.Error("Error converting response value {0} to int.", rv.rspValue);
                                }
                            }
                        }
                    }
                }

                formsRepo.Save();

                //set status to "in progress" for SIS forms
                //if (sf.formIdentifier.Equals("SIS-A") || sf.formIdentifier.Equals("SIS-C"))
                //{

                //if ( (fr.reviewStatus != ReviewStatus.APPROVED) && (fr.reviewStatus != ReviewStatus.REVIEWED) && (fr.reviewStatus != ReviewStatus.PRE_QA) )
                //{
                //    fr.formStatus = (byte)FormResults_formStatus.IN_PROGRESS;
                //    // this will be saved to the database in one of the scoring updates below
                //}

                //}

                bool isSisForm = sf.formIdentifier.Equals("SIS-A") || sf.formIdentifier.Equals("SIS-C");

                //run single-section validation for sis forms
                if (isSisForm)
                {
                    List <string> validationErrorMessages;
                    bool          ssValidationFailed = SisOneOffValidation.RunSingleSectionOneOffValidation(
                        formsRepo, frmCllctn, sf.sectionId, out validationErrorMessages);
                    if (ssValidationFailed)
                    {
                        return(Template(sf.sectionId, validationErrorMessages));
                    }

                    //run full-assessment validation and update scores for completed SIS forms
                    if (formResult.formStatus == (byte)FormResults_formStatus.COMPLETED || formResult.locked)
                    {
                        //if validation passes, it will trigger scoring automatically
                        if (sf.sectionId != 504 && !ValidateFormResult(formResult))                         // Section 504 is interview planning
                        {
                            //if validation fails set the form status to in-progress
                            formsRepo.SetFormResultStatus(formResult, (byte)FormResults_formStatus.IN_PROGRESS);
                        }
                    }
                }
            }

            // string ctrl = "Results";
            // if (frmCllctn.AllKeys.Contains("UseThisControllerForTemplate"))
            //    ctrl = frmCllctn["UseThisControllerForTemplate"];

            //debug runtime
            //TimeSpan duration = DateTime.Now - startTime;
            //using (StreamWriter sw = System.IO.File.AppendText(@"C:\Users\otessmer\Desktop\log.txt"))
            //{
            //    sw.WriteLine(duration.Milliseconds);
            //}

            // if necessary, redirect to a different section now that we've saved the results
            string navSectionId = String.Empty;

            if (frmCllctn.AllKeys.Contains("navSectionId"))
            {
                navSectionId = frmCllctn["navSectionId"];
                if (!String.IsNullOrEmpty(navSectionId))
                {
                    if (navSectionId == "search")
                    {
                        return(RedirectToAction("Index", "Search", new { }));
                    }

                    if (navSectionId == "logout")
                    {
                        return(RedirectToAction("LogoutUAS", "Account"));
                    }

                    if (navSectionId == "new")
                    {
                        return(RedirectToAction("NewBlankAssessment", "Search", new { formId = SessionHelper.Read <int>("newFormId") }));
                    }

                    // Redirect subforms to the original parent page.
                    if (navSectionId == "SubForm")
                    {
                        SessionForm psf = (SessionForm)Session["ParentFormData"];
                        return(RedirectToAction("ToTemplate", "Adap", new {
                            formResultId = psf.formResultId,
                            formId = psf.formId,
                            partId = psf.partId,
                            sectionIdOverride = psf.sectionId
                        }));
                    }

                    // Must be a Form Part Section
                    //Displays successful save message
                    Session["part"] = frmCllctn["navPartId"];
                    Session["form"] = frmCllctn["navFormId"];
                }
            }
            else
            {
                navSectionId = sf.sectionId.ToString();
            }

            if (Session["IsPageLoad"] != null)
            {
            }
            if (navSectionId == "703")
            {
                TempData["Savemsg"]       = "Contact info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "704")
            {
                TempData["Savemsg"]       = "Demographics info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "705")
            {
                TempData["Savemsg"]       = "Clinical info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "706")
            {
                TempData["Savemsg"]       = "Health Coverage info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "726")
            {
                TempData["Savemsg"]       = "Income info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "732")
            {
                TempData["Savemsg"]       = "Insurance Assistance info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "734")
            {
                TempData["Savemsg"]       = "Attachment info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "753")
            {
                TempData["Savemsg"]       = "Medical Out of Pocket info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "708")
            {
                TempData["Savemsg"]       = "Consent&Submit info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "756")
            {
                TempData["Savemsg"]       = "Eligibility info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else if (navSectionId == "759")
            {
                TempData["Savemsg"]       = "SVF info save successful";
                TempData["SavemsgHeader"] = "Saved";
            }
            else
            {
                TempData["Savemsg"]       = "";
                TempData["SavemsgHeader"] = "";
            }

            if (sf.sectionId == 708)
            {
                def_FormResults formResult = formsRepo.GetFormResultById(sf.formResultId);
                IEnumerable <def_FormResults> frElgList = formsRepo.GetFormResultsByFormSubject(18, formResult.subject);

                var adapCaController = new AdapCaController(formsRepo);

                if (!frElgList.Any())
                {
                    adapCaController.CreateElgibility(sf.formResultId);
                }

                adapCaController.CopyToEligibility("C1_FormSubmitEnrollmentSiteName", "C1_MemberSelectedEnrollmentSite", formResult.formResultId, formResult.subject.Value);
                formsRepo.Save();
            }

            //$$ Start of people Picker V2 Functionality

            PeoplePickerHelper objUtility = new PeoplePickerHelper(authClient, formsRepo);

            objUtility.SaveresultsForEnWrkerPicker(sf.sectionId, sf.formResultId);

            //$$ End of people Picker V2 Functionality

            var redirect = frmCllctn["navRedirect"];

            if (!string.IsNullOrWhiteSpace(redirect))
            {
                return(Redirect(redirect));
            }
            else
            {
                return(RedirectToAction("Template", "Results", new { sectionId = navSectionId }));
            }
        }
Ejemplo n.º 28
0
        public static void AddField(IFormsRepository formsRepo, string itemIdentifier, def_FormResults formResult, string fieldName, string value)
        {
            int itemId = 0;

            try
            {
                itemId = formsRepo.GetItemByIdentifier(itemIdentifier).itemId;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: Add Field to form: " + ex.Message);
                return;
            }

            def_ItemResults itemResult = formsRepo.GetItemResultByFormResItem(formResult.formResultId, itemId);

            if (itemResult == null)
            {
                itemResult = new def_ItemResults();

                itemResult.itemId        = itemId;
                itemResult.formResultId  = formResult.formResultId;
                itemResult.dateUpdated   = DateTime.Now;
                itemResult.sessionStatus = 0;

                formsRepo.AddItemResult(itemResult);
            }

            def_ResponseVariables relatedFormResultRV = null;

            try
            {
                relatedFormResultRV = formsRepo.GetResponseVariablesByFormResultIdentifier(formResult.formResultId, fieldName);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            def_ItemVariables itemVariableRelated = formsRepo.GetItemVariableByIdentifier(fieldName);


            if (itemVariableRelated != null)
            {
                if (relatedFormResultRV != null)
                {
                    relatedFormResultRV.rspValue = value;

                    formsRepo.ConvertValueToNativeType(itemVariableRelated, relatedFormResultRV);
                }
                else
                {
                    relatedFormResultRV = new def_ResponseVariables();

                    relatedFormResultRV.itemResultId = itemResult.itemResultId;

                    relatedFormResultRV.itemVariableId = itemVariableRelated.itemVariableId;

                    relatedFormResultRV.rspValue = value;

                    formsRepo.ConvertValueToNativeType(itemVariableRelated, relatedFormResultRV);

                    formsRepo.AddResponseVariableNoSave(relatedFormResultRV);
                }
            }

            formsRepo.Save();
        }
Ejemplo n.º 29
0
        //this is for the sections in the "Exceptional medical... needs" part
        private void PrintExceptMedNeedsTable(def_Parts part, PdfOutput output, def_Sections sct)
        {
            int nCols = 4;

            string[] headers = { sct.title, "", "Score", "Important \"To\" or \"For\"" };
            double[] indents = { .5, .75, 5.6, 6.75 };

            //headers
            output.drawY -= .1;
            for (int i = 0; i < nCols; i++)
            {
                output.DrawText(output.boldFont, output.fontSize, indents[i], output.drawY, headers[i]);
            }
            output.drawY += .13; output.appendSectionBreak();
            output.drawY -= PdfOutput.itemSpacing;

            indents = new double[] { .5, .75, 5.73, 6.75 };
            List <def_Items> itms = new List <def_Items>();

            formsRepo.SortSectionItems(sct);
            foreach (def_SectionItems si in sct.def_SectionItems)
            {
                if (si.subSectionId == null)    // NOTE: this case probably never occurs for this Part
                {
                    itms.Add(formsRepo.GetItemById(si.itemId));
                }
                else
                {
                    def_Sections sctn = formsRepo.GetSubSectionById(si.subSectionId);
                    formsRepo.SortSectionItems(sctn);
                    foreach (def_SectionItems ssi in sctn.def_SectionItems)
                    {
                        if (ssi.subSectionId == null)
                        {
                            itms.Add(formsRepo.GetItemById(ssi.itemId));
                        }
                    }
                }
            }
            int nRows = itms.Count() + 1;

            // Load the Values
            for (int row = 0; row < itms.Count; row++)
            {
                def_Items itm = itms[row];
                formsRepo.GetItemResultByFormResItem(formResultId, itm.itemId);
                def_ItemResults itmResults = itm.def_ItemResults.SingleOrDefault(ir => (ir.formResultId == formResultId));
                formsRepo.GetItemResultsResponseVariables(itmResults);
                foreach (def_ResponseVariables rv in itmResults.def_ResponseVariables)
                {
                    rv.def_ItemVariables = formsRepo.GetItemVariableById(rv.itemVariableId);
                }

                output.drawY -= .1;
                for (int col = 0; col < nCols; col++)
                {
                    string s = "ERROR";
                    switch (col)
                    {
                    case 0:
                        s = (row + 1).ToString();
                        break;

                    case 1:
                        s = itm.label;
                        break;

                    case 2:
                        def_ResponseVariables rv = itmResults.def_ResponseVariables.SingleOrDefault(r => r.def_ItemVariables.identifier.EndsWith("_ExMedSupport"));
                        s = ((rv == null) ? "" : rv.rspValue);
                        break;

                    case 3:
                        s = String.Empty;
                        break;
                    }
                    output.DrawText(output.contentFont, output.fontSize, indents[col], output.drawY, s);
                }
                output.drawY -= PdfOutput.itemSpacing * 2.5;
                if (output.drawY < 1)
                {
                    output.appendPageBreak();
                }
            }

            output.drawY -= .1;
            output.DrawText(output.boldFont, output.fontSize, indents[1], output.drawY, "Page Notes:");
            output.drawY -= PdfOutput.itemSpacing * 4;
            if (output.drawY < 1)
            {
                output.appendPageBreak();
            }
        }