public static ReportRow Unify(ICollection<ReportRow> reportRows) { if (reportRows == null || reportRows.Count == 0) { throw new ArgumentException("reportRows"); } var newRow = new ReportRow { Name = reportRows.First().Name, MaxValue = reportRows.First().MaxValue, Results = new List<int>() }; for (var i = 0; i < reportRows.Count; i++) { if (newRow.Name != reportRows.ElementAt(i).Name) { throw new Exception("Rows discrepancy"); } newRow.Results.AddRange(reportRows.ElementAt(i).Results); } return newRow; }
public ReportGroup(XReportTableGroup xmlGroup, IFormulaProvider formulaProvider, ReportDataProvider reportDataProvider) { if (xmlGroup == null) { throw new ArgumentNullException("xmlGroup"); } if (formulaProvider == null) { throw new ArgumentNullException("formulaProvider"); } if (reportDataProvider == null) { throw new ArgumentNullException("reportDataProvider"); } Name = xmlGroup.Name; ReportRows = new List<ReportRow>(); foreach (var formulaId in xmlGroup.Formulas) { var formulaInfo = formulaProvider.GetFormula(formulaId); var characteristic = new Characteristic(formulaInfo, reportDataProvider); var value = NormalizeValue(characteristic.Evaluate()); if (double.IsNaN(value)) { value = 0; } //TODO: Round or Integral part? var reportFormula = new ReportRow(formulaInfo.Name, Convert.ToInt32(value), Convert.ToInt32(formulaInfo.MaxValue)); ReportRows.Add(reportFormula); } }