/// <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; }
private ChartData GetStandardsSummaryMultiple(CSET_Context context, int assessmentId) { ChartData myChartData = new ChartData(); myChartData.DataRowsPie = new List <DataRowsPie>(); myChartData.Colors = new List <string>(); var results = new StandardSummaryOverallMultiResult(); context.LoadStoredProc("[dbo].[usp_getStandardsSummaryPage]") .WithSqlParam("assessment_id", assessmentId) .ExecuteStoredProc((handler) => { results.Result1 = handler.ReadToList <DataRowsPie>().ToList(); }); SortIntoAnswerOrder(results); /** * foreach each standard in the list * create a chartdata * foreach record * if the previous does not equal the current then create a new chartdata * add the record to the chart data * */ string previousStandard = ""; Dictionary <string, ChartData> answers = new Dictionary <string, ChartData>(); foreach (var data in results.Result1.OrderBy(x => x.Short_Name).ThenBy(x => x.Answer_Order)) { //this only adds the labels if (previousStandard != data.Short_Name) { myChartData.Labels.Add(data.Short_Name); previousStandard = data.Short_Name; } ChartData chartData; if (!answers.TryGetValue(data.Answer_Full_Name, out chartData)) { chartData = new ChartData(); chartData.label = data.Answer_Full_Name; chartData.backgroundColor = answerColorDefs[data.Answer_Text]; myChartData.dataSets.Add(chartData); answers.Add(data.Answer_Full_Name, chartData); } myChartData.DataRowsPie.Add(data); chartData.data.Add((double)(data.Percent ?? 0)); } return(myChartData); }
/// <summary> /// Re-orders the pieces into Y|N|NA|A|U order /// </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() }; orderedList = orderedList.Union(tempOList).ToList(); } r.Result1 = orderedList; }
private ChartData GetStandardsSummarySingle(CSET_Context context, int assessmentId) { ChartData myChartData = null; var results = new StandardSummaryOverallMultiResult(); context.LoadStoredProc("[usp_getStandardsSummaryPage]") .WithSqlParam("assessment_id", assessmentId) .ExecuteStoredProc((handler) => { results.Result1 = handler.ReadToList <DataRowsPie>().ToList(); }); if (results.Count >= 1) { SortIntoAnswerOrder(results); List <double> data = new List <double>(); List <String> Colors = new List <string>(); List <string> Labels = new List <string>(); List <DataRowsPie> rows = new List <DataRowsPie>(); myChartData = new ChartData(); Labels = new List <string>(); Dictionary <string, ChartData> charts = new Dictionary <string, ChartData>(); foreach (DataRowsPie c in results.Result1) { ChartData next; if (!charts.TryGetValue(c.Answer_Full_Name, out next)) { data = new List <double>(); next = new ChartData() { Colors = Colors, DataRowsPie = rows, borderWidth = "0", borderColor = "transparent", label = c.Answer_Full_Name, Labels = Labels, data = data }; charts.Add(c.Answer_Full_Name, next); } else { data = next.data; rows = next.DataRowsPie; } data.Add((double)(c.Percent ?? 0)); myChartData.data.Add((double)(c.Percent ?? 0)); if (!Colors.Contains(answerColorDefs[c.Answer_Text ?? "U"])) { Colors.Add(answerColorDefs[c.Answer_Text ?? "U"]); } Labels.Add(c.Answer_Full_Name); rows.Add(c); } myChartData.borderWidth = "0"; myChartData.borderColor = "transparent"; myChartData.label = "Standards Summary"; myChartData.Labels = Labels; myChartData.Colors = Colors; myChartData.DataRowsPie = rows; myChartData.DataRows = new List <DataRows>(); } myChartData.dataSets.ForEach(ds => { ds.borderWidth = "0"; ds.borderColor = "transparent"; }); return(myChartData); }