public void SeparateSeriesCategory()
        {
            if (ReportChartData.Series.Count != 1)
            {
                return;
            }

            var ser = ReportChartData.Series.FirstOrDefault();

            var series = ser.Data.Select(it => new ReportSeriesChartData()
            {
                Data = new List <ReportSeriesChartDataItem> {
                    it
                }, Name = it.Label
            }).ToList();

            //var series = ser.Data.Select(it => new ReportSeriesChartData() { Data = ser.Data.Select(d => new ReportSeriesChartDataItem() {
            //	Label = d.Label,
            //	Value = d.Label == it.Label ? d.Value : String.Empty,
            //	ColumnTemplate = d.ColumnTemplate,
            //	RowTemplate = d.RowTemplate
            //}).ToList(), Name = it.Label }).ToList();

            ReportChartData.Clean();
            ReportChartData.Series.AddRange(series);
            //ReportChartData.AddCategoryRange(series.Select(it => it.Name).ToArray());
        }
Ejemplo n.º 2
0
        private async Task LoadAllIcons(ReportChartData data)
        {
            var docsIds = data.Series?.Where(it => it.IconDocument != null)
                          .Select(it => it.IconDocument.Value).ToArray();

            if (docsIds.Length == 0)
            {
                return;
            }

            var args = new RetrieveHyperDocumentsArgs();

            args.DocumentsIds = docsIds;

            var results = await this.HyperStore.ExecuteAsync(args);

            if (args.ExecutionResult.IsNotSuccess)
            {
                return;
            }

            foreach (var item in results)
            {
                var icon = item?.GetPayload <UniIconResource>();
                if (icon != null)
                {
                    var chartData = data.Series.FirstOrDefault(it => it.IconDocument.GetValueOrDefault().Equals(item.Id));
                    chartData.Icon = icon;
                }
            }
        }
Ejemplo n.º 3
0
        public async Task RefreshReportResultData()
        {
            var widget     = this.Widget as ReportBaseWidget;
            var dataSource = widget?.DataSource;

            ReportChartData = null;

            OnReportResultChanged?.Invoke();
            RaiseNotify(nameof(ReportChartData));             // Refresh UI.

            if (dataSource == null)
            {
                return;
            }

            IsLoadedReportResult = false;

            //OnReportResultChanged?.Invoke();
            //RaiseNotify(nameof(ReportChartData)); // Refresh UI - loader.

            try
            {
                var context = new WidgetDataSourceContext();
                context.HyperStore = this.HyperStore;

                // Only if we are allowed as a active filtering target, do we set the filters.
                if (widget is ActiveFilterReportChartWidget activeReportWidget && activeReportWidget.AllowFiltrationTarget)
                {
                    context.GroupFilterData = this.DashboardVm?.ObtainFilterGroup(widget.FilterGroup);
                }

                var reportResult = await dataSource.GenerateFilteredReportResultAsync(context);

                if (reportResult == null)
                {
                    Logger.Instance.Error("Failed to load report result");
                    return;
                }

                Report = reportResult.FirstOrDefault();

                if (Report == null || Report.ColumnsDefinitions.Length == 0)
                {
                    return;
                }

                var includeCategoryFilter = widget.DataSource.IncludeCategories?.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(it => it.Trim()).ToArray();
                var excludeCategoryFilter = widget.DataSource.ExcludeCategories?.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(it => it.Trim()).ToArray();

                ReportChartData = LoadReportChartData(Report, includeCategoryFilter, excludeCategoryFilter, widget.DataSource.Uppercase);

                if (ReportChartData != null)
                {
                    ReportChartData.MapIcons(dataSource.IconMapping);
                    await LoadAllIcons(ReportChartData);
                }
            }
            finally
            {
                IsLoadedReportResult = true;

                OnReportResultChanged?.Invoke();
                RaiseNotify(nameof(ReportChartData));                 // Refresh UI.
            }
        }
Ejemplo n.º 4
0
        ReportChartData LoadReportChartData(Report report,
                                            string[] includeCategoryFilters,
                                            string[] excludeCategoryFilters,
                                            bool toUpper = false)
        {
            var result = new ReportChartData();

            if (report == null)
            {
                return(result);
            }

            try
            {
                if (report.ColumnsDefinitions == null)
                {
                    return(result);
                }

                var columns = report.ColumnsDefinitions;
                var rowData = report.Rows;

                var resultCategoryRange = new List <string>();

                for (var columnIndex = 0; columnIndex < columns.Length; columnIndex++)
                {
                    var columnTemplate = columns[columnIndex];
                    var columnTitle    = columnTemplate.Title;

                    if (includeCategoryFilters?.Any() == true && !includeCategoryFilters.Contains(columnTitle))
                    {
                        continue;
                    }

                    if (excludeCategoryFilters?.Any() == true && excludeCategoryFilters.Contains(columnTitle))
                    {
                        continue;
                    }

                    if (toUpper)
                    {
                        columnTitle = columnTitle.ToUpper();
                    }

                    var chartSeries    = new ReportSeriesChartData();
                    var existingSeries = result.Series.FirstOrDefault(it => it.Name == columnTitle);

                    if (existingSeries != null)
                    {
                        chartSeries = existingSeries;
                    }
                    else
                    {
                        chartSeries.Name = columnTitle;
                        resultCategoryRange.Add(columnTitle);
                    }

                    for (var rowIndex = 0; rowIndex < rowData.Length; rowIndex++)
                    {
                        var row = rowData[rowIndex];

                        var label = report.RowsDefinitions[rowIndex].Title;
                        if (string.IsNullOrWhiteSpace(label))
                        {
                            label = row.Template.Title;
                        }

                        var cell = row.Cells[columnIndex];
                        var data = cell.Values.FirstOrDefault();

                        ReportSeriesChartDataItem chartItem = null;
                        var existingChartItem = chartSeries.Data.FirstOrDefault(it => it.Label == label);
                        if (chartItem == null)
                        {
                            chartItem = new ReportSeriesChartDataItem
                            {
                                CategoryName = columnTitle,
                                Value        = FormatData(data),
                                Label        = label,

                                RowTemplate    = row.Template,
                                ColumnTemplate = columnTemplate,

                                Cell = cell,
                            };

                            if (result.IsDateAxis)
                            {
                                try
                                {
                                    result.IsDateAxis = row.Template?.StartDateTime.HasValue == true;

                                    //var position = Report.ParseTimePosition(label);
                                    //if (!position.HasValue)
                                    //{
                                    //	result.IsDateAxis = false;
                                    //}
                                    //else
                                    //{
                                    //	chartItem.DatePosition = position.Value;
                                    //	chartItem.StreamPosition = Report.ParseStreamPosition(label);
                                    //}
                                }
                                catch (Exception ex)
                                {
                                    result.IsDateAxis = false;
                                }
                            }

                            chartSeries.Data.Add(chartItem);
                        }
                        else
                        {
                            chartItem.Value += Convert.ToUInt16(data.ToString());
                        }
                    }

                    result.AddCategoryRange(resultCategoryRange.ToArray());
                    result.Series.Add(chartSeries);
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.Error(typeof(ReportWidgetVm <>), nameof(LoadReportChartData), ex);
                System.Diagnostics.Debug.Assert(false, ex.Message);
            }

            return(result);
        }