private void GenerateMarkdownAlignment(StringBuilder text, ReportGrouping grouping, List <ReportColumn> columns) { text.Append(Separators.Markdown.First); var first = true; switch (grouping) { case ReportGrouping.Monthly: case ReportGrouping.Yearly: text.Append(" ---: "); first = false; break; case ReportGrouping.NotGrouped: break; default: throw new ArgumentOutOfRangeException(nameof(grouping), grouping.ToString()); } foreach (var column in columns) { if (first) { first = false; } else { text.Append(Separators.Markdown.Middle); } switch (column.Alignment) { case ReportColumnAlignment.Left: text.Append(" :--- "); break; case ReportColumnAlignment.Right: text.Append(" ---: "); break; case ReportColumnAlignment.Center: text.Append(" :---: "); break; default: throw new ArgumentOutOfRangeException(nameof(column.Alignment), column.Alignment.ToString()); } } text.AppendLine(Separators.Markdown.Last); }
private void GenerateData(StringBuilder text, ReportGrouping grouping, List <ReportColumn> columns, Separators separators) { var groups = GetGroups(grouping).ToList(); foreach (var group in groups) { var first = true; text.Append(separators.First); switch (grouping) { case ReportGrouping.Monthly: text.Append($"{group.Period}"); first = false; break; case ReportGrouping.Yearly: text.Append($"{group.Period}"); first = false; break; case ReportGrouping.NotGrouped: break; default: throw new ArgumentOutOfRangeException(nameof(grouping), grouping.ToString()); } foreach (var column in columns) { if (first) { first = false; } else { text.Append(separators.Middle); } text.Append($"{column.FormatValue(group.GetValue(column))}"); column.Accumulate(group); } text.AppendLine(separators.Last); } }
private void GenerateFooterSum(StringBuilder text, ReportGrouping grouping, List <ReportColumn> columns, Separators separators) { if (!columns.Any(c => c.CalculateSum)) { return; } var first = true; text.Append(separators.First); switch (grouping) { case ReportGrouping.Monthly: case ReportGrouping.Yearly: text.Append("Sum"); first = false; break; case ReportGrouping.NotGrouped: break; default: throw new ArgumentOutOfRangeException(nameof(grouping), grouping.ToString()); } foreach (var column in columns) { if (first) { first = false; } else { text.Append(separators.Middle); } if (column.CalculateSum) { text.Append($"{column.FormatValue(column.Sum)}"); } } text.AppendLine(separators.Last); }
private IEnumerable <ReportGroup <T> > GetGroups(ReportGrouping grouping) { switch (grouping) { case ReportGrouping.Monthly: var month = 0; foreach (var group in _data.Select(c => new ReportGroup <T>(c, month++))) { yield return(group); } break; case ReportGrouping.Yearly: if (_data.Count > 0) { var year = 0; yield return(new ReportGroup <T>(_data[0], year++)); const int size = 12; for (var i = 1; i < _data.Count; i += size) { yield return(new ReportGroup <T>(_data.GetRange(i, Math.Min(size, _data.Count - i)), year++)); } } break; case ReportGrouping.NotGrouped: foreach (var group in _data.Select(c => new ReportGroup <T>(c))) { yield return(group); } break; default: throw new ArgumentOutOfRangeException(nameof(grouping), grouping.ToString()); } }
private void GenerateHeaders(StringBuilder text, ReportGrouping grouping, List <ReportColumn> columns, Separators separators) { var first = true; text.Append(separators.First); switch (grouping) { case ReportGrouping.Monthly: text.Append("Month"); first = false; break; case ReportGrouping.Yearly: text.Append("Year"); first = false; break; case ReportGrouping.NotGrouped: break; default: throw new ArgumentOutOfRangeException(nameof(grouping), grouping.ToString()); } foreach (var column in columns) { if (first) { first = false; } else { text.Append(separators.Middle); } text.Append($"{column.Name}"); } text.AppendLine(separators.Last); }