Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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
Пример #7
0
    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
Пример #8
0
    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