Пример #1
0
        /// <summary>
        /// Returns a ChartData object with the answer distribution for the StatType.
        /// The answer distribution is ordered and normalized to total 100%,
        /// fixing any rounding anomaly.
        /// </summary>
        /// <param name="c"></param>
        /// <returns></returns>
        private ChartData TransformToChart(GetCombinedOveralls c)
        {
            // adjust the percentages to equal 100% after rounding
            var cAdjusted = new BusinessLogic.Common.PercentageFixer(c.Y, c.N, c.NA, c.A, c.U);


            List <double> data   = new List <double>();
            List <String> labels = new List <string>();

            data.Add((int)cAdjusted.Y);
            labels.Add(answerColorDefs["Y"]);
            data.Add((int)cAdjusted.N);
            labels.Add(answerColorDefs["N"]);
            data.Add((int)cAdjusted.NA);
            labels.Add(answerColorDefs["NA"]);
            data.Add((int)cAdjusted.A);
            labels.Add(answerColorDefs["A"]);
            data.Add((int)cAdjusted.U);
            labels.Add(answerColorDefs["U"]);

            return(new ChartData()
            {
                label = new List <string>()
                {
                    "Questions", "Requirements"
                }.Contains(c.StatType) ? "Standards" : c.StatType,
                Labels = labels,
                data = data
            });
        }
Пример #2
0
        /// <summary>
        /// Re-orders the pieces into Y|N|NA|A|U order.
        /// Also adjusts percentages to equal 100.
        /// </summary>
        /// <param name="r"></param>
        void SortIntoAnswerOrder(StandardSummaryOverallMultiResult r)
        {
            var shortName = r.Result1.Select(x => x.Short_Name).Distinct();

            var orderedList = new List <DataRowsPie>();

            foreach (var s in shortName)
            {
                var tempOList = new List <DataRowsPie>
                {
                    r.Result1.Where(p => p.Answer_Text == "Y" && p.Short_Name == s).FirstOrDefault(),
                    r.Result1.Where(p => p.Answer_Text == "N" && p.Short_Name == s).FirstOrDefault(),
                    r.Result1.Where(p => p.Answer_Text == "NA" && p.Short_Name == s).FirstOrDefault(),
                    r.Result1.Where(p => p.Answer_Text == "A" && p.Short_Name == s).FirstOrDefault(),
                    r.Result1.Where(p => p.Answer_Text == "U" && p.Short_Name == s).FirstOrDefault()
                };

                // adjust the percentages to equal 100% after rounding
                var cAdjusted = new BusinessLogic.Common.PercentageFixer(tempOList[0].Percent,
                                                                         tempOList[1].Percent, tempOList[2].Percent, tempOList[3].Percent, tempOList[4].Percent);

                tempOList[0].Percent = cAdjusted.Y;
                tempOList[1].Percent = cAdjusted.N;
                tempOList[2].Percent = cAdjusted.NA;
                tempOList[3].Percent = cAdjusted.A;
                tempOList[4].Percent = cAdjusted.U;

                orderedList = orderedList.Union(tempOList).ToList();
            }


            r.Result1 = orderedList;
        }
Пример #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("[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);
        }