public async Task <IEnumerable <Pie> > GetChartList(string reportName, string categoryName) { CategoriesDal categoriesDal = new CategoriesDal(); ReportChartDal chartsDal = new ReportChartDal(); var ChartsList = new List <Pie>(); Category category = categoriesDal.GetAllCategoriesIncludeReports().FirstOrDefault(r => r.CategoryName == categoryName); Report report = category.Reports.FirstOrDefault(r => r.ReportName == reportName); IEnumerable <ReportChartModel> reportsCarts = chartsDal.GetChartsList(r => r.ReportName == report.ReportId); foreach (var item in reportsCarts) { WorkItems workItemsData = await GetWorkItemData(item.QueryId); var ids = workItemsData.GetAllIds(); WorkItemResponse response = null; foreach (var id in ids) { var chartData = await HttpProvider.GetHttpRequest("_apis/wit/workItems?ids=" + id + "&fields=" + item.ColumnReferenceName); var currentItem = JsonConvert.DeserializeObject <WorkItemResponse>(chartData); if (response == null) { response = currentItem; } else { response.value.AddRange(currentItem.value); } } var propName = item.ColumnReferenceName.Replace(".", ""); var groupedData = response.value.GroupBy(p => p.fields.GetType().GetProperty(propName).GetValue(p.fields)); List <Datum> PieLabels = new List <Datum>(); int total = 0; foreach (var PieData in groupedData) { total += PieData.Count(); PieLabels.Add(new Datum { Label = PieData.Key == null ? "No data" : PieData.Key.ToString(), Value = PieData.Count() }); } var pie = new Pie { Name = item.ChartName, Element = "morris-donut-chart" + ChartsList.Count, Type = "Donut", Data = PieLabels.ToArray(), TotalData = total.ToString(), DataShowType = item.DataShowType.ToString().ToLower() }; ChartsList.Add(pie); } return(ChartsList); }
private static async Task <Pie> GeneratPie(ReportChartModel item, int position) { var workItemData = await GetWorkItemData(item.QueryId, null); WorkItems workItemsData = workItemData.Item1; var ids = workItemsData.GetAllIds(); WorkItemResponse response = null; bool aggregation = false; foreach (var id in ids) { string aggregationFiled = ""; if (!string.IsNullOrEmpty(item.aggregationColumnReferenceName)) { aggregationFiled = "," + item.aggregationColumnReferenceName; aggregation = true; } var chartData = await HttpProvider.GetHttpRequest(StaticParams.TfsUrl, "_apis/wit/workItems?ids=" + id + "&fields=" + item.ColumnReferenceName + aggregationFiled); var currentItem = JsonConvert.DeserializeObject <WorkItemResponse>(chartData); if (response == null) { response = currentItem; } else { response.value.AddRange(currentItem.value); } } var propName = item.ColumnReferenceName.Replace(".", ""); var groupedData = response.value.GroupBy(p => p.fields.GetType().GetProperty(propName).GetValue(p.fields)).Select(g => new { titel = g.Key, value = (double)g.Count() }); if (aggregation) { var aggregationPropName = item.aggregationColumnReferenceName.Replace(".", ""); groupedData = response.value.GroupBy(p => p.fields.GetType().GetProperty(propName).GetValue(p.fields)).Select(g => new { titel = g.Key, value = g.Sum(f => (double)f.fields.GetType().GetProperty(aggregationPropName).GetValue(f.fields)) }); } List <Datum> PieLabels = new List <Datum>(); int total = response.value.Count; foreach (var PieData in groupedData) { PieLabels.Add(new Datum { Label = PieData.titel == null ? "No data" : PieData.titel.ToString(), Value = PieData.value, }); } var pie = new Pie { Name = item.ChartName, Element = "pie-chart" + position, Type = item.ChartType.ToString().ToLower(), Data = PieLabels.ToArray(), TotalData = total.ToString(), DataShowType = item.DataShowType.ToString().ToLower() }; return(pie); }