def _get_data(self): if self.keys is not None and not self.group_by: raise SqlReportException('Keys supplied without group_by.') qc = self.query_context() for c in self.columns: qc.append_column(c.view) session = connection_manager.get_scoped_session(self.engine_id) try: for qm in qc.query_meta.values(): date_aggregation_column = None if len(qm.columns) == 1: c = self._find_column(qm.columns[0].column_name) if hasattr(c, 'date_aggregation_column'): date_aggregation_column = c.date_aggregation_column columns_names = itertools.chain.from_iterable([(col.column_name, col.alias) for col in qm.columns]) for group_by in self.group_by: if group_by not in columns_names: column = self._find_column_view(group_by) if column: if date_aggregation_column: column.key = date_aggregation_column column.sql_column.column_name = date_aggregation_column qm.append_column(column) return qc.resolve(session.connection(), self.filter_values) except: session.rollback() raise
def get_total_row(self): def _clean_total_row(val, col): if isinstance(val, numbers.Number): return val elif col.calculate_total: return 0 return '' def _get_relevant_column_ids(col, column_id_to_expanded_column_ids): return column_id_to_expanded_column_ids.get( col.column_id, [col.column_id]) expanded_columns = get_expanded_columns(self.top_level_columns, self.config) qc = self.query_context() for c in self.columns: qc.append_column(c.view) session = connection_manager.get_scoped_session(self.engine_id) totals = qc.totals(session.connection(), [ column_id for col in self.top_level_columns for column_id in _get_relevant_column_ids(col, expanded_columns) if col.calculate_total ], self.filter_values) total_row = [ _clean_total_row(totals.get(column_id), col) for col in self.top_level_columns for column_id in _get_relevant_column_ids(col, expanded_columns) ] if total_row and total_row[0] is '': total_row[0] = ugettext('Total') return total_row
def _get_data(self): if self.keys is not None and not self.group_by: raise SqlReportException('Keys supplied without group_by.') qc = self.query_context() for c in self.columns: qc.append_column(c.view) session = connection_manager.get_scoped_session(self.engine_id) try: for qm in qc.query_meta.values(): date_aggregation_column = None if len(qm.columns) == 1: c = self._find_column(qm.columns[0].column_name) if hasattr(c, 'date_aggregation_column'): date_aggregation_column = c.date_aggregation_column columns_names = itertools.chain.from_iterable([ (col.column_name, col.alias) for col in qm.columns ]) for group_by in self.group_by: if group_by not in columns_names: column = self._find_column_view(group_by) if column: if date_aggregation_column: column.key = date_aggregation_column column.sql_column.column_name = date_aggregation_column qm.append_column(column) return qc.resolve(session.connection(), self.filter_values) except: session.rollback() raise
def get_total_records(self): qc = self.query_context() for c in self.columns: # TODO - don't append columns that are not part of filters or group bys qc.append_column(c.view) session = connection_manager.get_scoped_session(self.engine_id) return qc.count(session.connection(), self.filter_values)
def _get_data(self): if self.keys is not None and not self.group_by: raise SqlReportException('Keys supplied without group_by.') qc = self.query_context for c in self.columns: qc.append_column(c.view) session = connection_manager.get_scoped_session(self.engine_id) try: return qc.resolve(session.connection(), self.filter_values) except: session.rollback() raise
def _get_data(self, start=None, limit=None): if self.keys is not None and not self.group_by: raise SqlReportException('Keys supplied without group_by.') qc = self.query_context(start=start, limit=limit) for c in self.columns: qc.append_column(c.view) session = connection_manager.get_scoped_session(self.engine_id) try: return qc.resolve(session.connection(), self.filter_values) except: session.rollback() raise
def get_total_row(self): def _clean_total_row(val, col): if isinstance(val, numbers.Number): return val elif col.calculate_total: return 0 return '' def _get_relevant_column_ids(col, column_id_to_expanded_column_ids): return column_id_to_expanded_column_ids.get(col.column_id, [col.column_id]) expanded_columns = get_expanded_columns(self.column_configs, self.config) qc = self.query_context() for c in self.columns: qc.append_column(c.view) session = connection_manager.get_scoped_session(self.engine_id) totals = qc.totals( session.connection(), [ column_id for col in self.column_configs for column_id in _get_relevant_column_ids(col, expanded_columns) if col.calculate_total ], self.filter_values ) total_row = [ _clean_total_row(totals.get(column_id), col) for col in self.column_configs for column_id in _get_relevant_column_ids( col, expanded_columns ) ] if total_row and total_row[0] is '': total_row[0] = ugettext('Total') return total_row