From 5bab080553d61616085f62e51149923cda225545 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Jan 2019 03:08:15 -0400 Subject: [PATCH] Workflows: Update generic view interface Add icons for the workflow runtime proxy views. Fix failing tests. Convert runtime proxy links to use the new list facet menu. Signed-off-by: Roberto Rosario --- mayan/apps/document_states/apps.py | 4 +-- mayan/apps/document_states/icons.py | 10 +++++++ mayan/apps/document_states/links.py | 28 ++++++++++++------- mayan/apps/document_states/models.py | 6 ++-- .../document_states/tests/test_indexing.py | 4 +-- .../views/workflow_instance_views.py | 4 +-- .../views/workflow_proxy_views.py | 18 +++--------- .../document_states/views/workflow_views.py | 10 +++---- 8 files changed, 46 insertions(+), 38 deletions(-) diff --git a/mayan/apps/document_states/apps.py b/mayan/apps/document_states/apps.py index 697ac051f8..d765882dba 100644 --- a/mayan/apps/document_states/apps.py +++ b/mayan/apps/document_states/apps.py @@ -268,13 +268,13 @@ class DocumentStatesApp(MayanAppConfig): link_workflow_instance_transition ), sources=(WorkflowInstance,) ) - menu_object.bind_links( + menu_list_facet.bind_links( links=( link_workflow_runtime_proxy_document_list, link_workflow_runtime_proxy_state_list, ), sources=(WorkflowRuntimeProxy,) ) - menu_object.bind_links( + menu_list_facet.bind_links( links=( link_workflow_runtime_proxy_state_document_list, ), sources=(WorkflowStateRuntimeProxy,) diff --git a/mayan/apps/document_states/icons.py b/mayan/apps/document_states/icons.py index d9f305eebf..c7de8e87d4 100644 --- a/mayan/apps/document_states/icons.py +++ b/mayan/apps/document_states/icons.py @@ -1,6 +1,7 @@ from __future__ import absolute_import, unicode_literals from mayan.apps.appearance.classes import Icon +from mayan.apps.documents.icons import icon_document_list icon_document_workflow_instance_list = Icon( driver_name='fontawesome', symbol='sitemap' @@ -18,6 +19,15 @@ icon_workflow_edit = Icon(driver_name='fontawesome', symbol='pencil-alt') icon_workflow_list = Icon(driver_name='fontawesome', symbol='sitemap') icon_workflow_preview = Icon(driver_name='fontawesome', symbol='eye') +icon_workflow_runtime_proxy_document_list = icon_document_list +icon_workflow_runtime_proxy_list = Icon( + driver_name='fontawesome', symbol='sitemap' +) +icon_workflow_runtime_proxy_state_document_list = icon_document_list +icon_workflow_runtime_proxy_state_list = Icon( + driver_name='fontawesome', symbol='circle' +) + icon_workflow_state_action_delete = Icon( driver_name='fontawesome', symbol='times' ) diff --git a/mayan/apps/document_states/links.py b/mayan/apps/document_states/links.py index e51ccc6d5f..4646327ba6 100644 --- a/mayan/apps/document_states/links.py +++ b/mayan/apps/document_states/links.py @@ -5,16 +5,20 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.documents.icons import icon_document_type from mayan.apps.navigation import Link + from .icons import ( icon_document_workflow_instance_list, icon_tool_launch_all_workflows, icon_workflow_create, icon_workflow_delete, icon_workflow_edit, - icon_workflow_list, icon_workflow_preview, icon_workflow_state, - icon_workflow_state_action, icon_workflow_state_action_delete, - icon_workflow_state_action_edit, icon_workflow_state_action_list, - icon_workflow_state_action_selection, icon_workflow_state_create, - icon_workflow_state_delete, icon_workflow_state_edit, - icon_workflow_transition, icon_workflow_transition_create, - icon_workflow_transition_delete, icon_workflow_transition_edit + icon_workflow_list, icon_workflow_preview, + icon_workflow_runtime_proxy_document_list, icon_workflow_runtime_proxy_list, + icon_workflow_runtime_proxy_state_document_list, + icon_workflow_runtime_proxy_state_list, icon_workflow_state, + icon_workflow_state_action_delete, icon_workflow_state_action_edit, + icon_workflow_state_action_list, icon_workflow_state_action_selection, + icon_workflow_state_create, icon_workflow_state_delete, + icon_workflow_state_edit, icon_workflow_transition, + icon_workflow_transition_create, icon_workflow_transition_delete, + icon_workflow_transition_edit ) from .permissions import ( permission_workflow_create, permission_workflow_delete, @@ -152,7 +156,7 @@ link_workflow_transition_edit = Link( ) link_workflow_transition_list = Link( icon_class=icon_workflow_transition, - kwargs={'workflow_transition_id': 'resolved_object.pk'}, + kwargs={'workflow_id': 'resolved_object.pk'}, permission=permission_workflow_view, text=_('Transitions'), view='workflows:workflow_transition_list' ) @@ -165,20 +169,24 @@ link_workflow_transition_triggers = Link( # Workflow runtime proxies link_workflow_runtime_proxy_document_list = Link( + icon_class=icon_workflow_runtime_proxy_document_list, kwargs={'workflow_runtime_proxy_id': 'resolved_object.pk'}, permission=permission_workflow_view, text=_('Workflow documents'), view='workflows:workflow_runtime_proxy_document_list' ) link_workflow_runtime_proxy_list = Link( - icon_class=icon_workflow_list, permission=permission_workflow_view, - text=_('Workflows'), view='workflows:workflow_runtime_proxy_list' + icon_class=icon_workflow_runtime_proxy_list, + permission=permission_workflow_view, text=_('Workflows'), + view='workflows:workflow_runtime_proxy_list' ) link_workflow_runtime_proxy_state_document_list = Link( + icon_class=icon_workflow_runtime_proxy_state_document_list, kwargs={'workflow_runtime_proxy_state_id': 'resolved_object.pk'}, permission=permission_workflow_view, text=_('State documents'), view='workflows:workflow_runtime_proxy_state_document_list' ) link_workflow_runtime_proxy_state_list = Link( + icon_class=icon_workflow_runtime_proxy_state_list, kwargs={'workflow_runtime_proxy_id': 'resolved_object.pk'}, permission=permission_workflow_view, text=_('States'), view='workflows:workflow_runtime_proxy_state_list' diff --git a/mayan/apps/document_states/models.py b/mayan/apps/document_states/models.py index 039f2591bf..e4424031ad 100644 --- a/mayan/apps/document_states/models.py +++ b/mayan/apps/document_states/models.py @@ -485,8 +485,8 @@ class WorkflowInstance(models.Model): all transition options. """ AccessControlList.objects.check_access( - permissions=permission_workflow_transition, - user=_user, obj=self.workflow + obj=self.workflow, + permission=permission_workflow_transition, user=_user ) except PermissionDenied: """ @@ -495,7 +495,7 @@ class WorkflowInstance(models.Model): """ queryset = AccessControlList.objects.restrict_queryset( permission=permission_workflow_transition, - user=_user, queryset=queryset + queryset=queryset, user=_user ) return queryset else: diff --git a/mayan/apps/document_states/tests/test_indexing.py b/mayan/apps/document_states/tests/test_indexing.py index 6142795662..ce79edf389 100644 --- a/mayan/apps/document_states/tests/test_indexing.py +++ b/mayan/apps/document_states/tests/test_indexing.py @@ -94,7 +94,7 @@ class DocumentStateIndexingTestCase(BaseTestCase): self.document.workflows.first().do_transition( transition=self.workflow_transition, - user=self.admin_user + user=self._test_case_user ) self.assertEqual( @@ -111,7 +111,7 @@ class DocumentStateIndexingTestCase(BaseTestCase): self.document.workflows.first().do_transition( transition=self.workflow_transition, - user=self.admin_user + user=self._test_case_user ) self.document.delete(to_trash=False) diff --git a/mayan/apps/document_states/views/workflow_instance_views.py b/mayan/apps/document_states/views/workflow_instance_views.py index cc6a1be8cb..c40ba0c344 100644 --- a/mayan/apps/document_states/views/workflow_instance_views.py +++ b/mayan/apps/document_states/views/workflow_instance_views.py @@ -56,7 +56,7 @@ class DocumentWorkflowInstanceListView(SingleObjectListView): ) % self.get_document(), } - def get_object_list(self): + def get_source_queryset(self): return self.get_document().workflows.all() @@ -89,7 +89,7 @@ class WorkflowInstanceDetailView(SingleObjectListView): 'workflow_instance': self.get_workflow_instance(), } - def get_object_list(self): + def get_source_queryset(self): return self.get_workflow_instance().log_entries.order_by('-datetime') def get_workflow_instance(self): diff --git a/mayan/apps/document_states/views/workflow_proxy_views.py b/mayan/apps/document_states/views/workflow_proxy_views.py index 68cc93fcdc..aa0f53c83f 100644 --- a/mayan/apps/document_states/views/workflow_proxy_views.py +++ b/mayan/apps/document_states/views/workflow_proxy_views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.shortcuts import get_object_or_404 from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ @@ -71,14 +70,14 @@ class WorkflowRuntimeProxyListView(SingleObjectListView): 'title': _('Workflows'), } - def get_object_list(self): + def get_source_queryset(self): return WorkflowRuntimeProxy.objects.all() class WorkflowRuntimeProxyStateDocumentListView(ExternalObjectMixin, DocumentListView): - external_object_class = WorkflowRuntimeProxy + external_object_class = WorkflowStateRuntimeProxy external_object_permission = permission_workflow_view - external_object_pk_url_kwarg = 'workflow_runtime_proxy_id' + external_object_pk_url_kwarg = 'workflow_runtime_proxy_state_id' def get_document_queryset(self): return self.get_workflow_state().get_documents() @@ -106,15 +105,6 @@ class WorkflowRuntimeProxyStateDocumentListView(ExternalObjectMixin, DocumentLis return context def get_workflow_state(self): - workflow_state = get_object_or_404( - klass=WorkflowRuntimeProxyStateDocumentListView, - pk=self.kwargs['workflow_instance_state_id'], - workflow_pk=self.get_workflow() - ) - - return workflow_state - - def get_workflow(self): return self.get_external_object() @@ -142,7 +132,7 @@ class WorkflowRuntimeProxyStateListView(ExternalObjectMixin, SingleObjectListVie 'title': _('States of workflow: %s') % self.get_workflow() } - def get_object_list(self): + def get_source_queryset(self): return WorkflowStateRuntimeProxy.objects.filter( workflow=self.get_workflow() ) diff --git a/mayan/apps/document_states/views/workflow_views.py b/mayan/apps/document_states/views/workflow_views.py index b124da1fce..4c22ac4707 100644 --- a/mayan/apps/document_states/views/workflow_views.py +++ b/mayan/apps/document_states/views/workflow_views.py @@ -322,7 +322,7 @@ class WorkflowStateActionListView(SingleObjectListView): def get_form_schema(self): return {'fields': self.get_class().fields} - def get_object_list(self): + def get_source_queryset(self): return self.get_workflow_state().actions.all() def get_workflow_state(self): @@ -380,7 +380,7 @@ class WorkflowStateCreateView(ExternalObjectMixin, SingleObjectCreateView): def get_instance_extra_data(self): return {'workflow': self.get_workflow()} - def get_object_list(self): + def get_source_queryset(self): return self.get_workflow().states.all() def get_success_url(self): @@ -457,7 +457,7 @@ class WorkflowStateListView(ExternalObjectMixin, SingleObjectListView): 'title': _('States of workflow: %s') % self.get_workflow() } - def get_object_list(self): + def get_source_queryset(self): return self.get_workflow().states.all() def get_workflow(self): @@ -488,7 +488,7 @@ class WorkflowTransitionCreateView(ExternalObjectMixin, SingleObjectCreateView): def get_instance_extra_data(self): return {'workflow': self.get_workflow()} - def get_object_list(self): + def get_source_queryset(self): return self.get_workflow().transitions.all() def get_success_url(self): @@ -575,7 +575,7 @@ class WorkflowTransitionListView(ExternalObjectMixin, SingleObjectListView): ) % self.get_workflow() } - def get_object_list(self): + def get_source_queryset(self): return self.get_workflow().transitions.all() def get_workflow(self):