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 <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-01-30 03:08:15 -04:00
parent f65f363361
commit 5bab080553
8 changed files with 46 additions and 38 deletions

View File

@@ -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,)

View File

@@ -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'
)

View File

@@ -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'

View File

@@ -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:

View File

@@ -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)

View File

@@ -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):

View File

@@ -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()
)

View File

@@ -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):