Exemple #1
0
        public IEnumerable <FileDescriptionShort> GetAllFiles()
        {
            int assessmentId = Auth.AssessmentForUser();

            return(_fileRepository.GetAllFiles(assessmentId));
        }
Exemple #2
0
        public HttpResponseMessage Download(string token)
        {
            int _assessmentId = Auth.AssessmentForUser(token);
            var result        = new HttpResponseMessage(HttpStatusCode.OK);

            // determine the file extension based on the application
            TokenManager tm       = new TokenManager(token);
            string       appCode  = tm.Payload("scope");
            string       filename = ExportAssessment.GetFileExtension(appCode);


            using (CSET_Context context = new CSET_Context())
            {
                string assessmentName = context.INFORMATION.Where(x => x.Id == _assessmentId).FirstOrDefault().Assessment_Name;
                if (assessmentName != null)
                {
                    filename = assessmentName + filename;
                }
                ExportAssessment export = new ExportAssessment(context);
                var exportCopy          = export.CopyForExport(_assessmentId);

                MemoryStream zipToOpen = new MemoryStream();

                ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create, true);
                foreach (var standard in exportCopy.jAVAILABLE_STANDARDS)
                {
                    var set = context.SETS
                              .Include(s => s.NEW_QUESTION)
                              .Include(s => s.NEW_REQUIREMENT)
                              .Include(s => s.Set_Category_)
                              .FirstOrDefault(s => s.Set_Name == standard.Set_Name && standard.Selected);
                    if (set != null)
                    {
                        if (set.Is_Custom)
                        {
                            //Export Set
                            var             externalSet   = set.ToExternalStandard();
                            var             setname       = Regex.Replace(externalSet.ShortName, @"\W", "_");
                            ZipArchiveEntry standardEntry = archive.CreateEntry(setname + ".json");
                            string          jsonStandard  = JsonConvert.SerializeObject(externalSet, Formatting.Indented);
                            using (StreamWriter writer = new StreamWriter(standardEntry.Open()))
                            {
                                writer.Write(jsonStandard);
                                writer.Close();
                            }
                            //Set the GUID at time of export so we are sure it's right!!!
                            exportCopy.jANSWER = exportCopy.jANSWER.Where(s => s.Is_Requirement).GroupJoin(set.NEW_REQUIREMENT, s => s.Question_Or_Requirement_Id, s => s.Requirement_Id, (t, s) =>
                            {
                                var req = s.FirstOrDefault();
                                if (req != null)
                                {
                                    t.Custom_Question_Guid = new Guid(new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(externalSet.ShortName + "|||" + req.Requirement_Title + "|||" + req.Requirement_Text))).ToString();
                                }
                                return(t);
                            }).Concat(exportCopy.jANSWER.Where(s => !s.Is_Requirement).GroupJoin(set.NEW_QUESTION, s => s.Question_Or_Requirement_Id, s => s.Question_Id, (t, s) =>
                            {
                                var req = s.FirstOrDefault();
                                if (req != null)
                                {
                                    t.Custom_Question_Guid = new Guid(new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(req.Simple_Question))).ToString();
                                }
                                return(t);
                            })).ToList();
                            exportCopy.CustomStandards.Add(setname);
                            var files = externalSet.Requirements.SelectMany(s => s.References.Concat(new List <ExternalResource> {
                                s.Source
                            })).Distinct();
                            foreach (var file in files)
                            {
                                var genFile = context.GEN_FILE.FirstOrDefault(s => s.File_Name == file.FileName && s.Is_Uploaded == true);
                                if (genFile != null && !exportCopy.CustomStandardDocs.Any(s => s == file.FileName))
                                {
                                    var             doc      = genFile.ToExternalDocument();
                                    ZipArchiveEntry docEntry = archive.CreateEntry(doc.ShortName + ".json");
                                    string          jsonDoc  = JsonConvert.SerializeObject(doc, Formatting.Indented);
                                    using (StreamWriter writer = new StreamWriter(docEntry.Open()))
                                    {
                                        writer.Write(jsonDoc);
                                        writer.Close();
                                    }
                                    exportCopy.CustomStandardDocs.Add(file.FileName);
                                }
                            }
                        }
                    }
                }

                string          json       = JsonConvert.SerializeObject(exportCopy, Formatting.Indented);
                ZipArchiveEntry modelEntry = archive.CreateEntry("model.json");
                using (StreamWriter writer = new StreamWriter(modelEntry.Open()))
                {
                    writer.Write(json);
                    writer.Close();
                }
                foreach (var doc in context.DOCUMENT_FILE.Where(x => x.Assessment_Id == _assessmentId && x.Data != null))
                {
                    ZipArchiveEntry dest       = archive.CreateEntry(doc.Path);
                    Stream          destStream = dest.Open();
                    destStream.Write(doc.Data, 0, doc.Data.Length);
                    destStream.Close();
                }

                archive.Dispose();

                zipToOpen.Seek(0, SeekOrigin.Begin);
                result.Content = new StreamContent(zipToOpen);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                result.Content.Headers.Add("content-disposition", "attachment; filename=\"" + filename + "\"");

                return(result);
            }
        }
Exemple #3
0
        public ChartData ComponentTypes()
        {
            int assessmentId = Auth.AssessmentForUser();

            // initialize the response container
            ChartData chartData = new ChartData
            {
                Colors      = new List <string>(),
                DataRowsPie = new List <DataRowsPie>()
            };

            using (CSET_Context context = new CSET_Context())
            {
                context.LoadStoredProc("[dbo].[usp_getComponentTypes]")
                .WithSqlParam("assessment_Id", assessmentId)
                .ExecuteStoredProc((handler) =>
                {
                    var componentTotals = handler.ReadToList <usp_getComponentTypes>();

                    var cdY = new ChartData
                    {
                        label           = "Yes",
                        backgroundColor = answerColorDefs["Y"]
                    };
                    chartData.dataSets.Add(cdY);

                    var cdN = new ChartData
                    {
                        label           = "No",
                        backgroundColor = answerColorDefs["N"]
                    };
                    chartData.dataSets.Add(cdN);

                    var cdNA = new ChartData
                    {
                        label           = "N/A",
                        backgroundColor = answerColorDefs["NA"]
                    };
                    chartData.dataSets.Add(cdNA);

                    var cdAlt = new ChartData
                    {
                        label           = "Alt",
                        backgroundColor = answerColorDefs["A"]
                    };
                    chartData.dataSets.Add(cdAlt);

                    var cdU = new ChartData
                    {
                        label           = "Unanswered",
                        backgroundColor = answerColorDefs["U"]
                    };
                    chartData.dataSets.Add(cdU);


                    foreach (var total in componentTotals)
                    {
                        chartData.Labels.Add(total.Symbol_Name);

                        // adjust the percentages to equal 100% after rounding
                        var adjTotal = new BusinessLogic.Common.PercentageFixer(total.Y, total.N, total.NA, total.A, total.U);

                        cdY.data.Add((int)adjTotal.Y);
                        cdN.data.Add((int)adjTotal.N);
                        cdNA.data.Add((int)adjTotal.NA);
                        cdAlt.data.Add((int)adjTotal.A);
                        cdU.data.Add((int)adjTotal.U);


                        // create a new DataRows entry with answer percentages for this component
                        var row = new DataRows
                        {
                            title      = total.Symbol_Name,
                            yes        = adjTotal.Y,
                            no         = adjTotal.N,
                            na         = adjTotal.NA,
                            alt        = adjTotal.A,
                            unanswered = adjTotal.U,
                            total      = total.Total
                        };
                        chartData.DataRows.Add(row);
                    }
                });
            }

            chartData.dataSets.ForEach(ds =>
            {
                ds.borderWidth = "0";
                ds.borderColor = "transparent";
            });

            return(chartData);
        }
Exemple #4
0
        public ChartData GetStandardsResultsByCategory()
        {
            int       assessmentId = Auth.AssessmentForUser();
            ChartData chartData    = new ChartData();

            using (CSET_Context context = new CSET_Context())
            {
                context.LoadStoredProc("[dbo].[usp_getStandardsResultsByCategory]")
                .WithSqlParam("assessment_Id", assessmentId)
                .ExecuteStoredProc((handler) =>
                {
                    var result = handler.ReadToList <usp_getStandardsResultsByCategory>();
                    var labels = (from usp_getStandardsResultsByCategory an in result
                                  orderby an.Question_Group_Heading
                                  select an.Question_Group_Heading).Distinct().ToList();

                    chartData.DataRows = new List <DataRows>();
                    foreach (string c in labels)
                    {
                        //    chartData.data.Add((double) c.prc);
                        chartData.Labels.Add(c);
                        //    chartData.DataRows.Add(new DataRows()
                        //    {
                        //        failed =c.yaCount,
                        //        percent = c.prc,
                        //        total = c.Actualcr,
                        //        title = c.Question_Group_Heading
                        //   });
                    }

                    ColorsList colors = new ColorsList();

                    var sets = (from usp_getStandardsResultsByCategory an in result
                                select new { an.Set_Name, an.Short_Name }).Distinct();
                    foreach (var set in sets)
                    {
                        ChartData nextChartData = new ChartData();
                        chartData.dataSets.Add(nextChartData);
                        nextChartData.DataRows = new List <DataRows>();
                        var nextSet            = (from usp_getStandardsResultsByCategory an in result
                                                  where an.Set_Name == set.Set_Name
                                                  orderby an.Question_Group_Heading
                                                  select an).ToList();
                        nextChartData.label           = set.Short_Name;
                        nextChartData.backgroundColor = colors.getNext(set.Set_Name);
                        foreach (usp_getStandardsResultsByCategory c in nextSet)
                        {
                            nextChartData.data.Add((double)c.prc);
                            nextChartData.Labels.Add(c.Question_Group_Heading);
                            nextChartData.DataRows.Add(new DataRows()
                            {
                                failed  = c.yaCount,
                                percent = c.prc,
                                total   = c.Actualcr,
                                title   = c.Question_Group_Heading
                            });
                        }
                    }
                });
            }

            return(chartData);
        }
Exemple #5
0
        public ChartData GetComponentsSummary()
        {
            int assessmentId = Auth.AssessmentForUser();

            // initialize the response container
            ChartData chartData = new ChartData();

            chartData.Colors      = new List <string>();
            chartData.DataRowsPie = new List <DataRowsPie>();

            using (CSET_Context context = new CSET_Context())
            {
                context.LoadStoredProc("[dbo].[usp_getComponentsSummary]")
                .WithSqlParam("assessment_Id", assessmentId)
                .ExecuteStoredProc((handler) =>
                {
                    var answerTotals = handler.ReadToList <usp_getComponentsSummmary>();

                    // re-order the list
                    var sortedList = new List <usp_getComponentsSummmary>();
                    AddItem("Y", sortedList, answerTotals);
                    AddItem("N", sortedList, answerTotals);
                    AddItem("NA", sortedList, answerTotals);
                    AddItem("A", sortedList, answerTotals);
                    AddItem("U", sortedList, answerTotals);
                    answerTotals = sortedList;


                    var totalQuestionCount = answerTotals == null?0:answerTotals.Sum(x => x.vcount);

                    foreach (usp_getComponentsSummmary c in answerTotals)
                    {
                        // build DataRowsPie for each answer total
                        DataRowsPie pie      = new DataRowsPie();
                        pie.Answer_Full_Name = c.Answer_Full_Name;
                        pie.Short_Name       = "";
                        pie.Answer_Text      = c.Answer_Text;
                        pie.qc      = c.vcount;
                        pie.Total   = totalQuestionCount;
                        pie.Percent = (int)Math.Round(c.value, 0);
                        chartData.DataRowsPie.Add(pie);

                        chartData.data.Add((double)c.value);
                        chartData.Labels.Add(c.Answer_Full_Name);

                        if (!chartData.Colors.Contains(answerColorDefs[c.Answer_Text ?? "U"]))
                        {
                            chartData.Colors.Add(answerColorDefs[c.Answer_Text ?? "U"]);
                        }
                    }
                });


                // include component count so front end can know whether components are present
                chartData.ComponentCount = context.Answer_Components_Exploded.Where(a => a.Assessment_Id == assessmentId).Distinct().Count();
            }

            chartData.dataSets.ForEach(ds =>
            {
                ds.borderWidth = "0";
                ds.borderColor = "transparent";
            });

            return(chartData);
        }
Exemple #6
0
        public FeedbackDisplayContainer getFeedback()
        {
            int assessmentId                        = Auth.AssessmentForUser();
            RequirementsManager      rm             = new RequirementsManager(assessmentId);
            FeedbackDisplayContainer FeedbackResult = new FeedbackDisplayContainer();

            string AssessmentMode = GetAssessmentMode(assessmentId);

            try
            {
                using (CSET_Context context = new CSET_Context())
                {
                    var QuestionsWithFeedbackList = from a in context.Answer_Standards_InScope
                                                    where a.assessment_id == assessmentId &&
                                                    a.mode == AssessmentMode && a.FeedBack != null
                                                    select a;

                    if (QuestionsWithFeedbackList.Count() == 0)
                    {
                        FeedbackResult.FeedbackBody = "No feedback given for this assessment";
                        return(FeedbackResult);
                    }

                    string FeedbackSalutations = "Dear PED Module Administrator:";
                    string FeedbackDescription = "The following comments were provided for each of the questions: ";
                    string FeedbackWarning     = " *** Required *** Keep This Question ID ***";

                    bool FaaMail = context.AVAILABLE_STANDARDS.Where(x => x.Assessment_Id == assessmentId && x.Selected == true &&
                                                                     (x.Set_Name == "FAA_MAINT" || x.Set_Name == "FAA")).FirstOrDefault() != null;
                    FeedbackResult.FeedbackHeader = "Submit Feedback to DHS";
                    if (FaaMail)
                    {
                        FeedbackResult.FeedbackHeader += " and FAA";
                    }

                    string FaaEmail = "*****@*****.**";
                    string DHSEmail = "*****@*****.**";
                    if (FaaMail)
                    {
                        FeedbackResult.FeedbackEmailTo = FaaEmail + ";  ";
                    }
                    FeedbackResult.FeedbackEmailTo += DHSEmail;

                    FeedbackResult.FeedbackBody  = "Please email to: <br/><br/>";
                    FeedbackResult.FeedbackBody += FeedbackResult.FeedbackEmailTo + "<br/><br/><br/>";

                    FeedbackResult.FeedbackBody += FeedbackSalutations + "<br/><br/>";
                    FeedbackResult.FeedbackBody += FeedbackDescription + "<br/><br/>";

                    foreach (Answer_Standards_InScope q in QuestionsWithFeedbackList)
                    {
                        q.Question_Text              = rm.ResolveParameters(q.question_or_requirement_id, q.answer_id, q.Question_Text);
                        q.FeedBack                   = rm.ResolveParameters(q.question_or_requirement_id, q.answer_id, q.FeedBack);
                        FeedbackResult.FeedbackBody += "Users Feedback: <br/>" + q.FeedBack + "<br/><br/>";
                        FeedbackResult.FeedbackBody += q.Question_Text + "<br/><br/>";
                        FeedbackResult.FeedbackBody += FeedbackWarning + "<br/>";
                        FeedbackResult.FeedbackBody += "Question #" + " " + q.mode + ":" + q.question_or_requirement_id + ". <br/><br/><br/>";
                    }

                    FeedbackResult.FeedbackEmailSubject = "CSET Questions Feedback";
                    FeedbackResult.FeedbackEmailBody   += FeedbackSalutations + "%0D%0A%0D%0A";
                    FeedbackResult.FeedbackEmailBody   += FeedbackDescription + "%0D%0A%0D%0A";

                    foreach (Answer_Standards_InScope q in QuestionsWithFeedbackList)
                    {
                        q.Question_Text = rm.RichTextParameters(q.question_or_requirement_id, q.answer_id, q.Question_Text);
                        q.FeedBack      = rm.RichTextParameters(q.question_or_requirement_id, q.answer_id, q.FeedBack);
                        FeedbackResult.FeedbackEmailBody += "Users Feedback: %0D%0A" + q.FeedBack + "%0D%0A";
                        FeedbackResult.FeedbackEmailBody += q.Question_Text + "%0D%0A%0D%0A";
                        FeedbackResult.FeedbackEmailBody += FeedbackWarning + "%0D%0A";
                        FeedbackResult.FeedbackEmailBody += "Question #" + " " + q.mode + ":" + q.question_or_requirement_id + ". %0D%0A%0D%0A%0D%0A";
                    }

                    return(FeedbackResult);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Exemple #7
0
        public FirstPage GetDashboard()
        {
            int assessmentId = Auth.AssessmentForUser();

            FirstPage rval = null;

            using (CSET_Context context = new CSET_Context())
            {
                var results = new FirstPageMultiResult();
                context.LoadStoredProc("[dbo].[usp_GetFirstPage]")
                .WithSqlParam("assessment_id", assessmentId)
                .ExecuteStoredProc((handler) =>
                {
                    results.Result1 = handler.ReadToList <GetCombinedOveralls>().ToList();
                    handler.NextResult();
                    results.Result2 = handler.ReadToList <usp_getRankedCategories>().ToList();
                });



                if (results.Count >= 2)
                {
                    // for the compliance graph
                    List <Tuple <string, double> > compliance = new List <Tuple <string, double> >();

                    ChartData stand = null;
                    ChartData comp  = null;


                    foreach (GetCombinedOveralls c in results.Result1)
                    {
                        string mode = this.GetAssessmentMode(assessmentId);

                        string label = c.StatType;

                        if (c.StatType == "Components")
                        {
                            comp = TransformToChart(c);
                        }

                        if ((c.StatType == "Questions" && mode == "Q") ||
                            (c.StatType == "Requirement" && mode == "R"))
                        {
                            stand = TransformToChart(c);
                            label = stand.label;
                        }


                        if ((c.StatType.ToLower() == "overall") ||
                            (c.StatType.ToLower() == "components"))
                        {
                            compliance.Add(new Tuple <string, double>(c.StatType, c.Value));
                        }
                        else if ((c.StatType.ToLower() == "questions" && mode == "Q") ||
                                 (c.StatType.ToLower() == "requirement" && mode == "R"))
                        {
                            // Questions or Requirements are included only if we are in that 'mode', renamed as 'Standards'
                            compliance.Add(new Tuple <string, double>("Standards", c.Value));
                        }
                    }

                    ChartData overallBars = new ChartData()
                    {
                        backgroundColor = "red",
                        borderWidth     = "1",
                        label           = "overalls"
                    };

                    // order the compliance elements for display
                    var complianceOrdered = new List <Tuple <string, double> >();
                    complianceOrdered.Add(compliance.First(x => x.Item1 == "Overall"));
                    complianceOrdered.Add(compliance.First(x => x.Item1 == "Standards"));
                    complianceOrdered.Add(compliance.First(x => x.Item1 == "Components"));
                    foreach (var j in complianceOrdered)
                    {
                        overallBars.Labels.Add(j.Item1);
                        overallBars.data.Add(j.Item2);
                    }


                    ChartData chartData = new ChartData();

                    foreach (usp_getRankedCategories c in results.Result2.Take(5))
                    {
                        chartData.data.Add((double)(c.prc ?? 0.0M));
                        chartData.Labels.Add(c.Question_Group_Heading);
                    }


                    rval = new FirstPage()
                    {
                        OverallBars         = overallBars,
                        StandardsSummaryPie = stand,
                        ComponentSummaryPie = comp,
                        RedBars             = chartData
                    };
                }
            }

            return(rval);
        }