Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }