/// <summary> /// Gets the chart values from per grade outcome YAML. /// </summary> /// <param name="tableYAML">The table yaml.</param> /// <param name="stateId">The state identifier.</param> /// <returns>System.String.</returns> public string GetStackedChartValues(string tableYAML, int stateId) { string html = ""; List <ChartData> grades = new List <ChartData>(); List <ChartData> result = new List <ChartData>(); try { string tmp = ""; string values = ""; if (!tmp.StartsWith("---\n")) { tmp = "---\n" + tmp; } tmp = tableYAML.Replace("\\n", "\r\n"); tmp = tmp.Replace("\t", ""); // Setup the input var input = new StringReader(tmp); // Load the stream var yaml = new YamlStream(); yaml.Load(input); // Examine the stream var mapping = (YamlMappingNode)yaml.Documents[0].RootNode; int outer = 0; foreach (var entry in mapping.Children) { if (entry.Value.ToString().Contains(",")) { int i = 0; foreach (var ent in ((YamlSequenceNode)entry.Value)) { if (entry.Key.ToString() == "Grade") { string value = String.Equals(ent.ToString(), "---") ? "Overall": Ordinal(Convert.ToInt32(ent.ToString())) + " grade"; ChartData cd = new ChartData { Label = value }; grades.Add(cd); } else if (entry.Key.ToString().Contains(": treated")) { ChartData cd = (ChartData)grades[i].Clone(); cd.Type = entry.Key.ToString().Replace(": treated", ""); cd.Value = String.Format("{0:0.0}", Convert.ToDecimal(ent.ToString()) * 100); cd.SD = "Treated"; cd.Rank = outer; result.Add(cd); } else if (entry.Key.ToString().Contains(": control")) { ChartData cd = (ChartData)grades[i].Clone(); cd.Type = entry.Key.ToString().Replace(": control", ""); cd.Value = String.Format("{0:0.0}", Convert.ToDecimal(ent.ToString()) * 100); cd.SD = "Control"; cd.Rank = outer; result.Add(cd); } i++; } } else { if (entry.Key.ToString() == "Grade") { string value = String.Equals(entry.Value.ToString(), "---") ? "Overall" : Ordinal(Convert.ToInt32(entry.Value.ToString())) + " grade"; ChartData cd = new ChartData { Label = value }; grades.Add(cd); } if (entry.Key.ToString().Contains(": treated")) { ChartData cd = (ChartData)grades[0].Clone(); cd.Type = entry.Key.ToString().Replace(": treated", ""); cd.Value = String.Format("{0:0.0}", Convert.ToDecimal(entry.Value.ToString()) * 100); cd.SD = "Treated"; cd.Rank = outer; result.Add(cd); } if (entry.Key.ToString().Contains(": control")) { ChartData cd = (ChartData)grades[0].Clone(); cd.Type = entry.Key.ToString().Replace(": control", ""); cd.Value = String.Format("{0:0.0}", Convert.ToDecimal(entry.Value.ToString()) * 100); cd.SD = "Control"; cd.Rank = outer; result.Add(cd); } } if (entry.Key.ToString().Contains(": control")) { outer++; } } string json = JsonConvert.SerializeObject(result); return(json); } catch (Exception ex) { string temp = ex.Message; // result.Append("<p>There was an error parsing the YAML for this subgroup analysis.</p>"); return(temp); } }
/// <summary> /// Takes in values for charting and outputs as JSON. /// </summary> /// <param name="varname">The name of the variable to format, for special cases.</param> /// <param name="control">CSV list of values for control group</param> /// <param name="intervention">CSV list of values for intervention (treatment) group</param> /// <param name="grade">CSV list of grades</param> /// <param name="isPercent">Boolean if the number is a percentage or value</param> /// <param name="sdControl">CSV list of values for standard deviation for control group</param> /// <param name="sdIntervention">CSV list of values for standard deviation for interventiong (treatment) group</param> /// <returns></returns> public string GetChartDataJSON(string varname, string control, string intervention, string grade, bool isPercent, string sdControl = "", string sdIntervention = "") { string[] controls = control.Split(','); string[] interventions = intervention.Split(','); string[] grades = grade.Split(','); string[] sdControls = sdControl.Split(','); string[] sdInterventions = sdIntervention.Split(','); string json = ""; List <ChartData> chartData = new List <ChartData>(); ChartData cd = new ChartData(); Double cval; Double ival; Double sdval; int gradeValue; if (isPercent) { for (int i = 0; i < controls.Length; i++) { if (Double.TryParse(controls[i], out ival)) { cd = new ChartData { Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i], Value = formatPercent(controls[i], 0), Type = "Control", SD = Double.TryParse(sdControls[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-" }; chartData.Add(cd); } } for (int i = 0; i < interventions.Length; i++) { if (Double.TryParse(interventions[i], out ival)) { cd = new ChartData { Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i], Value = formatPercent(interventions[i], 0), Type = "Treatment", SD = Double.TryParse(sdInterventions[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-" }; chartData.Add(cd); } } } else { if (varname == "promotion") { for (int i = 0; i < controls.Length; i++) { if (Double.TryParse(controls[i], out cval)) { cd = new ChartData { Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i], Value = String.Format("{0:0.00}", cval), Type = "Control", SD = Double.TryParse(sdControls[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-" }; chartData.Add(cd); } } for (int i = 0; i < interventions.Length; i++) { if (Double.TryParse(interventions[i], out ival)) { cd = new ChartData { Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i], Value = String.Format("{0:0.00}", ival), Type = "Treatment", SD = Double.TryParse(sdInterventions[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-" }; chartData.Add(cd); } } } else { for (int i = 0; i < controls.Length; i++) { if (Double.TryParse(controls[i], out cval)) { cd = new ChartData { Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i], Value = String.Format("{0:0}", Math.Ceiling(cval)), Type = "Control", SD = Double.TryParse(sdControls[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-" }; chartData.Add(cd); } } for (int i = 0; i < interventions.Length; i++) { if (Double.TryParse(interventions[i], out ival)) { cd = new ChartData { Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i], Value = String.Format("{0:0}", Math.Ceiling(ival)), Type = "Treatment", SD = Double.TryParse(sdInterventions[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-" }; chartData.Add(cd); } } } } json = JsonConvert.SerializeObject(chartData); return(json); }