diff --git a/mayan/apps/metadata/views.py b/mayan/apps/metadata/views.py index 4ad1c591be..7ac0722775 100644 --- a/mayan/apps/metadata/views.py +++ b/mayan/apps/metadata/views.py @@ -4,11 +4,12 @@ from django.conf import settings from django.contrib import messages from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse -from django.http import HttpResponseRedirect -from django.shortcuts import get_object_or_404, render_to_response +from django.http import HttpResponseRedirect, Http404 +from django.shortcuts import (get_list_or_404, get_object_or_404, + render_to_response) from django.template import RequestContext from django.utils.http import urlencode -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _, ungettext from acls.models import AccessEntry from documents.models import Document, DocumentType @@ -36,15 +37,9 @@ from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD, def metadata_edit(request, document_id=None, document_id_list=None): if document_id: - documents = [get_object_or_404(Document, pk=document_id)] - if documents[0].metadata.count() == 0: - messages.warning(request, _(u'The selected document doesn\'t have any metadata.')) - return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home'))) - elif document_id_list: - documents = [get_object_or_404(Document.objects.select_related('document_type'), pk=document_id) for document_id in document_id_list.split(',')] - if len(set([document.document_type.pk for document in documents])) > 1: - messages.error(request, _(u'Only select documents of the same type.')) - return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home'))) + document_id_list = unicode(document_id) + + documents = Document.objects.select_related('metadata').filter(pk__in=document_id_list.split(',')) try: Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_DOCUMENT_EDIT]) @@ -52,7 +47,23 @@ def metadata_edit(request, document_id=None, document_id_list=None): documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_EDIT, request.user, documents) if not documents: - messages.error(request, _(u'Must provide at least one document.')) + if document_id: + raise Http404 + else: + messages.error(request, _(u'Must provide at least one document.')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home'))) + + if len(set([document.document_type.pk for document in documents])) > 1: + messages.error(request, _(u'Only select documents of the same type.')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home'))) + + if set(documents.values_list('metadata__value' ,flat=True)) == set([None]): + message = ungettext( + u'The selected document doesn\'t have any metadata.', + u'The selected documents doesn\'t have any metadata.', + len(documents) + ) + messages.warning(request, message) return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home'))) post_action_redirect = reverse('documents:document_list_recent') @@ -111,6 +122,7 @@ def metadata_edit(request, document_id=None, document_id_list=None): 'form': formset, 'next': next, } + if len(documents) == 1: context['object'] = documents[0] context['title'] = _(u'Edit metadata for document: %s') % ', '.join([unicode(d) for d in documents])