def get(self, request, *args, **kwargs):
        start = time.time()
        add_query_syntax = as_bool(request.GET, 'add_query_syntax', False)

        document_type_schema = dict()
        for document_type in DocumentType.objects.all():
            columns = get_columns(document_type,
                                  include_suggested=False,
                                  include_generic=document_type.is_generic()
                                  )  # type: List[ColumnDesc]

            system_fields = FIELD_CODES_SHOW_BY_DEFAULT_GENERIC \
                if document_type.is_generic() else FIELD_CODES_SHOW_BY_DEFAULT_NON_GENERIC
            search_fields = set(document_type.search_fields.all().values_list(
                'code', flat=True))

            default_columns = {
                c.name
                for c in columns if c.field_code in system_fields
                or c.field_code in search_fields
            }

            document_type_schema[
                document_type.code] = _document_type_schema_to_dto(
                    document_type, columns, default_columns, add_query_syntax)

        common_filters_by_document_type = dict()

        for document_type_code, filter_id, title in SavedFilter.objects \
                .filter(user__isnull=True, project_id__isnull=True, filter_type=FT_COMMON_FILTER) \
                .values_list('document_type__code', 'id', 'title'):
            common_filters_by_document_type[document_type_code] = {
                'id': filter_id,
                'title': title
            }

        common_filters_by_project = dict()

        for project_id, filter_id, title in SavedFilter.objects \
                .filter(user__isnull=True, project_id__isnull=False, filter_type=FT_COMMON_FILTER) \
                .values_list('project_id', 'id', 'title'):
            common_filters_by_project[project_id] = {
                'id': filter_id,
                'title': title
            }

        user_doc_grid_configs_by_project = dict()

        for project_id, columns, column_filters, order_by in SavedFilter.objects \
                .filter(user=request.user, project_id__isnull=False, filter_type=FT_USER_DOC_GRID_CONFIG) \
                .values_list('project_id', 'columns', 'column_filters', 'order_by'):
            user_doc_grid_configs_by_project[project_id] = {
                'columns': columns,
                'column_filters': column_filters,
                'order_by': order_by
            }

        return Response({
            'document_type_schema': document_type_schema,
            'common_filters_by_document_type': common_filters_by_document_type,
            'common_filters_by_project': common_filters_by_project,
            'user_doc_grid_configs_by_project':
            user_doc_grid_configs_by_project,
            'time': time.time() - start
        })
Exemple #2
0
    def get(self, request, *args, **kwargs):
        start = time.time()
        add_query_syntax = as_bool(request.GET, 'add_query_syntax', False)

        document_type_schema = dict()
        for document_type in DocumentType.objects.all():
            columns = get_columns(document_type,
                                  include_generic=document_type.is_generic(),
                                  is_select=True)  # type: List[ColumnDesc]
            columns = [
                c for c in columns
                if c.field_code not in FIELD_CODES_HIDE_FROM_CONFIG_API
            ]

            system_fields = FIELD_CODES_SHOW_BY_DEFAULT_GENERIC \
                if document_type.is_generic() else FIELD_CODES_SHOW_BY_DEFAULT_NON_GENERIC
            search_fields = set(document_type.search_fields.all().values_list(
                'code', flat=True))

            default_columns = {
                c.name
                for c in columns
                if c.field_code not in FIELD_CODES_HIDE_FROM_CONFIG_API
                and c.field_code not in FIELD_CODES_HIDE_BY_DEFAULT and
                (c.field_code in system_fields or c.field_code in search_fields
                 )
            }

            document_type_schema[
                document_type.code] = _document_type_schema_to_dto(
                    document_type, columns, default_columns, add_query_syntax)

        common_filters_by_document_type = defaultdict(list)  # type: Dict[List]

        for document_type_code, filter_id, title, display_order in SavedFilter.objects \
                .filter(project_id__isnull=True, filter_type=FT_COMMON_FILTER) \
                .filter(Q(user__isnull=True) | Q(user=request.user)) \
                .values_list('document_type__code', 'id', 'title', 'display_order'):
            common_filters_by_document_type[document_type_code].append({
                'id':
                filter_id,
                'title':
                title,
                'display_order':
                display_order
            })

        common_filters_by_project = defaultdict(list)  # type: Dict[List]

        for project_id, filter_id, title, display_order in SavedFilter.objects \
                .filter(project_id__isnull=False, filter_type=FT_COMMON_FILTER) \
                .filter(Q(user__isnull=True) | Q(user=request.user)) \
                .values_list('project_id', 'id', 'title', 'display_order'):
            common_filters_by_project[project_id].append({
                'id':
                filter_id,
                'title':
                title,
                'display_order':
                display_order
            })

        user_doc_grid_configs_by_project = defaultdict(
            list)  # type: Dict[List]

        for project_id, columns, column_filters, order_by in SavedFilter.objects \
                .filter(user=request.user, project_id__isnull=False, filter_type=FT_USER_DOC_GRID_CONFIG) \
                .filter(document_type_id=F('project__type_id')) \
                .order_by('pk') \
                .values_list('project_id', 'columns', 'column_filters', 'order_by'):
            user_doc_grid_configs_by_project[project_id] = {
                'columns': columns,
                'column_filters': column_filters,
                'order_by': order_by
            }

        return Response({
            'document_type_schema': document_type_schema,
            'common_filters_by_document_type': common_filters_by_document_type,
            'common_filters_by_project': common_filters_by_project,
            'user_doc_grid_configs_by_project':
            user_doc_grid_configs_by_project,
            'time': time.time() - start,
            'scheme_migrations': {
                'migrations': MIGRATION_TAGS,
                'current_version': CURRENT_VERSION
            }
        })