public ReportResult GetReportResult(BaseItem[] items, ReportViewType reportRowType, BaseReportRequest request) { List <HeaderMetadata> headersMetadata = this.GetFilteredReportHeaderMetadata(reportRowType, request); var headers = GetReportHeaders(reportRowType, headersMetadata); var rows = GetReportRows(items, headersMetadata); 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 { Genre = g.Trim(), Rows = x }) .GroupBy(x => x.Genre) .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); }
public List <HeaderMetadata> GetFilteredReportHeaderMetadata(ReportViewType reportRowType, BaseReportRequest request) { if (request != null && !string.IsNullOrEmpty(request.ReportColumns)) { var s = request.ReportColumns.Split('|').Select(x => ReportHelper.GetHeaderMetadataType(x)).Where(x => x != HeaderMetadata.None); return(s.ToList()); } else { return(this.GetDefaultReportHeaderMetadata(reportRowType)); } }
/// <summary> Gets filtered report header metadata. </summary> /// <param name="reportColumns"> The report columns. </param> /// <param name="defaultReturnValue"> The default return value. </param> /// <returns> The filtered report header metadata. </returns> public static List <HeaderMetadata> GetFilteredReportHeaderMetadata(string reportColumns, Func <List <HeaderMetadata> > defaultReturnValue = null) { if (!string.IsNullOrEmpty(reportColumns)) { var s = reportColumns.Split('|').Select(x => ReportHelper.GetHeaderMetadataType(x)).Where(x => x != HeaderMetadata.None); return(s.ToList()); } else if (defaultReturnValue != null) { return(defaultReturnValue()); } else { return(new List <HeaderMetadata>()); } }
/// <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); }