diff --git a/HISTORY.rst b/HISTORY.rst index de721333f1..21e0a5ee66 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -98,6 +98,7 @@ - Update API status code on insufficient access for the apps: indexes, parsing, documents, metadata, ocr, permission, user management. +- Split document app links. 3.2.9 (2019-XX-XX) ================== diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index df81395c11..ae83da89e2 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -46,39 +46,50 @@ from .handlers import ( handler_create_default_document_type, handler_create_document_cache, handler_remove_empty_duplicates_lists, handler_scan_duplicates_for ) -from .links import ( - link_document_clear_transformations, - link_document_clone_transformations, link_document_delete, +from .links.document_links import ( + link_document_clear_transformations, link_document_clone_transformations, link_document_document_type_edit, link_document_download, - link_document_duplicates_list, link_document_edit, - link_document_favorites_add, link_document_favorites_remove, - link_document_list, link_document_list_deleted, - link_document_list_favorites, link_document_list_recent_access, - link_document_list_recent_added, + link_document_duplicates_list, link_document_edit, link_document_list, + link_document_list_recent_access, link_document_list_recent_added, link_document_multiple_clear_transformations, - link_document_multiple_delete, link_document_multiple_document_type_edit, - link_document_multiple_download, link_document_multiple_favorites_add, - link_document_multiple_favorites_remove, link_document_multiple_restore, - link_document_multiple_trash, link_document_multiple_update_page_count, - link_document_page_disable, link_document_page_multiple_disable, - link_document_page_enable, link_document_page_multiple_enable, - link_document_page_navigation_first, link_document_page_navigation_last, - link_document_page_navigation_next, link_document_page_navigation_previous, - link_document_page_return, link_document_page_rotate_left, - link_document_page_rotate_right, link_document_page_view, - link_document_page_view_reset, link_document_page_zoom_in, - link_document_page_zoom_out, link_document_pages, link_document_preview, - link_document_print, link_document_properties, link_document_quick_download, - link_document_restore, link_document_trash, link_document_type_create, - link_document_type_delete, link_document_type_edit, - link_document_type_filename_create, link_document_type_filename_delete, - link_document_type_filename_edit, link_document_type_filename_list, - link_document_type_list, link_document_type_policies, - link_document_type_setup, link_document_update_page_count, + link_document_multiple_document_type_edit, + link_document_multiple_download, link_document_preview, + link_document_print, link_document_properties, + link_document_quick_download, link_duplicated_document_list, + link_duplicated_document_scan +) +from .links.document_version_links import ( link_document_version_download, link_document_version_list, link_document_version_return_document, link_document_version_return_list, - link_document_version_revert, link_document_version_view, - link_duplicated_document_list, link_duplicated_document_scan, + link_document_version_revert, link_document_version_view +) +from .links.document_type_links import ( + link_document_type_create, link_document_type_delete, + link_document_type_edit, link_document_type_filename_create, + link_document_type_filename_delete, link_document_type_filename_edit, + link_document_type_filename_list, link_document_type_list, + link_document_type_policies, link_document_type_setup +) +from .links.document_version_page_links import ( + link_document_multiple_update_page_count, link_document_page_disable, + link_document_page_enable, link_document_page_multiple_enable, + link_document_page_multiple_disable, link_document_page_navigation_first, + link_document_page_navigation_last, link_document_page_navigation_next, + link_document_page_navigation_previous, link_document_page_return, + link_document_page_rotate_left, link_document_page_rotate_right, + link_document_page_view, link_document_page_view_reset, + link_document_page_zoom_in, link_document_page_zoom_out, + link_document_pages, link_document_update_page_count +) +from .links.favorite_links import ( + link_document_favorites_add, link_document_favorites_remove, + link_document_list_favorites, link_document_multiple_favorites_add, + link_document_multiple_favorites_remove +) +from .links.trashed_document_links import ( + link_document_delete, link_document_list_deleted, + link_document_multiple_delete, link_document_multiple_restore, + link_document_multiple_trash, link_document_restore, link_document_trash, link_trash_can_empty ) from .menus import menu_documents diff --git a/mayan/apps/documents/links.py b/mayan/apps/documents/links.py deleted file mode 100644 index 271aa16579..0000000000 --- a/mayan/apps/documents/links.py +++ /dev/null @@ -1,452 +0,0 @@ -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_document_page_navigation_first, - icon_document_page_navigation_last, icon_document_page_navigation_next, - icon_document_page_navigation_previous, icon_document_page_return, - icon_document_page_rotate_left, icon_document_page_rotate_right, - icon_document_page_zoom_in, icon_document_page_zoom_out, - icon_document_type_create, icon_document_type_delete, - icon_document_type_edit, icon_document_type_setup, - icon_duplicated_document_list, icon_duplicated_document_scan -) -from .permissions import ( - permission_document_delete, permission_document_edit, - permission_document_download, permission_document_properties_edit, - permission_document_print, permission_document_restore, - permission_document_tools, permission_document_version_revert, - permission_document_view, permission_document_trash, - permission_document_type_create, permission_document_type_delete, - permission_document_type_edit, permission_document_type_view, - permission_empty_trash, permission_document_version_view -) -from .settings import setting_zoom_max_level, setting_zoom_min_level - - -def is_not_current_version(context): - # Use the 'object' key when the document version is an object in a list, - # such as when showing the version list view and use the 'resolved_object' - # when the document version is the context object, such as when showing the - # signatures list of a documern version. This can be fixed by updating - # the navigations app object resolution logic to use 'resolved_object' even - # for objects in a list. - document_version = context.get('object', context['resolved_object']) - return document_version.document.latest_version.timestamp != document_version.timestamp - - -def is_first_page(context): - return context['resolved_object'].siblings.first() == context['resolved_object'] - - -def is_last_page(context): - return context['resolved_object'].siblings.last() == context['resolved_object'] - - -def is_max_zoom(context): - return context['zoom'] >= setting_zoom_max_level.value - - -def is_min_zoom(context): - return context['zoom'] <= setting_zoom_min_level.value - - -def is_document_page_enabled(context): - return context['resolved_object'].enabled - - -def is_document_page_disabled(context): - return not context['resolved_object'].enabled - - -# Facet -link_document_preview = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_preview', - permissions=(permission_document_view,), - text=_('Preview'), view='documents:document_preview', -) -link_document_properties = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_properties', - permissions=(permission_document_view,), - text=_('Properties'), view='documents:document_properties', -) -link_document_version_list = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_list', - permissions=(permission_document_version_view,), - text=_('Versions'), view='documents:document_version_list', -) -link_document_pages = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_pages', - permissions=(permission_document_view,), text=_('Pages'), - view='documents:document_pages', -) - -# Actions -link_document_clear_transformations = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clear', - permissions=(permission_transformation_delete,), - text=_('Clear transformations'), - view='documents:document_clear_transformations', -) -link_document_clone_transformations = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clone', - permissions=(permission_transformation_edit,), - text=_('Clone transformations'), - view='documents:document_clone_transformations', -) -link_document_delete = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_delete', - permissions=(permission_document_delete,), - tags='dangerous', text=_('Delete'), view='documents:document_delete', - -) - -link_document_list_favorites = Link( - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_list', - text=_('Favorites'), - view='documents:document_list_favorites' -) -link_document_favorites_add = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_add', - permissions=(permission_document_view,), text=_('Add to favorites'), - view='documents:document_add_to_favorites', -) -link_document_favorites_remove = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_remove', - permissions=(permission_document_view,), text=_('Remove from favorites'), - view='documents:document_remove_from_favorites', -) -link_document_trash = Link( - args='resolved_object.id', permissions=(permission_document_trash,), - icon_class_path='mayan.apps.documents.icons.icon_document_trash_send', - tags='dangerous', text=_('Move to trash'), - view='documents:document_trash', -) -link_document_edit = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_edit', - permissions=(permission_document_properties_edit,), - text=_('Edit properties'), view='documents:document_edit', -) -link_document_document_type_edit = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_change', - permissions=(permission_document_properties_edit,), text=_('Change type'), - view='documents:document_document_type_edit', -) -link_document_download = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_download', - permissions=(permission_document_download,), text=_('Advanced download'), - view='documents:document_download_form', -) -link_document_print = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_print', - permissions=(permission_document_print,), - text=_('Print'), view='documents:document_print', -) -link_document_quick_download = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_quick_download', - permissions=(permission_document_download,), text=_('Quick download'), - view='documents:document_download', -) -link_document_update_page_count = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_page_count_update', - permissions=(permission_document_tools,), - text=_('Recalculate page count'), - view='documents:document_update_page_count' -) -link_document_restore = Link( - permissions=(permission_document_restore,), - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_restore', - text=_('Restore'), - view='documents:document_restore', args='object.pk' -) -link_document_multiple_clear_transformations = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clear', - permissions=(permission_transformation_delete,), - text=_('Clear transformations'), - view='documents:document_multiple_clear_transformations' -) -link_document_multiple_trash = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_trash_send', - tags='dangerous', text=_('Move to trash'), - view='documents:document_multiple_trash' -) -link_document_multiple_delete = Link( - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_delete', - tags='dangerous', text=_('Delete'), - view='documents:document_multiple_delete' -) -link_document_multiple_favorites_add = Link( - text=_('Add to favorites'), - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_add', - view='documents:document_multiple_add_to_favorites', -) -link_document_multiple_favorites_remove = Link( - text=_('Remove from favorites'), - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_remove', - view='documents:document_multiple_remove_from_favorites', -) -link_document_multiple_document_type_edit = Link( - text=_('Change type'), - icon_class_path='mayan.apps.documents.icons.icon_document_type_change', - view='documents:document_multiple_document_type_edit' -) -link_document_multiple_download = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_download', - text=_('Advanced download'), - view='documents:document_multiple_download_form' -) -link_document_multiple_update_page_count = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_page_count_update', - text=_('Recalculate page count'), - view='documents:document_multiple_update_page_count' -) -link_document_multiple_restore = Link( - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_restore', - text=_('Restore'), view='documents:document_multiple_restore' -) - -# Versions -link_document_version_download = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_download', - permissions=(permission_document_download,), text=_('Download version'), - view='documents:document_version_download_form' -) -link_document_version_return_document = Link( - args='resolved_object.document.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_return_document', - permissions=(permission_document_view,), text=_('Document'), - view='documents:document_preview', -) -link_document_version_return_list = Link( - args='resolved_object.document.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_return_list', - permissions=(permission_document_version_view,), text=_('Versions'), - view='documents:document_version_list', -) -link_document_version_view = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_view', - permissions=(permission_document_version_view,), - text=_('Details'), view='documents:document_version_view' -) - -# Views -link_document_list = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_list', - text=_('All documents'), - view='documents:document_list' -) -link_document_list_recent_access = Link( - icon_class=icon_document_list_recent_access, text=_('Recently accessed'), - view='documents:document_list_recent_access' -) -link_document_list_recent_added = Link( - icon_class=icon_recent_added_document_list, text=_('Recently added'), - view='documents:document_list_recent_added' -) -link_document_list_deleted = Link( - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_list', - text=_('Trash can'), view='documents:document_list_deleted' -) - -link_trash_can_empty = Link( - permissions=(permission_empty_trash,), text=_('Empty trash'), - view='documents:trash_can_empty' -) - -# Document pages - -link_document_page_disable = Link( - condition=is_document_page_enabled, - icon_class_path='mayan.apps.documents.icons.icon_document_page_disable', - kwargs={'pk': 'resolved_object.id'}, - permissions=(permission_document_edit,), text=_('Disable page'), - view='documents:document_page_disable' -) -link_document_page_multiple_disable = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_page_disable', - text=_('Disable pages'), - view='documents:document_page_multiple_disable' -) -link_document_page_enable = Link( - condition=is_document_page_disabled, - icon_class_path='mayan.apps.documents.icons.icon_document_page_enable', - kwargs={'pk': 'resolved_object.id'}, - permissions=(permission_document_edit,), text=_('Enable page'), - view='documents:document_page_enable' -) -link_document_page_multiple_enable = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_page_enable', - text=_('Enable pages'), - view='documents:document_page_multiple_enable' -) -link_document_page_navigation_first = Link( - args='resolved_object.pk', conditional_disable=is_first_page, - icon_class=icon_document_page_navigation_first, - keep_query=True, permissions=(permission_document_view,), - text=_('First page'), view='documents:document_page_navigation_first', -) -link_document_page_navigation_last = Link( - args='resolved_object.pk', conditional_disable=is_last_page, - icon_class=icon_document_page_navigation_last, - keep_query=True, text=_('Last page'), - permissions=(permission_document_view,), - view='documents:document_page_navigation_last', -) -link_document_page_navigation_previous = Link( - args='resolved_object.pk', conditional_disable=is_first_page, - icon_class=icon_document_page_navigation_previous, - keep_query=True, permissions=(permission_document_view,), - text=_('Previous page'), - view='documents:document_page_navigation_previous', -) -link_document_page_navigation_next = Link( - args='resolved_object.pk', conditional_disable=is_last_page, - icon_class=icon_document_page_navigation_next, - keep_query=True, text=_('Next page'), - permissions=(permission_document_view,), - view='documents:document_page_navigation_next', -) -link_document_page_return = Link( - args='resolved_object.document.pk', icon_class=icon_document_page_return, - permissions=(permission_document_view,), text=_('Document'), - view='documents:document_preview', -) -link_document_page_rotate_left = Link( - args='resolved_object.pk', icon_class=icon_document_page_rotate_left, - keep_query=True, permissions=(permission_document_view,), - text=_('Rotate left'), view='documents:document_page_rotate_left', -) -link_document_page_rotate_right = Link( - args='resolved_object.pk', icon_class=icon_document_page_rotate_right, - keep_query=True, permissions=(permission_document_view,), - text=_('Rotate right'), view='documents:document_page_rotate_right', -) -link_document_page_view = Link( - conditional_disable=is_document_page_disabled, - icon_class_path='mayan.apps.documents.icons.icon_document_page_view', - permissions=(permission_document_view,), text=_('Page image'), - view='documents:document_page_view', args='resolved_object.pk' -) -link_document_page_view_reset = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_page_view_reset', - permissions=(permission_document_view,), text=_('Reset view'), - view='documents:document_page_view_reset', args='resolved_object.pk' -) -link_document_page_zoom_in = Link( - args='resolved_object.pk', conditional_disable=is_max_zoom, - icon_class=icon_document_page_zoom_in, keep_query=True, - permissions=(permission_document_view,), text=_('Zoom in'), - view='documents:document_page_zoom_in', -) -link_document_page_zoom_out = Link( - args='resolved_object.pk', conditional_disable=is_min_zoom, - icon_class=icon_document_page_zoom_out, keep_query=True, - permissions=(permission_document_view,), text=_('Zoom out'), - view='documents:document_page_zoom_out', -) - -# Document versions -link_document_version_revert = Link( - args='object.pk', condition=is_not_current_version, - icon_class_path='mayan.apps.documents.icons.icon_document_version_revert', - permissions=(permission_document_version_revert,), tags='dangerous', - text=_('Revert'), view='documents:document_version_revert', -) - -# Document type related links -link_document_type_create = Link( - icon_class=icon_document_type_create, - permissions=(permission_document_type_create,), - text=_('Create document type'), view='documents:document_type_create' -) -link_document_type_delete = Link( - args='resolved_object.id', icon_class=icon_document_type_delete, - permissions=(permission_document_type_delete,), tags='dangerous', - text=_('Delete'), view='documents:document_type_delete', -) -link_document_type_policies = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_policies', - permissions=(permission_document_type_edit,), - text=_('Deletion policies'), view='documents:document_type_policies', -) -link_document_type_edit = Link( - args='resolved_object.id', icon_class=icon_document_type_edit, - permissions=(permission_document_type_edit,), text=_('Edit'), - view='documents:document_type_edit', -) -link_document_type_filename_create = Link( - args='document_type.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_create', - permissions=(permission_document_type_edit,), - text=_('Add quick label to document type'), - view='documents:document_type_filename_create', -) -link_document_type_filename_delete = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_delete', - permissions=(permission_document_type_edit,), - tags='dangerous', text=_('Delete'), - view='documents:document_type_filename_delete', -) -link_document_type_filename_edit = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_edit', - permissions=(permission_document_type_edit,), - text=_('Edit'), view='documents:document_type_filename_edit', -) -link_document_type_filename_list = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_list', - permissions=(permission_document_type_view,), - text=_('Quick labels'), view='documents:document_type_filename_list', -) -link_document_type_list = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_type_list', - permissions=(permission_document_type_view,), text=_('Document types'), - view='documents:document_type_list' -) -link_document_type_setup = Link( - icon_class=icon_document_type_setup, - permissions=(permission_document_type_view,), text=_('Document types'), - view='documents:document_type_list' -) -link_duplicated_document_list = Link( - icon_class=icon_duplicated_document_list, text=_('Duplicated documents'), - view='documents:duplicated_document_list' -) -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_scan = Link( - icon_class=icon_duplicated_document_scan, - permissions=(permission_document_tools,), - text=_('Duplicated document scan'), - view='documents:duplicated_document_scan' -) diff --git a/mayan/apps/documents/links/__init__.py b/mayan/apps/documents/links/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/documents/links/document_links.py b/mayan/apps/documents/links/document_links.py new file mode 100644 index 0000000000..e0045566e9 --- /dev/null +++ b/mayan/apps/documents/links/document_links.py @@ -0,0 +1,120 @@ +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_clear_transformations = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clear', + permissions=(permission_transformation_delete,), + text=_('Clear transformations'), + view='documents:document_clear_transformations', +) +link_document_clone_transformations = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clone', + permissions=(permission_transformation_edit,), + text=_('Clone transformations'), + view='documents:document_clone_transformations', +) +link_document_document_type_edit = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_change', + permissions=(permission_document_properties_edit,), text=_('Change type'), + view='documents:document_document_type_edit', +) +link_document_download = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_download', + permissions=(permission_document_download,), text=_('Advanced download'), + 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( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_edit', + permissions=(permission_document_properties_edit,), + text=_('Edit properties'), view='documents:document_edit', +) +link_document_list = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_list', + text=_('All documents'), + view='documents:document_list' +) +link_document_list_recent_access = Link( + icon_class=icon_document_list_recent_access, text=_('Recently accessed'), + view='documents:document_list_recent_access' +) +link_document_list_recent_added = Link( + icon_class=icon_recent_added_document_list, text=_('Recently added'), + view='documents:document_list_recent_added' +) +link_document_multiple_clear_transformations = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clear', + permissions=(permission_transformation_delete,), + text=_('Clear transformations'), + view='documents:document_multiple_clear_transformations' +) +link_document_multiple_document_type_edit = Link( + text=_('Change type'), + icon_class_path='mayan.apps.documents.icons.icon_document_type_change', + view='documents:document_multiple_document_type_edit' +) +link_document_multiple_download = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_download', + text=_('Advanced download'), + view='documents:document_multiple_download_form' +) +link_document_preview = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_preview', + permissions=(permission_document_view,), + text=_('Preview'), view='documents:document_preview', +) +link_document_properties = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_properties', + permissions=(permission_document_view,), + text=_('Properties'), view='documents:document_properties', +) +link_document_print = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_print', + permissions=(permission_document_print,), + text=_('Print'), view='documents:document_print', +) +link_document_quick_download = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_quick_download', + permissions=(permission_document_download,), text=_('Quick 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' +) diff --git a/mayan/apps/documents/links/document_type_links.py b/mayan/apps/documents/links/document_type_links.py new file mode 100644 index 0000000000..f99886df89 --- /dev/null +++ b/mayan/apps/documents/links/document_type_links.py @@ -0,0 +1,73 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..icons import ( + icon_document_type_create, icon_document_type_delete, + icon_document_type_edit, icon_document_type_setup, +) +from ..permissions import ( + permission_document_type_create, permission_document_type_delete, + permission_document_type_edit, permission_document_type_view, +) + + +link_document_type_create = Link( + icon_class=icon_document_type_create, + permissions=(permission_document_type_create,), + text=_('Create document type'), view='documents:document_type_create' +) +link_document_type_delete = Link( + args='resolved_object.id', icon_class=icon_document_type_delete, + permissions=(permission_document_type_delete,), tags='dangerous', + text=_('Delete'), view='documents:document_type_delete', +) +link_document_type_policies = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_policies', + permissions=(permission_document_type_edit,), + text=_('Deletion policies'), view='documents:document_type_policies', +) +link_document_type_edit = Link( + args='resolved_object.id', icon_class=icon_document_type_edit, + permissions=(permission_document_type_edit,), text=_('Edit'), + view='documents:document_type_edit', +) +link_document_type_filename_create = Link( + args='document_type.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_create', + permissions=(permission_document_type_edit,), + text=_('Add quick label to document type'), + view='documents:document_type_filename_create', +) +link_document_type_filename_delete = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_delete', + permissions=(permission_document_type_edit,), + tags='dangerous', text=_('Delete'), + view='documents:document_type_filename_delete', +) +link_document_type_filename_edit = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_edit', + permissions=(permission_document_type_edit,), + text=_('Edit'), view='documents:document_type_filename_edit', +) +link_document_type_filename_list = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_list', + permissions=(permission_document_type_view,), + text=_('Quick labels'), view='documents:document_type_filename_list', +) +link_document_type_list = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_type_list', + permissions=(permission_document_type_view,), text=_('Document types'), + view='documents:document_type_list' +) +link_document_type_setup = Link( + icon_class=icon_document_type_setup, + permissions=(permission_document_type_view,), text=_('Document types'), + view='documents:document_type_list' +) diff --git a/mayan/apps/documents/links/document_version_links.py b/mayan/apps/documents/links/document_version_links.py new file mode 100644 index 0000000000..12c0db813d --- /dev/null +++ b/mayan/apps/documents/links/document_version_links.py @@ -0,0 +1,59 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..permissions import ( + permission_document_download, permission_document_version_revert, + permission_document_version_view, permission_document_view, +) + + +def is_not_current_version(context): + # Use the 'object' key when the document version is an object in a list, + # such as when showing the version list view and use the 'resolved_object' + # when the document version is the context object, such as when showing the + # signatures list of a documern version. This can be fixed by updating + # the navigations app object resolution logic to use 'resolved_object' even + # for objects in a list. + document_version = context.get('object', context['resolved_object']) + return document_version.document.latest_version.timestamp != document_version.timestamp + + +link_document_version_list = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_list', + permissions=(permission_document_version_view,), + text=_('Versions'), view='documents:document_version_list', +) +link_document_version_download = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_download', + permissions=(permission_document_download,), text=_('Download version'), + view='documents:document_version_download_form' +) +link_document_version_return_document = Link( + args='resolved_object.document.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_return_document', + permissions=(permission_document_view,), text=_('Document'), + view='documents:document_preview', +) +link_document_version_return_list = Link( + args='resolved_object.document.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_return_list', + permissions=(permission_document_version_view,), text=_('Versions'), + view='documents:document_version_list', +) +link_document_version_view = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_view', + permissions=(permission_document_version_view,), + text=_('Details'), view='documents:document_version_view' +) +link_document_version_revert = Link( + args='object.pk', condition=is_not_current_version, + icon_class_path='mayan.apps.documents.icons.icon_document_version_revert', + permissions=(permission_document_version_revert,), tags='dangerous', + text=_('Revert'), view='documents:document_version_revert', +) diff --git a/mayan/apps/documents/links/document_version_page_links.py b/mayan/apps/documents/links/document_version_page_links.py new file mode 100644 index 0000000000..6d301544d2 --- /dev/null +++ b/mayan/apps/documents/links/document_version_page_links.py @@ -0,0 +1,151 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..icons import ( + icon_document_page_navigation_first, + icon_document_page_navigation_last, icon_document_page_navigation_next, + icon_document_page_navigation_previous, icon_document_page_return, + icon_document_page_rotate_left, icon_document_page_rotate_right, + icon_document_page_zoom_in, icon_document_page_zoom_out, +) +from ..permissions import ( + permission_document_edit, permission_document_tools, + permission_document_view +) +from ..settings import setting_zoom_max_level, setting_zoom_min_level + + +def is_first_page(context): + return context['resolved_object'].siblings.first() == context['resolved_object'] + + +def is_last_page(context): + return context['resolved_object'].siblings.last() == context['resolved_object'] + + +def is_max_zoom(context): + return context['zoom'] >= setting_zoom_max_level.value + + +def is_min_zoom(context): + return context['zoom'] <= setting_zoom_min_level.value + + +def is_document_page_enabled(context): + return context['resolved_object'].enabled + + +def is_document_page_disabled(context): + return not context['resolved_object'].enabled + + +link_document_page_disable = Link( + condition=is_document_page_enabled, + icon_class_path='mayan.apps.documents.icons.icon_document_page_disable', + kwargs={'pk': 'resolved_object.id'}, + permissions=(permission_document_edit,), text=_('Disable page'), + view='documents:document_page_disable' +) +link_document_page_multiple_disable = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_page_disable', + text=_('Disable pages'), + view='documents:document_page_multiple_disable' +) +link_document_page_enable = Link( + condition=is_document_page_disabled, + icon_class_path='mayan.apps.documents.icons.icon_document_page_enable', + kwargs={'pk': 'resolved_object.id'}, + permissions=(permission_document_edit,), text=_('Enable page'), + view='documents:document_page_enable' +) +link_document_page_multiple_enable = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_page_enable', + text=_('Enable pages'), + view='documents:document_page_multiple_enable' +) +link_document_page_navigation_first = Link( + args='resolved_object.pk', conditional_disable=is_first_page, + icon_class=icon_document_page_navigation_first, + keep_query=True, permissions=(permission_document_view,), + text=_('First page'), view='documents:document_page_navigation_first', +) +link_document_page_navigation_last = Link( + args='resolved_object.pk', conditional_disable=is_last_page, + icon_class=icon_document_page_navigation_last, + keep_query=True, text=_('Last page'), + permissions=(permission_document_view,), + view='documents:document_page_navigation_last', +) +link_document_page_navigation_previous = Link( + args='resolved_object.pk', conditional_disable=is_first_page, + icon_class=icon_document_page_navigation_previous, + keep_query=True, permissions=(permission_document_view,), + text=_('Previous page'), + view='documents:document_page_navigation_previous', +) +link_document_page_navigation_next = Link( + args='resolved_object.pk', conditional_disable=is_last_page, + icon_class=icon_document_page_navigation_next, + keep_query=True, text=_('Next page'), + permissions=(permission_document_view,), + view='documents:document_page_navigation_next', +) +link_document_page_return = Link( + args='resolved_object.document.pk', icon_class=icon_document_page_return, + permissions=(permission_document_view,), text=_('Document'), + view='documents:document_preview', +) +link_document_page_rotate_left = Link( + args='resolved_object.pk', icon_class=icon_document_page_rotate_left, + keep_query=True, permissions=(permission_document_view,), + text=_('Rotate left'), view='documents:document_page_rotate_left', +) +link_document_page_rotate_right = Link( + args='resolved_object.pk', icon_class=icon_document_page_rotate_right, + keep_query=True, permissions=(permission_document_view,), + text=_('Rotate right'), view='documents:document_page_rotate_right', +) +link_document_page_view = Link( + conditional_disable=is_document_page_disabled, + icon_class_path='mayan.apps.documents.icons.icon_document_page_view', + permissions=(permission_document_view,), text=_('Page image'), + view='documents:document_page_view', args='resolved_object.pk' +) +link_document_page_view_reset = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_page_view_reset', + permissions=(permission_document_view,), text=_('Reset view'), + view='documents:document_page_view_reset', args='resolved_object.pk' +) +link_document_page_zoom_in = Link( + args='resolved_object.pk', conditional_disable=is_max_zoom, + icon_class=icon_document_page_zoom_in, keep_query=True, + permissions=(permission_document_view,), text=_('Zoom in'), + view='documents:document_page_zoom_in', +) +link_document_page_zoom_out = Link( + args='resolved_object.pk', conditional_disable=is_min_zoom, + icon_class=icon_document_page_zoom_out, keep_query=True, + permissions=(permission_document_view,), text=_('Zoom out'), + view='documents:document_page_zoom_out', +) +link_document_pages = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_pages', + permissions=(permission_document_view,), text=_('Pages'), + view='documents:document_pages', +) +link_document_multiple_update_page_count = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_page_count_update', + text=_('Recalculate page count'), + view='documents:document_multiple_update_page_count' +) +link_document_update_page_count = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_page_count_update', + permissions=(permission_document_tools,), + text=_('Recalculate page count'), + view='documents:document_update_page_count' +) diff --git a/mayan/apps/documents/links/favorite_links.py b/mayan/apps/documents/links/favorite_links.py new file mode 100644 index 0000000000..3690e4b76e --- /dev/null +++ b/mayan/apps/documents/links/favorite_links.py @@ -0,0 +1,36 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..permissions import permission_document_view + + +link_document_list_favorites = Link( + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_list', + text=_('Favorites'), + view='documents:document_list_favorites' +) +link_document_favorites_add = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_add', + permissions=(permission_document_view,), text=_('Add to favorites'), + view='documents:document_add_to_favorites', +) +link_document_favorites_remove = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_remove', + permissions=(permission_document_view,), text=_('Remove from favorites'), + view='documents:document_remove_from_favorites', +) +link_document_multiple_favorites_add = Link( + text=_('Add to favorites'), + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_add', + view='documents:document_multiple_add_to_favorites', +) +link_document_multiple_favorites_remove = Link( + text=_('Remove from favorites'), + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_remove', + view='documents:document_multiple_remove_from_favorites', +) diff --git a/mayan/apps/documents/links/trashed_document_links.py b/mayan/apps/documents/links/trashed_document_links.py new file mode 100644 index 0000000000..ffc231da17 --- /dev/null +++ b/mayan/apps/documents/links/trashed_document_links.py @@ -0,0 +1,53 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..permissions import ( + permission_document_delete, permission_document_restore, + permission_document_trash, permission_empty_trash +) + + +link_document_delete = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_delete', + permissions=(permission_document_delete,), + tags='dangerous', text=_('Delete'), view='documents:document_delete', + +) +link_document_trash = Link( + args='resolved_object.id', permissions=(permission_document_trash,), + icon_class_path='mayan.apps.documents.icons.icon_document_trash_send', + tags='dangerous', text=_('Move to trash'), + view='documents:document_trash', +) +link_document_list_deleted = Link( + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_list', + text=_('Trash can'), view='documents:document_list_deleted' +) +link_document_restore = Link( + permissions=(permission_document_restore,), + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_restore', + text=_('Restore'), + view='documents:document_restore', args='object.pk' +) +link_document_multiple_trash = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_trash_send', + tags='dangerous', text=_('Move to trash'), + view='documents:document_multiple_trash' +) +link_document_multiple_delete = Link( + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_delete', + tags='dangerous', text=_('Delete'), + view='documents:document_multiple_delete' +) +link_document_multiple_restore = Link( + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_restore', + text=_('Restore'), view='documents:document_multiple_restore' +) +link_trash_can_empty = Link( + permissions=(permission_empty_trash,), text=_('Empty trash'), + view='documents:trash_can_empty' +) diff --git a/mayan/apps/documents/tests/test_links.py b/mayan/apps/documents/tests/test_links.py index 56eb9c07b0..4a3113982b 100644 --- a/mayan/apps/documents/tests/test_links.py +++ b/mayan/apps/documents/tests/test_links.py @@ -4,10 +4,10 @@ import time from django.urls import reverse -from ..links import ( - link_document_restore, link_document_version_download, - link_document_version_revert +from ..links.document_version_links import ( + link_document_version_download, link_document_version_revert ) +from ..links.trashed_document_links import link_document_restore from ..models import DeletedDocument from ..permissions import ( permission_document_download, permission_document_restore, diff --git a/mayan/apps/documents/views/document_page_views.py b/mayan/apps/documents/views/document_page_views.py index f05767d627..94eab65eac 100644 --- a/mayan/apps/documents/views/document_page_views.py +++ b/mayan/apps/documents/views/document_page_views.py @@ -20,7 +20,7 @@ from mayan.apps.converter.literals import DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL from ..forms import DocumentPageForm from ..icons import icon_document_pages -from ..links import link_document_update_page_count +from ..links.document_version_page_links import link_document_update_page_count from ..models import Document, DocumentPage from ..permissions import permission_document_edit, permission_document_view from ..settings import ( diff --git a/mayan/apps/documents/views/document_type_views.py b/mayan/apps/documents/views/document_type_views.py index 6912751507..7997b0442a 100644 --- a/mayan/apps/documents/views/document_type_views.py +++ b/mayan/apps/documents/views/document_type_views.py @@ -17,7 +17,7 @@ from ..forms import DocumentTypeFilenameForm_create from ..icons import ( icon_document_type_filename, icon_document_type_setup ) -from ..links import ( +from ..links.document_type_links import ( link_document_type_create, link_document_type_filename_create ) from ..models import DocumentType, DocumentTypeFilename