/// <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 }); }
/// <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; }
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); }