Beispiel #1
0
        /// <summary>
        /// Get matrix for maturity determination based on total irp rating
        /// </summary>
        /// <param name="irpRating"></param>
        /// <returns></returns>
        public List <string> GetMaturityRange(int assessmentId)
        {
            ACETDashboardManager manager        = new ACETDashboardManager();
            ACETDashboard        irpCalculation = manager.GetIrpCalculation(assessmentId);
            bool targetBandOnly = GetTargetBandOnly(assessmentId);
            int  irpRating      = irpCalculation.Override > 0 ? irpCalculation.Override : irpCalculation.SumRiskLevel;

            if (!targetBandOnly)
            {
                irpRating = 6; //Do the default configuration
            }
            return(irpSwitch(irpRating));
        }
Beispiel #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="stream"></param>
        public DataTable BuildAssessment(int assessmentID)
        {
            var assess = db.ASSESSMENTS
                         .Include(x => x.INFORMATION)
                         .Where(x => x.Assessment_Id == assessmentID)
                         .FirstOrDefault();

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

            // A few helper classes gather data
            ACETDashboardManager dm = new ACETDashboardManager();
            var acetDashboard       = dm.LoadDashboard(assessmentID);

            MaturityManager manager = new MaturityManager();

            var maturityDomains = manager.GetMaturityAnswers(assessmentID);


            // Build the row for the assessment
            var export = new SingleRowExport();

            export.d["Version"] = db.CSET_VERSION.FirstOrDefault().Cset_Version1;

            export.d["Assessment Name"] = assess.INFORMATION.Assessment_Name;
            export.d["CU Name"]         = acetDashboard.CreditUnionName;
            export.d["CU #"]            = acetDashboard.Charter;
            export.d["Assets"]          = acetDashboard.Assets;
            export.d["Hours"]           = acetDashboard.Hours.ToString();

            var fav  = db.FINANCIAL_ASSESSMENT_VALUES.Where(x => x.Assessment_Id == assessmentID).ToList();
            var fav1 = fav.Where(n => n.AttributeName == "Credit Union Completed ACET for Exam").FirstOrDefault();
            var fav2 = fav.Where(n => n.AttributeName == "Credit Union Completed CAT or ACET Prior to Exam (Self-Initiated)").FirstOrDefault();

            export.d["CU ACET for EX"] = (fav1 != null) ? fav1.AttributeValue : "";
            export.d["CU Self ACET"]   = (fav2 != null) ? fav2.AttributeValue : "";

            ProcessHours(assessmentID, ref export);

            ProcessIRP(assessmentID, acetDashboard, ref export);

            ProcessMaturity(acetDashboard, maturityDomains, ref export);

            ProcessStatementAnswers(assessmentID, ref export);

            return(export.ToDataTable());
        }
Beispiel #3
0
        /// <summary>
        /// Returns the percentage of maturity questions that have been answered for the
        /// current maturity level (IRP).
        /// </summary>
        /// <param name="assessmentId"></param>
        /// <returns></returns>
        public double GetAnswerCompletionRate(int assessmentId)
        {
            using (var db = new CSET_Context())
            {
                var targetLevel = new ACETDashboardManager().GetOverallIrpNumber(assessmentId);

                var answerDistribution = db.AcetAnswerDistribution(assessmentId, targetLevel).ToList();

                var answeredCount = 0;
                var totalCount    = 0;
                foreach (var d in answerDistribution)
                {
                    if (d.Answer_Text != "U")
                    {
                        answeredCount += d.Count;
                    }
                    totalCount += d.Count;
                }

                return(((double)answeredCount / (double)totalCount) * 100d);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Construct a response containing the applicable requirement questions with their answers.
        /// </summary>
        /// <param name="requirements"></param>
        /// <param name="answers"></param>
        /// <returns></returns>
        private QuestionResponse BuildResponse(List <RequirementPlus> requirements,
                                               List <FullAnswer> answers, List <DomainAssessmentFactor> domains)
        {
            List <QuestionGroup> groupList = new List <QuestionGroup>();
            QuestionGroup        g         = new QuestionGroup();
            QuestionSubCategory  sg        = new QuestionSubCategory();
            QuestionAnswer       qa        = new QuestionAnswer();

            string currentGroupHeading       = string.Empty;
            string currentSubcategoryHeading = string.Empty;

            try
            {
                foreach (var dbRPlus in requirements)
                {
                    var dbR = dbRPlus.Requirement;

                    // Make sure there are no leading or trailing spaces - it will affect the tree structure that is built
                    dbR.Standard_Category     = dbR.Standard_Category == null ? null : dbR.Standard_Category.Trim();
                    dbR.Standard_Sub_Category = dbR.Standard_Sub_Category == null ? null : dbR.Standard_Sub_Category.Trim();

                    // If the Standard_Sub_Category is null (like CSC_V6), default it to the Standard_Category
                    if (dbR.Standard_Sub_Category == null)
                    {
                        dbR.Standard_Sub_Category = dbR.Standard_Category;
                    }


                    if (dbR.Standard_Category != currentGroupHeading)
                    {
                        g = new QuestionGroup()
                        {
                            GroupHeadingId    = dbR.Question_Group_Heading_Id,
                            GroupHeadingText  = dbR.Standard_Category,
                            StandardShortName = dbRPlus.SetShortName,
                        };

                        if (domains.Any(x => x.AssessmentFactorName == g.GroupHeadingText))
                        {
                            g.DomainName = domains.FirstOrDefault(x => x.AssessmentFactorName == g.GroupHeadingText)
                                           .DomainName;
                        }

                        groupList.Add(g);

                        currentGroupHeading = g.GroupHeadingText;
                    }

                    // new subcategory
                    if (dbR.Standard_Sub_Category != currentSubcategoryHeading)
                    {
                        sg = new QuestionSubCategory()
                        {
                            SubCategoryId          = 0,
                            SubCategoryHeadingText = dbR.Standard_Sub_Category,
                            GroupHeadingId         = g.GroupHeadingId
                        };

                        g.SubCategories.Add(sg);

                        currentSubcategoryHeading = dbR.Standard_Sub_Category;
                    }


                    FullAnswer answer = answers.Where(x => x.a.Question_Or_Requirement_Id == dbR.Requirement_Id).FirstOrDefault();

                    qa = new QuestionAnswer()
                    {
                        DisplayNumber  = dbR.Requirement_Title,
                        QuestionId     = dbR.Requirement_Id,
                        QuestionText   = dbR.Requirement_Text.Replace("\r\n", "<br/>").Replace("\n", "<br/>").Replace("\r", "<br/>"),
                        Answer         = answer?.a.Answer_Text,
                        AltAnswerText  = answer?.a.Alternate_Justification,
                        Comment        = answer?.a.Comment,
                        Feedback       = answer?.a.Feedback,
                        MarkForReview  = answer?.a.Mark_For_Review ?? false,
                        Reviewed       = answer?.a.Reviewed ?? false,
                        MaturityLevel  = ReqMaturityLevel(dbR.Requirement_Id),
                        SetName        = dbRPlus.SetName,
                        Is_Component   = answer?.a.Is_Component ?? false,
                        Is_Requirement = answer?.a.Is_Requirement ?? true
                    };
                    if (answer != null)
                    {
                        TinyMapper.Map <VIEW_QUESTIONS_STATUS, QuestionAnswer>(answer.b, qa);
                    }

                    qa.ParmSubs = GetTokensForRequirement(qa.QuestionId, (answer != null) ? answer.a.Answer_Id : 0);

                    sg.Questions.Add(qa);
                }

                QuestionResponse resp = new QuestionResponse
                {
                    QuestionGroups  = groupList,
                    ApplicationMode = this.applicationMode
                };

                resp.QuestionCount    = new QuestionsManager(this._assessmentId).NumberOfQuestions();
                resp.RequirementCount = this.NumberOfRequirements();

                // Get the overall risk level
                var acetDash = new ACETDashboardManager().LoadDashboard(this._assessmentId);
                resp.OverallIRP = acetDash.SumRiskLevel;
                if (acetDash.Override > 0)
                {
                    resp.OverallIRP = acetDash.Override;
                }

                BuildComponentsResponse(resp);

                return(resp);
            }
            catch (Exception e)
            {
                throw e;
            }
        }