private void GenerateFooters(StringBuilder text, ReportGrouping grouping, List <ReportColumn> columns, Separators separators) { GenerateFooterSum(text, grouping, columns, separators); GenerateFooterAverage(text, grouping, columns, separators); GenerateFooterNpv(text, grouping, columns, separators); GenerateFooterIrr(text, grouping, columns, separators); }
public string Generate(ReportGrouping grouping, ReportFormat format) { var columns = GenerateColumns().ToList(); if (columns.Count == 0) { return(string.Empty); } switch (format) { case ReportFormat.Markdown: return(GenerateNotes(format, Separators.None) + GenerateMarkdown(grouping, columns)); case ReportFormat.Csv: return(GenerateNotes(format, Separators.Csv) + GenerateCsv(grouping, columns)); case ReportFormat.ParametersCsv: return(GenerateNotes(format, Separators.None) + GenerateParameters(columns, Separators.Csv)); case ReportFormat.ParametersMarkdown: return(GenerateNotes(format, Separators.None) + GenerateParameters(columns, Separators.Markdown)); default: throw new ArgumentOutOfRangeException(nameof(format), format, null); } }
private void GenerateCalculated(ReportGrouping grouping, List <ReportColumn> columns) { foreach (var column in columns) { column.Calculate(grouping, (double)DiscountRatePerYear); } }
private string GenerateCsv(ReportGrouping grouping, List <ReportColumn> columns) { var text = new StringBuilder(); GenerateHeaders(text, grouping, columns, Separators.Csv); GenerateData(text, grouping, columns, Separators.Csv); GenerateCalculated(grouping, columns); GenerateFooters(text, grouping, columns, Separators.Csv); return(text.ToString()); }
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); } }
public ReducedEntryMeans(ReportGrouping reportGrouping, Dictionary <string, BaseBand> bands, string analysisType, List <string> observations) { this.reportGrouping = reportGrouping; AnalysisTypeDefinition atType = AnalysisTypeDefinition.Get(analysisType); if (atType != null) { foreach (string field in atType.Fields) { analysisTypeFields.Add(field); } } this.bands = new Dictionary <string, BaseBand>(bands); if (observations.Count == 0) { throw new ArgumentOutOfRangeException("at least one observation needs to be supplied."); } this.observations = new HashSet <string>(observations); }
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); }
public void Calculate(ReportGrouping grouping, double discountRatePerYear) { // The underlying data is always monthly var discountRate = grouping == ReportGrouping.Yearly ? discountRatePerYear : Financial.ConvertDiscountRateYearToMonth(discountRatePerYear); if (CalculateNpv) { Npv = (decimal)Financials.Npv.Calculate(_cashFlows, discountRate); } if (CalculateIrr) { var irr = Financials.Irr.Calculate(_cashFlows, discountRate); Irr = double.IsNaN(irr) ? 0m : (decimal)irr; } // If we ask for yearly, convert the resulting IRR if (grouping == ReportGrouping.Monthly) { Irr = Financial.ConvertDiscountRateMonthToYear(Irr); } }
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); }
/// <inheritdoc /> public virtual string GenerateReport(ReportGrouping grouping, ReportFormat format) => Report.Generate(grouping, format);