QuarterPeriod createQuarterPeriod(YearPeriod Year, string Name, DateTime StratDate, DateTime EndDate, IObjectSpace objectSpace) { var quarter = objectSpace.CreateObject <QuarterPeriod>(); quarter.YearPeriod = Year; quarter.PeriodName = Name; quarter.StartDate = StratDate; quarter.EndDate = EndDate; return(quarter); }
public override IEnumerable <IFigure> Convert(DataTable table, Stock stock) { var series = new List <IFigure>(); foreach (DataRow row in table.Rows) { if (row[Descriptor.ValueFormat.Name] == DBNull.Value) { continue; } IPeriod period; if (Descriptor.TimeFormat != null) { if (Descriptor.TimeFormat.Type == typeof(int)) { var year = ( int )row[Descriptor.TimeFormat.Name]; period = new YearPeriod(year); } else { var date = (DateTime)row[Descriptor.TimeFormat.Name]; period = new DayPeriod(date); } } else { // TODO: is this a proper default? period = new DayPeriod(DateTime.Now); } var entity = CreateEntity(stock, period, row[Descriptor.ValueFormat.Name]); series.Add(entity); } return(series); }
public void Report(ReportContext context) { var table = new Table(); table.CellSpacing = 5; table.Columns.Add(new TableColumn { Width = new GridLength(200), Background = Brushes.AliceBlue }); Count.Times(i => table.Columns.Add(new TableColumn { Width = GridLength.Auto })); var rowGroup = new TableRowGroup(); table.RowGroups.Add(rowGroup); var row = new TableRow { Background = Brushes.AliceBlue }; row.Cells.Add(new TableCell()); for (int year = EndYear - Count + 1; year <= EndYear; ++year) { row.Cell("{0,8}", year).TextAlignment = TextAlignment.Right; } rowGroup.Rows.Add(row); foreach (var dataRow in Rows) { row = new TableRow(); var series = ( IFigureSeries )context.ProvideValue(dataRow.Value) ?? FigureSeries.Empty; var cell = row.Cell(GetHeader(dataRow, series)); cell.TextAlignment = TextAlignment.Left; for (int year = EndYear - Count + 1; year <= EndYear; ++year) { var period = new YearPeriod(year); var value = series.SingleOrDefault(v => v.Period.Equals(period)); if (value == null) { row.Cell("n.a.").TextAlignment = TextAlignment.Right; } else if (dataRow.Round) { row.Cell("{0:#,0}", value.Value).TextAlignment = TextAlignment.Right; } else if (dataRow.InMillions) { row.Cell("{0:#,0.00}", value.Value / 1000 / 1000).TextAlignment = TextAlignment.Right; } else { row.Cell("{0:#,0.00}", value.Value).TextAlignment = TextAlignment.Right; } } rowGroup.Rows.Add(row); } context.Document.Blocks.Add(table); }