/// <summary> Gets report result. </summary> /// <param name="items"> The items. </param> /// <param name="request"> The request. </param> /// <returns> The report result. </returns> public ReportResult GetResult(BaseItem[] items, IReportsQuery request) { ReportIncludeItemTypes reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes); ReportDisplayType displayType = ReportHelper.GetReportDisplayType(request.DisplayType); List <ReportOptions <BaseItem> > options = this.GetReportOptions <BaseItem>(request, () => this.GetDefaultHeaderMetadata(reportRowType), (hm) => this.GetOption(hm)).Where(x => this.DisplayTypeVisible(x.Header.DisplayType, displayType)).ToList(); var headers = GetHeaders <BaseItem>(options); var rows = GetReportRows(items, options); ReportResult result = new ReportResult { Headers = headers }; HeaderMetadata groupBy = ReportHelper.GetHeaderMetadataType(request.GroupBy); int i = headers.FindIndex(x => x.FieldName == groupBy); if (groupBy != HeaderMetadata.None && i >= 0) { var rowsGroup = rows.SelectMany(x => x.Columns[i].Name.Split(';'), (x, g) => new { Group = g.Trim(), Rows = x }) .GroupBy(x => x.Group) .OrderBy(x => x.Key) .Select(x => new ReportGroup { Name = x.Key, Rows = x.Select(r => r.Rows).ToList() }); result.Groups = rowsGroup.ToList(); result.IsGrouped = true; } else { result.Rows = rows; result.IsGrouped = false; } return(result); }
/// <summary> Gets report options. </summary> /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="request"> The request. </param> /// <param name="getHeadersMetadata"> The get headers metadata. </param> /// <param name="getOptions"> Options for controlling the get. </param> /// <returns> The report options. </returns> protected List <ReportOptions <T> > GetReportOptions <T>(IReportsHeader request, Func <List <HeaderMetadata> > getHeadersMetadata, Func <HeaderMetadata, ReportOptions <T> > getOptions) { List <HeaderMetadata> headersMetadata = getHeadersMetadata(); List <ReportOptions <T> > options = new List <ReportOptions <T> >(); ReportDisplayType displayType = ReportHelper.GetReportDisplayType(request.DisplayType); foreach (HeaderMetadata header in headersMetadata) { ReportOptions <T> headerOptions = getOptions(header); if (this.DisplayTypeVisible(headerOptions.Header.DisplayType, displayType)) { options.Add(headerOptions); } } if (request != null && !string.IsNullOrEmpty(request.ReportColumns)) { List <HeaderMetadata> headersMetadataFiltered = ReportHelper.GetFilteredReportHeaderMetadata(request.ReportColumns, () => headersMetadata); foreach (ReportHeader header in options.Select(x => x.Header)) { if (this.DisplayTypeVisible(header.DisplayType, displayType)) { if (!headersMetadataFiltered.Contains(header.FieldName) && displayType != ReportDisplayType.Export) { header.DisplayType = ReportDisplayType.None; } } else { header.DisplayType = ReportDisplayType.None; } } } return(options); }