diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index f973c9a8eb..775c893a4e 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -221,3 +221,25 @@ class APIDocumentTypeView(generics.RetrieveUpdateDestroyAPIView): 'PATCH': [PERMISSION_DOCUMENT_TYPE_EDIT], 'DELETE': [PERMISSION_DOCUMENT_TYPE_DELETE] } + + +class APIDocumentTypeDocumentListView(generics.ListAPIView): + """ + Returns a list of all the documents of a particular document type. + """ + + filter_backends = (MayanObjectPermissionsFilter,) + mayan_object_permissions = {'GET': [PERMISSION_DOCUMENT_VIEW]} + + def get_serializer_class(self): + from documents.serializers import DocumentSerializer + return DocumentSerializer + + def get_queryset(self): + document_type = get_object_or_404(DocumentType, pk=self.kwargs['pk']) + try: + Permission.objects.check_permissions(self.request.user, [PERMISSION_DOCUMENT_TYPE_VIEW]) + except PermissionDenied: + AccessEntry.objects.check_access(PERMISSION_DOCUMENT_TYPE_VIEW, self.request.user, document_type) + + return document_type.documents.all() diff --git a/mayan/apps/documents/serializers.py b/mayan/apps/documents/serializers.py index dc6d0d74b3..44302240db 100644 --- a/mayan/apps/documents/serializers.py +++ b/mayan/apps/documents/serializers.py @@ -34,7 +34,7 @@ class DocumentSerializer(serializers.HyperlinkedModelSerializer): class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer): - documents = DocumentSerializer(many=True, required=False) + documents = serializers.HyperlinkedIdentityField(view_name='documenttype-document-list') class Meta: model = DocumentType diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index d491d3071b..dbd98d5b75 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -3,9 +3,9 @@ from __future__ import absolute_import from django.conf.urls import patterns, url from .api_views import (APIDocumentView, APIDocumentImageView, APIDocumentListView, - APIDocumentPageView, APIDocumentTypeListView, - APIDocumentTypeView, APIDocumentVersionCreateView, - APIDocumentVersionView) + APIDocumentPageView, APIDocumentTypeDocumentListView, + APIDocumentTypeListView, APIDocumentTypeView, + APIDocumentVersionCreateView, APIDocumentVersionView) from .settings import PRINT_SIZE, DISPLAY_SIZE from .views import DocumentListView @@ -78,6 +78,7 @@ api_urls = patterns('', url(r'^document_page/(?P[0-9]+)/$', APIDocumentPageView.as_view(), name='documentpage-detail'), url(r'^documents/(?P[0-9]+)/image/$', APIDocumentImageView.as_view(), name='document-image'), url(r'^documents/(?P[0-9]+)/new_version/$', APIDocumentVersionCreateView.as_view(), name='document-new-version'), - url(r'^documenttypes/$', APIDocumentTypeListView.as_view(), name='documenttype-list'), + url(r'^documenttypes/(?P[0-9]+)/documents/$', APIDocumentTypeDocumentListView.as_view(), name='documenttype-document-list'), url(r'^documenttypes/(?P[0-9]+)/$', APIDocumentTypeView.as_view(), name='documenttype-detail'), + url(r'^documenttypes/$', APIDocumentTypeListView.as_view(), name='documenttype-list'), )