Finish spliting duplicated document views
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
@@ -49,14 +49,13 @@ from .handlers import (
|
|||||||
from .links.document_links import (
|
from .links.document_links import (
|
||||||
link_document_clear_transformations, link_document_clone_transformations,
|
link_document_clear_transformations, link_document_clone_transformations,
|
||||||
link_document_document_type_edit, link_document_download,
|
link_document_document_type_edit, link_document_download,
|
||||||
link_document_duplicates_list, link_document_edit, link_document_list,
|
link_document_edit, link_document_list, link_document_list_recent_access,
|
||||||
link_document_list_recent_access, link_document_list_recent_added,
|
link_document_list_recent_added,
|
||||||
link_document_multiple_clear_transformations,
|
link_document_multiple_clear_transformations,
|
||||||
link_document_multiple_document_type_edit,
|
link_document_multiple_document_type_edit,
|
||||||
link_document_multiple_download, link_document_preview,
|
link_document_multiple_download, link_document_preview,
|
||||||
link_document_print, link_document_properties,
|
link_document_print, link_document_properties,
|
||||||
link_document_quick_download, link_duplicated_document_list,
|
link_document_quick_download
|
||||||
link_duplicated_document_scan
|
|
||||||
)
|
)
|
||||||
from .links.document_version_links import (
|
from .links.document_version_links import (
|
||||||
link_document_version_download, link_document_version_list,
|
link_document_version_download, link_document_version_list,
|
||||||
@@ -81,6 +80,10 @@ from .links.document_version_page_links import (
|
|||||||
link_document_page_zoom_in, link_document_page_zoom_out,
|
link_document_page_zoom_in, link_document_page_zoom_out,
|
||||||
link_document_pages, link_document_update_page_count
|
link_document_pages, link_document_update_page_count
|
||||||
)
|
)
|
||||||
|
from .links.duplicated_document_links import (
|
||||||
|
link_document_duplicates_list, link_duplicated_document_list,
|
||||||
|
link_duplicated_document_scan
|
||||||
|
)
|
||||||
from .links.favorite_links import (
|
from .links.favorite_links import (
|
||||||
link_document_favorites_add, link_document_favorites_remove,
|
link_document_favorites_add, link_document_favorites_remove,
|
||||||
link_document_list_favorites, link_document_multiple_favorites_add,
|
link_document_list_favorites, link_document_multiple_favorites_add,
|
||||||
|
|||||||
@@ -44,11 +44,6 @@ link_document_download = Link(
|
|||||||
permissions=(permission_document_download,), text=_('Advanced download'),
|
permissions=(permission_document_download,), text=_('Advanced download'),
|
||||||
view='documents:document_download_form',
|
view='documents:document_download_form',
|
||||||
)
|
)
|
||||||
link_document_duplicates_list = Link(
|
|
||||||
args='resolved_object.id', icon_class=icon_duplicated_document_list,
|
|
||||||
permissions=(permission_document_view,), text=_('Duplicates'),
|
|
||||||
view='documents:document_duplicates_list',
|
|
||||||
)
|
|
||||||
link_document_edit = Link(
|
link_document_edit = Link(
|
||||||
args='resolved_object.id',
|
args='resolved_object.id',
|
||||||
icon_class_path='mayan.apps.documents.icons.icon_document_edit',
|
icon_class_path='mayan.apps.documents.icons.icon_document_edit',
|
||||||
@@ -108,13 +103,3 @@ link_document_quick_download = Link(
|
|||||||
permissions=(permission_document_download,), text=_('Quick download'),
|
permissions=(permission_document_download,), text=_('Quick download'),
|
||||||
view='documents:document_download',
|
view='documents:document_download',
|
||||||
)
|
)
|
||||||
link_duplicated_document_list = Link(
|
|
||||||
icon_class=icon_duplicated_document_list, text=_('Duplicated documents'),
|
|
||||||
view='documents:duplicated_document_list'
|
|
||||||
)
|
|
||||||
link_duplicated_document_scan = Link(
|
|
||||||
icon_class=icon_duplicated_document_scan,
|
|
||||||
permissions=(permission_document_tools,),
|
|
||||||
text=_('Duplicated document scan'),
|
|
||||||
view='documents:duplicated_document_scan'
|
|
||||||
)
|
|
||||||
|
|||||||
34
mayan/apps/documents/links/duplicated_document_links.py
Normal file
34
mayan/apps/documents/links/duplicated_document_links.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
from mayan.apps.converter.permissions import (
|
||||||
|
permission_transformation_delete, permission_transformation_edit
|
||||||
|
)
|
||||||
|
from mayan.apps.navigation.classes import Link
|
||||||
|
|
||||||
|
from ..icons import (
|
||||||
|
icon_document_list_recent_access, icon_recent_added_document_list,
|
||||||
|
icon_duplicated_document_list, icon_duplicated_document_scan
|
||||||
|
)
|
||||||
|
from ..permissions import (
|
||||||
|
permission_document_download, permission_document_properties_edit,
|
||||||
|
permission_document_print, permission_document_tools,
|
||||||
|
permission_document_view
|
||||||
|
)
|
||||||
|
|
||||||
|
link_document_duplicates_list = Link(
|
||||||
|
args='resolved_object.id', icon_class=icon_duplicated_document_list,
|
||||||
|
permissions=(permission_document_view,), text=_('Duplicates'),
|
||||||
|
view='documents:document_duplicates_list',
|
||||||
|
)
|
||||||
|
link_duplicated_document_list = Link(
|
||||||
|
icon_class=icon_duplicated_document_list, text=_('Duplicated documents'),
|
||||||
|
view='documents:duplicated_document_list'
|
||||||
|
)
|
||||||
|
link_duplicated_document_scan = Link(
|
||||||
|
icon_class=icon_duplicated_document_scan,
|
||||||
|
permissions=(permission_document_tools,),
|
||||||
|
text=_('Duplicated document scan'),
|
||||||
|
view='documents:duplicated_document_scan'
|
||||||
|
)
|
||||||
@@ -9,7 +9,7 @@ class DuplicatedDocumentsViewsTestMixin(object):
|
|||||||
def _request_document_duplicates_list_view(self):
|
def _request_document_duplicates_list_view(self):
|
||||||
return self.get(
|
return self.get(
|
||||||
viewname='documents:document_duplicates_list',
|
viewname='documents:document_duplicates_list',
|
||||||
kwargs={'pk': self.test_documents[0].pk}
|
kwargs={'document_id': self.test_documents[0].pk}
|
||||||
)
|
)
|
||||||
|
|
||||||
def _request_duplicated_document_list_view(self):
|
def _request_duplicated_document_list_view(self):
|
||||||
@@ -26,7 +26,7 @@ class DuplicatedDocumentsViewsTestCase(
|
|||||||
self._upload_duplicate_document()
|
self._upload_duplicate_document()
|
||||||
|
|
||||||
response = self._request_document_duplicates_list_view()
|
response = self._request_document_duplicates_list_view()
|
||||||
self.assertEqual(response.status_code, 403)
|
self.assertEqual(response.status_code, 404)
|
||||||
|
|
||||||
def test_document_duplicates_list_with_access(self):
|
def test_document_duplicates_list_with_access(self):
|
||||||
self._upload_duplicate_document()
|
self._upload_duplicate_document()
|
||||||
|
|||||||
@@ -39,12 +39,12 @@ from .views.document_views import (
|
|||||||
DocumentView, RecentAccessDocumentListView, RecentAddedDocumentListView
|
DocumentView, RecentAccessDocumentListView, RecentAddedDocumentListView
|
||||||
)
|
)
|
||||||
from .views.duplicated_document_views import (
|
from .views.duplicated_document_views import (
|
||||||
DocumentDuplicatesListView, DuplicatedDocumentListView
|
DocumentDuplicatesListView, DuplicatedDocumentListView,
|
||||||
|
ScanDuplicatedDocuments
|
||||||
)
|
)
|
||||||
from .views.favorite_document_views import (
|
from .views.favorite_document_views import (
|
||||||
FavoriteAddView, FavoriteDocumentListView, FavoriteRemoveView
|
FavoriteAddView, FavoriteDocumentListView, FavoriteRemoveView
|
||||||
)
|
)
|
||||||
from .views.misc_views import ScanDuplicatedDocuments
|
|
||||||
from .views.trashed_document_views import (
|
from .views.trashed_document_views import (
|
||||||
DocumentTrashView, EmptyTrashCanView, TrashedDocumentDeleteView,
|
DocumentTrashView, EmptyTrashCanView, TrashedDocumentDeleteView,
|
||||||
TrashedDocumentListView, TrashedDocumentRestoreView
|
TrashedDocumentListView, TrashedDocumentRestoreView
|
||||||
@@ -99,31 +99,6 @@ urlpatterns_document_types = [
|
|||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns_favorite_documents = [
|
|
||||||
url(
|
|
||||||
regex=r'^documents/favorites/$', view=FavoriteDocumentListView.as_view(),
|
|
||||||
name='document_list_favorites'
|
|
||||||
),
|
|
||||||
url(
|
|
||||||
regex=r'^documents/(?P<pk>\d+)/add_to_favorites/$',
|
|
||||||
view=FavoriteAddView.as_view(), name='document_add_to_favorites'
|
|
||||||
),
|
|
||||||
url(
|
|
||||||
regex=r'^documents/multiple/add_to_favorites/$', view=FavoriteAddView.as_view(),
|
|
||||||
name='document_multiple_add_to_favorites'
|
|
||||||
),
|
|
||||||
url(
|
|
||||||
regex=r'^documents/(?P<pk>\d+)/remove_from_favorites/$',
|
|
||||||
view=FavoriteRemoveView.as_view(),
|
|
||||||
name='document_remove_from_favorites'
|
|
||||||
),
|
|
||||||
url(
|
|
||||||
regex=r'^documents/multiple/remove_from_favorites/$',
|
|
||||||
view=FavoriteRemoveView.as_view(),
|
|
||||||
name='document_multiple_remove_from_favorites'
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
||||||
urlpatterns_documents = [
|
urlpatterns_documents = [
|
||||||
url(
|
url(
|
||||||
regex=r'^documents/$', view=DocumentListView.as_view(), name='document_list'
|
regex=r'^documents/$', view=DocumentListView.as_view(), name='document_list'
|
||||||
@@ -138,11 +113,6 @@ urlpatterns_documents = [
|
|||||||
view=RecentAddedDocumentListView.as_view(),
|
view=RecentAddedDocumentListView.as_view(),
|
||||||
name='document_list_recent_added'
|
name='document_list_recent_added'
|
||||||
),
|
),
|
||||||
url(
|
|
||||||
regex=r'^documents/duplicated/$',
|
|
||||||
view=DuplicatedDocumentListView.as_view(),
|
|
||||||
name='duplicated_document_list'
|
|
||||||
),
|
|
||||||
url(
|
url(
|
||||||
regex=r'^documents/(?P<pk>\d+)/preview/$', view=DocumentPreviewView.as_view(),
|
regex=r'^documents/(?P<pk>\d+)/preview/$', view=DocumentPreviewView.as_view(),
|
||||||
name='document_preview'
|
name='document_preview'
|
||||||
@@ -151,11 +121,6 @@ urlpatterns_documents = [
|
|||||||
regex=r'^documents/(?P<pk>\d+)/properties/$', view=DocumentView.as_view(),
|
regex=r'^documents/(?P<pk>\d+)/properties/$', view=DocumentView.as_view(),
|
||||||
name='document_properties'
|
name='document_properties'
|
||||||
),
|
),
|
||||||
url(
|
|
||||||
regex=r'^documents/(?P<pk>\d+)/duplicates/$',
|
|
||||||
view=DocumentDuplicatesListView.as_view(),
|
|
||||||
name='document_duplicates_list'
|
|
||||||
),
|
|
||||||
url(
|
url(
|
||||||
regex=r'^documents/(?P<pk>\d+)/type/$',
|
regex=r'^documents/(?P<pk>\d+)/type/$',
|
||||||
view=DocumentDocumentTypeEditView.as_view(),
|
view=DocumentDocumentTypeEditView.as_view(),
|
||||||
@@ -314,7 +279,17 @@ urlpatterns_document_versions = [
|
|||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns_tools = [
|
urlpatterns_duplicated_documents = [
|
||||||
|
url(
|
||||||
|
regex=r'^documents/duplicated/$',
|
||||||
|
view=DuplicatedDocumentListView.as_view(),
|
||||||
|
name='duplicated_document_list'
|
||||||
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^documents/(?P<document_id>\d+)/duplicates/$',
|
||||||
|
view=DocumentDuplicatesListView.as_view(),
|
||||||
|
name='document_duplicates_list'
|
||||||
|
),
|
||||||
url(
|
url(
|
||||||
regex=r'^tools/documents/duplicated/scan/$',
|
regex=r'^tools/documents/duplicated/scan/$',
|
||||||
view=ScanDuplicatedDocuments.as_view(),
|
view=ScanDuplicatedDocuments.as_view(),
|
||||||
@@ -322,6 +297,31 @@ urlpatterns_tools = [
|
|||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
urlpatterns_favorite_documents = [
|
||||||
|
url(
|
||||||
|
regex=r'^documents/favorites/$', view=FavoriteDocumentListView.as_view(),
|
||||||
|
name='document_list_favorites'
|
||||||
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^documents/(?P<pk>\d+)/add_to_favorites/$',
|
||||||
|
view=FavoriteAddView.as_view(), name='document_add_to_favorites'
|
||||||
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^documents/multiple/add_to_favorites/$', view=FavoriteAddView.as_view(),
|
||||||
|
name='document_multiple_add_to_favorites'
|
||||||
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^documents/(?P<pk>\d+)/remove_from_favorites/$',
|
||||||
|
view=FavoriteRemoveView.as_view(),
|
||||||
|
name='document_remove_from_favorites'
|
||||||
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^documents/multiple/remove_from_favorites/$',
|
||||||
|
view=FavoriteRemoveView.as_view(),
|
||||||
|
name='document_multiple_remove_from_favorites'
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
urlpatterns_trashed_documents = [
|
urlpatterns_trashed_documents = [
|
||||||
url(
|
url(
|
||||||
regex=r'^documents/(?P<pk>\d+)/trash/$', view=DocumentTrashView.as_view(),
|
regex=r'^documents/(?P<pk>\d+)/trash/$', view=DocumentTrashView.as_view(),
|
||||||
@@ -363,8 +363,8 @@ urlpatterns.extend(urlpatterns_documents)
|
|||||||
urlpatterns.extend(urlpatterns_document_pages)
|
urlpatterns.extend(urlpatterns_document_pages)
|
||||||
urlpatterns.extend(urlpatterns_document_types)
|
urlpatterns.extend(urlpatterns_document_types)
|
||||||
urlpatterns.extend(urlpatterns_document_versions)
|
urlpatterns.extend(urlpatterns_document_versions)
|
||||||
|
urlpatterns.extend(urlpatterns_duplicated_documents)
|
||||||
urlpatterns.extend(urlpatterns_favorite_documents)
|
urlpatterns.extend(urlpatterns_favorite_documents)
|
||||||
urlpatterns.extend(urlpatterns_tools)
|
|
||||||
urlpatterns.extend(urlpatterns_trashed_documents)
|
urlpatterns.extend(urlpatterns_trashed_documents)
|
||||||
|
|
||||||
api_urls = [
|
api_urls = [
|
||||||
|
|||||||
@@ -4,5 +4,4 @@ from .document_version_views import * # NOQA
|
|||||||
from .document_views import * # NOQA
|
from .document_views import * # NOQA
|
||||||
from .duplicated_document_views import * # NOQA
|
from .duplicated_document_views import * # NOQA
|
||||||
from .favorite_document_views import * # NOQA
|
from .favorite_document_views import * # NOQA
|
||||||
from .misc_views import * # NOQA
|
|
||||||
from .trashed_document_views import * # NOQA
|
from .trashed_document_views import * # NOQA
|
||||||
|
|||||||
@@ -2,45 +2,30 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.db import transaction
|
|
||||||
from django.http import HttpResponseRedirect
|
|
||||||
from django.shortcuts import get_object_or_404
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.utils.translation import ugettext_lazy as _, ungettext
|
|
||||||
|
|
||||||
from mayan.apps.acls.models import AccessControlList
|
from mayan.apps.common.generics import ConfirmView
|
||||||
from mayan.apps.common.generics import (
|
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||||
FormView, MultipleObjectConfirmActionView, MultipleObjectFormActionView,
|
|
||||||
SingleObjectDetailView, SingleObjectListView
|
|
||||||
)
|
|
||||||
|
|
||||||
from ..events import event_document_view
|
from ..icons import icon_duplicated_document_list
|
||||||
from ..icons import icon_document_list, icon_duplicated_document_list
|
|
||||||
from ..models import Document, DuplicatedDocument
|
from ..models import Document, DuplicatedDocument
|
||||||
from ..permissions import permission_document_view
|
from ..permissions import permission_document_tools, permission_document_view
|
||||||
|
from ..tasks import task_scan_duplicates_all
|
||||||
|
|
||||||
from .document_views import DocumentListView
|
from .document_views import DocumentListView
|
||||||
|
|
||||||
__all__ = ('DocumentDuplicatesListView', 'DuplicatedDocumentListView')
|
__all__ = (
|
||||||
|
'DocumentDuplicatesListView', 'DuplicatedDocumentListView',
|
||||||
|
'ScanDuplicatedDocuments'
|
||||||
|
)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class DocumentDuplicatesListView(DocumentListView):
|
class DocumentDuplicatesListView(ExternalObjectMixin, DocumentListView):
|
||||||
def dispatch(self, request, *args, **kwargs):
|
external_object_class = Document
|
||||||
AccessControlList.objects.check_access(
|
external_object_permission = permission_document_view
|
||||||
obj=self.get_document(), permissions=(permission_document_view,),
|
external_object_pk_url_kwarg = 'document_id'
|
||||||
user=self.request.user
|
|
||||||
)
|
|
||||||
|
|
||||||
return super(
|
|
||||||
DocumentDuplicatesListView, self
|
|
||||||
).dispatch(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def get_document(self):
|
|
||||||
return get_object_or_404(klass=Document, pk=self.kwargs['pk'])
|
|
||||||
|
|
||||||
def get_extra_context(self):
|
def get_extra_context(self):
|
||||||
context = super(DocumentDuplicatesListView, self).get_extra_context()
|
context = super(DocumentDuplicatesListView, self).get_extra_context()
|
||||||
@@ -54,8 +39,10 @@ class DocumentDuplicatesListView(DocumentListView):
|
|||||||
'no_results_title': _(
|
'no_results_title': _(
|
||||||
'There are no duplicates for this document'
|
'There are no duplicates for this document'
|
||||||
),
|
),
|
||||||
'object': self.get_document(),
|
'object': self.external_object,
|
||||||
'title': _('Duplicates for document: %s') % self.get_document(),
|
'title': _(
|
||||||
|
'Duplicates for document: %s'
|
||||||
|
) % self.external_object,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return context
|
return context
|
||||||
@@ -63,7 +50,7 @@ class DocumentDuplicatesListView(DocumentListView):
|
|||||||
def get_source_queryset(self):
|
def get_source_queryset(self):
|
||||||
try:
|
try:
|
||||||
return DuplicatedDocument.objects.get(
|
return DuplicatedDocument.objects.get(
|
||||||
document=self.get_document()
|
document=self.external_object
|
||||||
).documents.all()
|
).documents.all()
|
||||||
except DuplicatedDocument.DoesNotExist:
|
except DuplicatedDocument.DoesNotExist:
|
||||||
return Document.objects.none()
|
return Document.objects.none()
|
||||||
@@ -92,3 +79,17 @@ class DuplicatedDocumentListView(DocumentListView):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class ScanDuplicatedDocuments(ConfirmView):
|
||||||
|
extra_context = {
|
||||||
|
'title': _('Scan for duplicated documents?')
|
||||||
|
}
|
||||||
|
view_permission = permission_document_tools
|
||||||
|
|
||||||
|
def view_action(self):
|
||||||
|
task_scan_duplicates_all.apply_async()
|
||||||
|
messages.success(
|
||||||
|
message=_('Duplicated document scan queued successfully.'),
|
||||||
|
request=self.request
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.contrib import messages
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from mayan.apps.common.generics import ConfirmView
|
|
||||||
|
|
||||||
from ..permissions import permission_document_tools
|
|
||||||
from ..tasks import task_scan_duplicates_all
|
|
||||||
|
|
||||||
__all__ = ('ScanDuplicatedDocuments',)
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class ScanDuplicatedDocuments(ConfirmView):
|
|
||||||
extra_context = {
|
|
||||||
'title': _('Scan for duplicated documents?')
|
|
||||||
}
|
|
||||||
view_permission = permission_document_tools
|
|
||||||
|
|
||||||
def view_action(self):
|
|
||||||
task_scan_duplicates_all.apply_async()
|
|
||||||
messages.success(
|
|
||||||
message=_('Duplicated document scan queued successfully.'),
|
|
||||||
request=self.request
|
|
||||||
)
|
|
||||||
Reference in New Issue
Block a user