diff --git a/mayan/apps/checkouts/urls.py b/mayan/apps/checkouts/urls.py index 0ac93964b7..e7084f140e 100644 --- a/mayan/apps/checkouts/urls.py +++ b/mayan/apps/checkouts/urls.py @@ -3,12 +3,13 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url from .api_views import APICheckedoutDocumentListView, APICheckedoutDocumentView +from .views import CheckoutListView urlpatterns = patterns('checkouts.views', - url(r'^list/$', 'checkout_list', (), 'checkout_list'), - url(r'^(?P\d+)/check/out/$', 'checkout_document', (), 'checkout_document'), - url(r'^(?P\d+)/check/in/$', 'checkin_document', (), 'checkin_document'), - url(r'^(?P\d+)/check/info/$', 'checkout_info', (), 'checkout_info'), + url(r'^list/$', CheckoutListView.as_view(), name='checkout_list'), + url(r'^(?P\d+)/check/out/$', 'checkout_document', name='checkout_document'), + url(r'^(?P\d+)/check/in/$', 'checkin_document', name='checkin_document'), + url(r'^(?P\d+)/check/info/$', 'checkout_info', name='checkout_info'), ) api_urls = patterns('', diff --git a/mayan/apps/checkouts/views.py b/mayan/apps/checkouts/views.py index 37427394c9..4c51eee754 100644 --- a/mayan/apps/checkouts/views.py +++ b/mayan/apps/checkouts/views.py @@ -10,7 +10,7 @@ from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ from documents.models import Document -from documents.views import document_list +from documents.views import DocumentListView from acls.models import AccessEntry from common.utils import encapsulate, get_object_name @@ -26,19 +26,18 @@ from .permissions import ( ) -def checkout_list(request): - return document_list( - request, - object_list=DocumentCheckout.objects.checked_out_documents(), - title=_('Documents checked out'), - extra_context={ - 'extra_columns': [ - {'name': _('Checkout user'), 'attribute': encapsulate(lambda document: get_object_name(document.checkout_info().user_object, display_object_type=False))}, - {'name': _('Checkout time and date'), 'attribute': encapsulate(lambda document: document.checkout_info().checkout_datetime)}, - {'name': _('Checkout expiration'), 'attribute': encapsulate(lambda document: document.checkout_info().expiration_datetime)}, - ], - } - ) +class CheckoutListView(DocumentListView): + queryset = DocumentCheckout.objects.checked_out_documents() + + extra_context = { + 'title': _('Documents checked out'), + 'hide_links': True, + 'extra_columns': [ + {'name': _('Checkout user'), 'attribute': encapsulate(lambda document: get_object_name(document.checkout_info().user_object, display_object_type=False))}, + {'name': _('Checkout time and date'), 'attribute': encapsulate(lambda document: document.checkout_info().checkout_datetime)}, + {'name': _('Checkout expiration'), 'attribute': encapsulate(lambda document: document.checkout_info().expiration_datetime)}, + ], + } def checkout_info(request, document_pk): diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 78c3506554..01fd8dea17 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -10,11 +10,11 @@ from .api_views import ( APIRecentDocumentListView ) from .settings import PRINT_SIZE, DISPLAY_SIZE -from .views import DocumentListView +from .views import DocumentListView, RecentDocumentListView urlpatterns = patterns('documents.views', url(r'^list/$', DocumentListView.as_view(), name='document_list'), - url(r'^list/recent/$', 'document_list_recent', (), 'document_list_recent'), + url(r'^list/recent/$', RecentDocumentListView.as_view(), name='document_list_recent'), url(r'^(?P\d+)/preview/$', 'document_preview', (), 'document_preview'), url(r'^(?P\d+)/content/$', 'document_content', (), 'document_content'), diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index 6465494feb..75fe2e6ed7 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -21,8 +21,10 @@ from common.compressed_files import CompressedFile from common.utils import encapsulate, pretty_size, parse_range, urlquote from common.views import SingleObjectListView from common.widgets import two_state_template -from converter.literals import (DEFAULT_FILE_FORMAT_MIMETYPE, DEFAULT_PAGE_NUMBER, - DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL) +from converter.literals import ( + DEFAULT_FILE_FORMAT_MIMETYPE, DEFAULT_PAGE_NUMBER, DEFAULT_ROTATION, + DEFAULT_ZOOM_LEVEL +) from filetransfers.api import serve_file from permissions.models import Permission @@ -61,13 +63,23 @@ logger = logging.getLogger(__name__) class DocumentListView(SingleObjectListView): - queryset = Document.objects.all() - object_permission = PERMISSION_DOCUMENT_VIEW - extra_context = { - 'title': _('All documents'), 'hide_links': True, + 'title': _('All documents'), } + object_permission = PERMISSION_DOCUMENT_VIEW + queryset = Document.objects.all() + + +class RecentDocumentListView(DocumentListView): + extra_context = { + 'hide_links': True, + 'recent_count': RECENT_COUNT, + 'title': _('Recent documents'), + } + + def get_queryset(self): + return RecentDocument.objects.get_for_user(self.request.user) def document_list(request, object_list=None, title=None, extra_context=None): @@ -708,17 +720,6 @@ def document_page_navigation_last(request, document_page_id): return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=[document_page.pk]), request.GET.urlencode())) -def document_list_recent(request): - return document_list( - request, - object_list=RecentDocument.objects.get_for_user(request.user), - title=_('Recent documents'), - extra_context={ - 'recent_count': RECENT_COUNT - } - ) - - def transform_page(request, document_page_id, zoom_function=None, rotation_function=None): document_page = get_object_or_404(DocumentPage, pk=document_page_id) diff --git a/mayan/apps/metadata/urls.py b/mayan/apps/metadata/urls.py index afa2a3bef7..5303ec49c7 100644 --- a/mayan/apps/metadata/urls.py +++ b/mayan/apps/metadata/urls.py @@ -9,6 +9,7 @@ from .api_views import ( APIDocumentTypeMetadataTypeRequiredView, APIMetadataTypeListView, APIMetadataTypeView ) +from .views import MissingRequiredMetadataDocumentListView urlpatterns = patterns('metadata.views', url(r'^(?P\d+)/edit/$', 'metadata_edit', (), 'metadata_edit'), @@ -27,7 +28,7 @@ urlpatterns = patterns('metadata.views', url(r'^setup/document/type/(?P\d+)/metadata/edit/$', 'setup_document_type_metadata', (), 'setup_document_type_metadata'), url(r'^setup/document/type/(?P\d+)/metadata/edit/required/$', 'setup_document_type_metadata_required', (), 'setup_document_type_metadata_required'), - url(r'^tools/missing_required_metadata/$', 'documents_missing_required_metadata', (), 'documents_missing_required_metadata'), + url(r'^tools/missing_required_metadata/$', MissingRequiredMetadataDocumentListView.as_view(), name='documents_missing_required_metadata'), ) api_urls = patterns('', diff --git a/mayan/apps/metadata/views.py b/mayan/apps/metadata/views.py index dec9b2fb28..cd9fa15453 100644 --- a/mayan/apps/metadata/views.py +++ b/mayan/apps/metadata/views.py @@ -15,7 +15,7 @@ from documents.models import Document, DocumentType from documents.permissions import ( PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_VIEW ) -from documents.views import document_list +from documents.views import DocumentListView from permissions.models import Permission from common.utils import encapsulate, generate_choices_w_labels @@ -34,6 +34,14 @@ from .permissions import ( ) +class MissingRequiredMetadataDocumentListView(DocumentListView): + extra_context = { + 'hide_links': True, + 'title': _('Documents missing required metadata'), + } + queryset = Document.objects.filter(document_type__metadata__required=True, metadata__value__isnull=True) + + def metadata_edit(request, document_id=None, document_id_list=None): if document_id: document_id_list = unicode(document_id) @@ -338,32 +346,6 @@ def metadata_view(request, document_id): }, context_instance=RequestContext(request)) -def documents_missing_required_metadata(request): - pre_object_list = Document.objects.filter(document_type__metadata__required=True, metadata__value__isnull=True) - - try: - Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) - except PermissionDenied: - # If user doesn't have global permission, get a list of document - # for which he/she does hace access use it to filter the - # provided object_list - object_list = AccessEntry.objects.filter_objects_by_access( - PERMISSION_DOCUMENT_VIEW, request.user, pre_object_list) - else: - object_list = pre_object_list - - context = { - 'object_list': object_list, - 'title': _('Documents missing required metadata'), - 'hide_links': True, - } - - return document_list( - request, - extra_context=context - ) - - # Setup views def setup_metadata_type_list(request): Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_VIEW])