diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index 859754d246..8579399a2a 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -1,5 +1,7 @@ from __future__ import absolute_import +# TODO: Improve API methods docstrings + from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 @@ -16,7 +18,8 @@ from permissions.models import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission -from .models import Document, DocumentPage, DocumentType, DocumentVersion +from .models import (Document, DocumentPage, DocumentType, DocumentVersion, + RecentDocument) from .permissions import (PERMISSION_DOCUMENT_CREATE, PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_NEW_VERSION, @@ -28,7 +31,8 @@ from .permissions import (PERMISSION_DOCUMENT_CREATE, PERMISSION_DOCUMENT_TYPE_VIEW) from .serializers import (DocumentImageSerializer, DocumentPageSerializer, DocumentSerializer, DocumentTypeSerializer, - DocumentVersionSerializer, NewDocumentSerializer) + DocumentVersionSerializer, NewDocumentSerializer, + RecentDocumentSerializer) from .settings import DISPLAY_SIZE, ZOOM_MAX_LEVEL, ZOOM_MIN_LEVEL from .tasks import task_get_document_image, task_new_document @@ -311,3 +315,14 @@ class APIDocumentTypeDocumentListView(generics.ListAPIView): AccessEntry.objects.check_access(PERMISSION_DOCUMENT_TYPE_VIEW, self.request.user, document_type) return document_type.documents.all() + + +class APIRecentDocumentListView(generics.ListAPIView): + serializer_class = RecentDocumentSerializer + + def get_queryset(self): + return RecentDocument.objects.filter(user=self.request.user) + + def get(self, *args, **kwargs): + """Return a list of the recent documents for the current user.""" + return super(APIRecentDocumentListView, self).get(*args, **kwargs) diff --git a/mayan/apps/documents/serializers.py b/mayan/apps/documents/serializers.py index 35db2c7bba..19e7c2467b 100644 --- a/mayan/apps/documents/serializers.py +++ b/mayan/apps/documents/serializers.py @@ -3,7 +3,8 @@ from __future__ import absolute_import from rest_framework import serializers from .literals import LANGUAGE_CHOICES -from .models import Document, DocumentVersion, DocumentPage, DocumentType +from .models import (Document, DocumentVersion, DocumentPage, DocumentType, + RecentDocument) class DocumentPageSerializer(serializers.HyperlinkedModelSerializer): @@ -54,3 +55,9 @@ class NewDocumentSerializer(serializers.Serializer): file = serializers.FileField() label = serializers.CharField(required=False) language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, blank_display_value=None, required=False) + + +class RecentDocumentSerializer(serializers.ModelSerializer): + class Meta: + fields = ('document', 'datetime_accessed') + model = RecentDocument diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 1c43bd5012..3a988bea96 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -5,7 +5,8 @@ from django.conf.urls import patterns, url from .api_views import (APIDocumentView, APIDocumentImageView, APIDocumentListView, APIDocumentPageView, APIDocumentTypeDocumentListView, APIDocumentTypeListView, APIDocumentTypeView, - APIDocumentVersionCreateView, APIDocumentVersionView) + APIDocumentVersionCreateView, APIDocumentVersionView, + APIRecentDocumentListView) from .settings import PRINT_SIZE, DISPLAY_SIZE from .views import DocumentListView @@ -73,6 +74,7 @@ urlpatterns = patterns('documents.views', api_urls = patterns('', url(r'^documents/$', APIDocumentListView.as_view(), name='document-list'), + url(r'^documents/recent/$', APIRecentDocumentListView.as_view(), name='document-recent-list'), url(r'^documents/(?P[0-9]+)/$', APIDocumentView.as_view(), name='document-detail'), url(r'^document_version/(?P[0-9]+)/$', APIDocumentVersionView.as_view(), name='documentversion-detail'), url(r'^document_page/(?P[0-9]+)/$', APIDocumentPageView.as_view(), name='documentpage-detail'),