Rename document states apps view and URLs.

Object layout: WorkflowTemplate, WorkflowInstance, WorkflowRuntimeProxy,
WorkflowTemplateState, WorkflowTemplateTransition.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-07-07 02:05:13 -04:00
parent f36f99c5fb
commit 8811c8269f
18 changed files with 1377 additions and 1279 deletions

View File

@@ -31,7 +31,7 @@ from .storages import storage_workflowimagecache
from .tasks import task_generate_workflow_image
class APIDocumentTypeWorkflowListView(generics.ListAPIView):
class APIDocumentTypeWorkflowRuntimeProxyListView(generics.ListAPIView):
"""
get: Returns a list of all the document type workflows.
"""
@@ -214,7 +214,7 @@ class APIWorkflowImageView(generics.RetrieveAPIView):
return response
class APIWorkflowListView(generics.ListCreateAPIView):
class APIWorkflowRuntimeProxyListView(generics.ListCreateAPIView):
"""
get: Returns a list of all the workflows.
post: Create a new workflow.
@@ -229,7 +229,7 @@ class APIWorkflowListView(generics.ListCreateAPIView):
if not self.request:
return None
return super(APIWorkflowListView, self).get_serializer(*args, **kwargs)
return super(APIWorkflowRuntimeProxyListView, self).get_serializer(*args, **kwargs)
def get_serializer_class(self):
if self.request.method == 'GET':

View File

@@ -29,27 +29,27 @@ from .handlers import (
)
from .html_widgets import WorkflowLogExtraDataWidget, widget_transition_events
from .links import (
link_document_workflow_instance_list, link_setup_document_type_workflows,
link_setup_workflow_document_types, link_setup_workflow_create,
link_setup_workflow_delete, link_setup_workflow_edit,
link_setup_workflow_list, link_setup_workflow_states,
link_setup_workflow_state_action_delete,
link_setup_workflow_state_action_edit,
link_setup_workflow_state_action_list,
link_setup_workflow_state_action_selection,
link_setup_workflow_state_create, link_setup_workflow_state_delete,
link_setup_workflow_state_edit, link_setup_workflow_transitions,
link_setup_workflow_transition_create,
link_setup_workflow_transition_delete, link_setup_workflow_transition_edit,
link_setup_workflow_transition_field_create,
link_setup_workflow_transition_field_delete,
link_setup_workflow_transition_field_edit,
link_setup_workflow_transition_field_list,
link_tool_launch_all_workflows, link_workflow_instance_detail,
link_workflow_instance_list, link_document_type_workflow_templates,
link_workflow_template_document_types, link_workflow_template_create,
link_workflow_template_delete, link_workflow_template_edit,
link_workflow_template_list, link_workflow_template_state_list,
link_workflow_template_state_action_delete,
link_workflow_template_state_action_edit,
link_workflow_template_state_action_list,
link_workflow_template_state_action_selection,
link_workflow_template_state_create, link_workflow_template_state_delete,
link_workflow_template_state_edit, link_workflow_template_transition_list,
link_workflow_template_transition_create,
link_workflow_template_transition_delete, link_workflow_template_transition_edit,
link_workflow_template_transition_field_create,
link_workflow_template_transition_field_delete,
link_workflow_template_transition_field_edit,
link_workflow_template_transition_field_list,
link_tool_launch_workflows, link_workflow_instance_detail,
link_workflow_instance_transition, link_workflow_runtime_proxy_document_list,
link_workflow_runtime_proxy_list, link_workflow_preview,
link_workflow_runtime_proxy_list, link_workflow_template_preview,
link_workflow_runtime_proxy_state_document_list, link_workflow_runtime_proxy_state_list,
link_workflow_transition_events
link_workflow_template_transition_events
)
from .permissions import (
permission_workflow_delete, permission_workflow_edit,
@@ -316,49 +316,49 @@ class DocumentStatesApp(MayanAppConfig):
)
menu_facet.bind_links(
links=(link_document_workflow_instance_list,), sources=(Document,)
links=(link_workflow_instance_list,), sources=(Document,)
)
menu_list_facet.bind_links(
links=(
link_acl_list, link_events_for_object,
link_object_event_types_user_subcriptions_list,
link_setup_workflow_document_types,
link_setup_workflow_states, link_setup_workflow_transitions,
link_workflow_preview
link_workflow_template_document_types,
link_workflow_template_state_list, link_workflow_template_transition_list,
link_workflow_template_preview
), sources=(Workflow,)
)
menu_list_facet.bind_links(
links=(
link_setup_document_type_workflows,
link_document_type_workflow_templates,
), sources=(DocumentType,)
)
menu_main.bind_links(links=(link_workflow_runtime_proxy_list,), position=10)
menu_object.bind_links(
links=(
link_setup_workflow_delete, link_setup_workflow_edit
link_workflow_template_delete, link_workflow_template_edit
), sources=(Workflow,)
)
menu_object.bind_links(
links=(
link_setup_workflow_state_edit,
link_setup_workflow_state_action_list,
link_setup_workflow_state_delete
link_workflow_template_state_edit,
link_workflow_template_state_action_list,
link_workflow_template_state_delete
), sources=(WorkflowState,)
)
menu_object.bind_links(
links=(
link_setup_workflow_transition_edit,
link_workflow_transition_events,
link_setup_workflow_transition_field_list, link_acl_list,
link_setup_workflow_transition_delete
link_workflow_template_transition_edit,
link_workflow_template_transition_events,
link_workflow_template_transition_field_list, link_acl_list,
link_workflow_template_transition_delete
), sources=(WorkflowTransition,)
)
menu_object.bind_links(
links=(
link_setup_workflow_transition_field_delete,
link_setup_workflow_transition_field_edit
link_workflow_template_transition_field_delete,
link_workflow_template_transition_field_edit
), sources=(WorkflowTransitionField,)
)
menu_object.bind_links(
@@ -381,21 +381,21 @@ class DocumentStatesApp(MayanAppConfig):
)
menu_object.bind_links(
links=(
link_setup_workflow_state_action_edit,
link_workflow_template_state_action_edit,
link_object_error_list,
link_setup_workflow_state_action_delete,
link_workflow_template_state_action_delete,
), sources=(WorkflowStateAction,)
)
menu_secondary.bind_links(
links=(link_setup_workflow_list, link_setup_workflow_create),
links=(link_workflow_template_list, link_workflow_template_create),
sources=(
Workflow, 'document_states:setup_workflow_create',
'document_states:setup_workflow_list'
Workflow, 'document_states:workflow_template_create',
'document_states:workflow_template_list'
)
)
menu_secondary.bind_links(
links=(link_setup_workflow_transition_field_create,),
links=(link_workflow_template_transition_field_create,),
sources=(
WorkflowTransition,
)
@@ -407,31 +407,31 @@ class DocumentStatesApp(MayanAppConfig):
)
)
menu_secondary.bind_links(
links=(link_setup_workflow_state_action_selection,),
links=(link_workflow_template_state_action_selection,),
sources=(
WorkflowState,
)
)
menu_secondary.bind_links(
links=(
link_setup_workflow_transition_create,
link_workflow_template_transition_create,
), sources=(
WorkflowTransition,
'document_states:setup_workflow_transition_list',
'document_states:workflow_template_transition_list',
)
)
menu_secondary.bind_links(
links=(
link_setup_workflow_state_create,
link_workflow_template_state_create,
), sources=(
WorkflowState,
'document_states:setup_workflow_state_list',
'document_states:workflow_template_state_list',
)
)
menu_setup.bind_links(links=(link_setup_workflow_list,))
menu_setup.bind_links(links=(link_workflow_template_list,))
menu_tools.bind_links(links=(link_tool_launch_all_workflows,))
menu_tools.bind_links(links=(link_tool_launch_workflows,))
post_save.connect(
dispatch_uid='workflows_handler_launch_workflow',

View File

@@ -1,45 +1,44 @@
from __future__ import absolute_import, unicode_literals
from mayan.apps.appearance.classes import Icon
from mayan.apps.documents.icons import icon_document_type
from mayan.apps.documents.icons import icon_document, icon_document_type
icon_workflow = Icon(driver_name='fontawesome', symbol='sitemap')
icon_document_type_workflow_list = icon_workflow
icon_tool_launch_workflows = icon_workflow
icon_document_workflow_instance_list = Icon(
driver_name='fontawesome', symbol='sitemap'
)
icon_setup_workflow_list = Icon(driver_name='fontawesome', symbol='sitemap')
icon_tool_launch_all_workflows = Icon(
driver_name='fontawesome', symbol='sitemap'
)
icon_workflow_create = Icon(
icon_document_type_workflow_list = icon_workflow
icon_workflow_template_create = Icon(
driver_name='fontawesome-dual', primary_symbol='sitemap',
secondary_symbol='plus'
)
icon_workflow_delete = Icon(driver_name='fontawesome', symbol='times')
icon_workflow_document_type_list = icon_document_type
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_instance_detail = Icon(
driver_name='fontawesome', symbol='sitemap'
icon_workflow_template_delete = Icon(driver_name='fontawesome', symbol='times')
icon_workflow_template_document_type_list = icon_document_type
icon_workflow_template_edit = Icon(
driver_name='fontawesome', symbol='pencil-alt'
)
icon_workflow_template_list = icon_workflow
icon_workflow_template_preview = Icon(driver_name='fontawesome', symbol='eye')
# Workflow instances
icon_workflow_instance_detail = icon_workflow
icon_workflow_instance_list = icon_workflow
icon_workflow_instance_transition = Icon(
driver_name='fontawesome', symbol='arrows-alt-h'
)
icon_workflow_runtime_proxy_document_list = icon_document_type
icon_workflow_runtime_proxy_list = Icon(
driver_name='fontawesome', symbol='sitemap'
)
icon_workflow_runtime_proxy_state_document_list = icon_document_type
# Workflow runtime proxies
icon_workflow_runtime_proxy_document_list = icon_document
icon_workflow_runtime_proxy_list = icon_workflow
icon_workflow_runtime_proxy_state_document_list = icon_document
icon_workflow_runtime_proxy_state_list = Icon(
driver_name='fontawesome', symbol='circle'
)
# Workflow transition states
icon_workflow_state_action_delete = Icon(
driver_name='fontawesome', symbol='times'
)
@@ -57,6 +56,8 @@ icon_workflow_state_create = Icon(
icon_workflow_state_delete = Icon(driver_name='fontawesome', symbol='times')
icon_workflow_state_edit = Icon(driver_name='fontawesome', symbol='pencil-alt')
# Workflow transition state actions
icon_workflow_state_action = Icon(driver_name='fontawesome', symbol='code')
icon_workflow_state_action_delete = Icon(
driver_name='fontawesome', symbol='times'
@@ -71,6 +72,9 @@ icon_workflow_state_action_selection = Icon(
icon_workflow_state_action_list = Icon(
driver_name='fontawesome', symbol='code'
)
# Workflow transitions
icon_workflow_transition = Icon(
driver_name='fontawesome', symbol='arrows-alt-h'
)
@@ -85,7 +89,11 @@ icon_workflow_transition_edit = Icon(
driver_name='fontawesome', symbol='pencil-alt'
)
icon_workflow_transition_field = Icon(driver_name='fontawesome', symbol='table')
# Workflow transition fields
icon_workflow_transition_field = Icon(
driver_name='fontawesome', symbol='table'
)
icon_workflow_transition_field_delete = Icon(
driver_name='fontawesome', symbol='times'
)
@@ -99,7 +107,6 @@ icon_workflow_transition_field_create = Icon(
icon_workflow_transition_field_list = Icon(
driver_name='fontawesome', symbol='table'
)
icon_workflow_transition_triggers = Icon(
driver_name='fontawesome', symbol='bolt'
)

View File

@@ -11,179 +11,185 @@ from .permissions import (
permission_workflow_view,
)
link_setup_document_type_workflows = Link(
# Workflow templates
link_document_type_workflow_templates = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_document_type_workflow_list',
permissions=(permission_document_type_edit,), text=_('Workflows'),
view='document_states:document_type_workflows',
view='document_states:document_type_workflow_templates',
)
link_setup_workflow_create = Link(
icon_class_path='mayan.apps.document_states.icons.icon_workflow_create',
link_workflow_template_create = Link(
icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_create',
permissions=(permission_workflow_create,),
text=_('Create workflow'), view='document_states:setup_workflow_create'
text=_('Create workflow'), view='document_states:workflow_template_create'
)
link_setup_workflow_delete = Link(
link_workflow_template_delete = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_delete',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_delete',
permissions=(permission_workflow_delete,),
tags='dangerous', text=_('Delete'),
view='document_states:setup_workflow_delete',
view='document_states:workflow_template_delete',
)
link_setup_workflow_document_types = Link(
link_workflow_template_document_types = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_document_type_list',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_document_type_list',
permissions=(permission_workflow_edit,), text=_('Document types'),
view='document_states:setup_workflow_document_types',
view='document_states:workflow_template_document_types',
)
link_setup_workflow_edit = Link(
link_workflow_template_edit = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_edit',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_edit',
permissions=(permission_workflow_edit,),
text=_('Edit'), view='document_states:setup_workflow_edit',
text=_('Edit'), view='document_states:workflow_template_edit',
)
link_setup_workflow_list = Link(
icon_class_path='mayan.apps.document_states.icons.icon_setup_workflow_list',
link_workflow_template_list = Link(
icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_list',
permissions=(permission_workflow_view,), text=_('Workflows'),
view='document_states:setup_workflow_list'
view='document_states:workflow_template_list'
)
link_setup_workflow_state_action_delete = Link(
link_workflow_template_preview = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_preview',
permissions=(permission_workflow_view,),
text=_('Preview'), view='document_states:workflow_template_preview'
)
# Workflow template state actions
link_workflow_template_state_action_delete = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_action_delete',
permissions=(permission_workflow_edit,),
tags='dangerous', text=_('Delete'),
view='document_states:setup_workflow_state_action_delete',
view='document_states:workflow_template_state_action_delete',
)
link_setup_workflow_state_action_edit = Link(
link_workflow_template_state_action_edit = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_action_edit',
permissions=(permission_workflow_edit,),
text=_('Edit'), view='document_states:setup_workflow_state_action_edit',
text=_('Edit'), view='document_states:workflow_template_state_action_edit',
)
link_setup_workflow_state_action_list = Link(
link_workflow_template_state_action_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_action_list',
permissions=(permission_workflow_edit,),
text=_('Actions'),
view='document_states:setup_workflow_state_action_list',
view='document_states:workflow_template_state_action_list',
)
link_setup_workflow_state_action_selection = Link(
link_workflow_template_state_action_selection = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_action',
permissions=(permission_workflow_edit,), text=_('Create action'),
view='document_states:setup_workflow_state_action_selection',
view='document_states:workflow_template_state_action_selection',
)
link_setup_workflow_state_create = Link(
# Workflow template states
link_workflow_template_state_create = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_create',
permissions=(permission_workflow_edit,), text=_('Create state'),
view='document_states:setup_workflow_state_create',
view='document_states:workflow_template_state_create',
)
link_setup_workflow_state_delete = Link(
link_workflow_template_state_delete = Link(
args='object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_delete',
permissions=(permission_workflow_edit,),
tags='dangerous', text=_('Delete'),
view='document_states:setup_workflow_state_delete',
view='document_states:workflow_template_state_delete',
)
link_setup_workflow_state_edit = Link(
link_workflow_template_state_edit = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_edit',
permissions=(permission_workflow_edit,),
text=_('Edit'), view='document_states:setup_workflow_state_edit',
text=_('Edit'), view='document_states:workflow_template_state_edit',
)
link_setup_workflow_states = Link(
link_workflow_template_state_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_state',
permissions=(permission_workflow_view,), text=_('States'),
view='document_states:setup_workflow_state_list',
view='document_states:workflow_template_state_list',
)
link_setup_workflow_transition_create = Link(
# Workflow template transitions
link_workflow_template_transition_create = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_create',
permissions=(permission_workflow_edit,), text=_('Create transition'),
view='document_states:setup_workflow_transition_create',
view='document_states:workflow_template_transition_create',
)
link_setup_workflow_transition_delete = Link(
link_workflow_template_transition_delete = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_delete',
permissions=(permission_workflow_edit,),
tags='dangerous', text=_('Delete'),
view='document_states:setup_workflow_transition_delete',
view='document_states:workflow_template_transition_delete',
)
link_setup_workflow_transition_edit = Link(
link_workflow_template_transition_edit = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_edit',
permissions=(permission_workflow_edit,),
text=_('Edit'), view='document_states:setup_workflow_transition_edit',
text=_('Edit'), view='document_states:workflow_template_transition_edit',
)
link_setup_workflow_transitions = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition',
permissions=(permission_workflow_view,), text=_('Transitions'),
view='document_states:setup_workflow_transition_list',
)
link_workflow_transition_events = Link(
link_workflow_template_transition_events = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_triggers',
permissions=(permission_workflow_edit,),
text=_('Transition triggers'),
view='document_states:setup_workflow_transition_events'
view='document_states:workflow_template_transition_events'
)
link_workflow_template_transition_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition',
permissions=(permission_workflow_view,), text=_('Transitions'),
view='document_states:workflow_template_transition_list',
)
# Workflow transition fields
link_setup_workflow_transition_field_create = Link(
link_workflow_template_transition_field_create = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_field',
permissions=(permission_workflow_edit,), text=_('Create field'),
view='document_states:setup_workflow_transition_field_create',
view='document_states:workflow_template_transition_field_create',
)
link_setup_workflow_transition_field_delete = Link(
link_workflow_template_transition_field_delete = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_field_delete',
permissions=(permission_workflow_edit,),
tags='dangerous', text=_('Delete'),
view='document_states:setup_workflow_transition_field_delete',
view='document_states:workflow_template_transition_field_delete',
)
link_setup_workflow_transition_field_edit = Link(
link_workflow_template_transition_field_edit = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_field_edit',
permissions=(permission_workflow_edit,),
text=_('Edit'), view='document_states:setup_workflow_transition_field_edit',
text=_('Edit'), view='document_states:workflow_template_transition_field_edit',
)
link_setup_workflow_transition_field_list = Link(
link_workflow_template_transition_field_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_field_list',
permissions=(permission_workflow_edit,),
text=_('Fields'),
view='document_states:setup_workflow_transition_field_list',
)
link_workflow_preview = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_preview',
permissions=(permission_workflow_view,),
text=_('Preview'), view='document_states:workflow_preview'
)
link_tool_launch_all_workflows = Link(
icon_class_path='mayan.apps.document_states.icons.icon_tool_launch_all_workflows',
permissions=(permission_workflow_tools,),
text=_('Launch all workflows'),
view='document_states:tool_launch_all_workflows'
view='document_states:workflow_template_transition_field_list',
)
# Document workflow instances
link_document_workflow_instance_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_document_workflow_instance_list',
permissions=(permission_workflow_view,), text=_('Workflows'),
view='document_states:document_workflow_instance_list',
)
link_workflow_instance_detail = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_instance_detail',
permissions=(permission_workflow_view,),
text=_('Detail'), view='document_states:workflow_instance_detail',
)
link_workflow_instance_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_instance_list',
permissions=(permission_workflow_view,), text=_('Workflows'),
view='document_states:workflow_instance_list',
)
link_workflow_instance_transition = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_instance_transition',
@@ -192,28 +198,38 @@ link_workflow_instance_transition = Link(
)
# Runtime proxies
link_workflow_runtime_proxy_document_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_document_list',
permissions=(permission_workflow_view,),
text=_('Workflow documents'),
view='document_states:workflow_document_list',
view='document_states:workflow_runtime_proxy_document_list',
)
link_workflow_runtime_proxy_list = Link(
icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_list',
permissions=(permission_workflow_view,),
text=_('Workflows'), view='document_states:workflow_list'
text=_('Workflows'), view='document_states:workflow_runtime_proxy_list'
)
link_workflow_runtime_proxy_state_document_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_state_document_list',
permissions=(permission_workflow_view,),
text=_('State documents'),
view='document_states:workflow_state_document_list',
view='document_states:workflow_runtime_proxy_state_document_list',
)
link_workflow_runtime_proxy_state_list = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_state_list',
permissions=(permission_workflow_view,),
text=_('States'), view='document_states:workflow_state_list',
text=_('States'), view='document_states:workflow_runtime_proxy_state_list',
)
# Tools
link_tool_launch_workflows = Link(
icon_class_path='mayan.apps.document_states.icons.icon_tool_launch_workflows',
permissions=(permission_workflow_tools,),
text=_('Launch all workflows'),
view='document_states:tool_launch_workflows'
)

View File

@@ -38,19 +38,19 @@ class WorkflowStateViewTestMixin(object):
data.update(extra_data)
return self.post(
viewname='document_states:setup_workflow_state_create',
viewname='document_states:workflow_template_state_create',
kwargs={'pk': self.test_workflow.pk}, data=data
)
def _request_test_workflow_state_delete_view(self):
return self.post(
viewname='document_states:setup_workflow_state_delete',
viewname='document_states:workflow_template_state_delete',
kwargs={'pk': self.test_workflow_state_1.pk}
)
def _request_test_workflow_state_edit_view(self):
return self.post(
viewname='document_states:setup_workflow_state_edit',
viewname='document_states:workflow_template_state_edit',
kwargs={'pk': self.test_workflow_state_1.pk}, data={
'label': TEST_WORKFLOW_STATE_LABEL_EDITED
}
@@ -58,7 +58,7 @@ class WorkflowStateViewTestMixin(object):
def _request_test_workflow_state_list_view(self):
return self.get(
viewname='document_states:setup_workflow_state_list',
viewname='document_states:workflow_template_state_list',
kwargs={'pk': self.test_workflow.pk}
)
@@ -120,7 +120,7 @@ class WorkflowTestMixin(object):
class WorkflowTransitionViewTestMixin(object):
def _request_test_workflow_transition_create_view(self):
return self.post(
viewname='document_states:setup_workflow_transition_create',
viewname='document_states:workflow_template_transition_create',
kwargs={'pk': self.test_workflow.pk}, data={
'label': TEST_WORKFLOW_TRANSITION_LABEL,
'origin_state': self.test_workflow_state_1.pk,
@@ -130,13 +130,13 @@ class WorkflowTransitionViewTestMixin(object):
def _request_test_workflow_transition_delete_view(self):
return self.post(
viewname='document_states:setup_workflow_transition_delete',
viewname='document_states:workflow_template_transition_delete',
kwargs={'pk': self.test_workflow_transition.pk}
)
def _request_test_workflow_transition_edit_view(self):
return self.post(
viewname='document_states:setup_workflow_transition_edit',
viewname='document_states:workflow_template_transition_edit',
kwargs={'pk': self.test_workflow_transition.pk}, data={
'label': TEST_WORKFLOW_TRANSITION_LABEL_EDITED,
'origin_state': self.test_workflow_state_1.pk,
@@ -146,7 +146,7 @@ class WorkflowTransitionViewTestMixin(object):
def _request_test_workflow_transition_list_view(self):
return self.get(
viewname='document_states:setup_workflow_transition_list',
viewname='document_states:workflow_template_transition_list',
kwargs={'pk': self.test_workflow.pk}
)
@@ -163,7 +163,7 @@ class WorkflowTransitionViewTestMixin(object):
class WorkflowViewTestMixin(object):
def _request_test_workflow_create_view(self):
return self.post(
viewname='document_states:setup_workflow_create', data={
viewname='document_states:workflow_template_create', data={
'label': TEST_WORKFLOW_LABEL,
'internal_name': TEST_WORKFLOW_INTERNAL_NAME,
}
@@ -171,14 +171,14 @@ class WorkflowViewTestMixin(object):
def _request_test_workflow_delete_view(self):
return self.post(
viewname='document_states:setup_workflow_delete', kwargs={
viewname='document_states:workflow_template_delete', kwargs={
'pk': self.test_workflow.pk
}
)
def _request_test_workflow_edit_view(self):
return self.post(
viewname='document_states:setup_workflow_edit', kwargs={
viewname='document_states:workflow_template_edit', kwargs={
'pk': self.test_workflow.pk,
}, data={
'label': TEST_WORKFLOW_LABEL_EDITED,
@@ -188,12 +188,12 @@ class WorkflowViewTestMixin(object):
def _request_test_workflow_list_view(self):
return self.get(
viewname='document_states:setup_workflow_list',
viewname='document_states:workflow_template_list',
)
def _request_test_workflow_preview_view(self):
def _request_test_workflow_template_preview_view(self):
return self.get(
viewname='document_states:workflow_preview', kwargs={
viewname='document_states:workflow_template_preview', kwargs={
'pk': self.test_workflow.pk,
}
)

View File

@@ -15,7 +15,7 @@ class WorkflowStateActionViewTestCase(WorkflowStateActionTestMixin, WorkflowTest
def _request_test_document_state_action_view(self):
return self.get(
viewname='document_states:setup_workflow_state_action_list',
viewname='document_states:workflow_template_state_action_list',
kwargs={'pk': self.test_workflow_state.pk}
)

View File

@@ -212,7 +212,7 @@ class WorkflowTransitionEventViewTestCase(
):
def _request_test_workflow_transition_event_list_view(self):
return self.get(
viewname='document_states:setup_workflow_transition_events',
viewname='document_states:workflow_template_transition_events',
kwargs={'pk': self.test_workflow_transition.pk}
)
@@ -256,7 +256,7 @@ class WorkflowTransitionFieldViewTestCase(
def _request_test_workflow_transition_field_list_view(self):
return self.get(
viewname='document_states:setup_workflow_transition_field_list',
viewname='document_states:workflow_template_transition_field_list',
kwargs={'pk': self.test_workflow_transition.pk}
)
@@ -286,7 +286,7 @@ class WorkflowTransitionFieldViewTestCase(
def _request_workflow_transition_field_create_view(self):
return self.post(
viewname='document_states:setup_workflow_transition_field_create',
viewname='document_states:workflow_template_transition_field_create',
kwargs={'pk': self.test_workflow_transition.pk},
data={
'field_type': TEST_WORKFLOW_TRANSITION_FIELD_TYPE,
@@ -324,7 +324,7 @@ class WorkflowTransitionFieldViewTestCase(
def _request_workflow_transition_field_delete_view(self):
return self.post(
viewname='document_states:setup_workflow_transition_field_delete',
viewname='document_states:workflow_template_transition_field_delete',
kwargs={'pk': self.test_workflow_transition_field.pk},
)

View File

@@ -93,31 +93,31 @@ class WorkflowViewTestCase(
self.assertEqual(response.status_code, 200)
self.assertContains(response, text=self.test_workflow.label)
def test_workflow_preview_view_no_access(self):
def test_workflow_template_preview_view_no_access(self):
self._create_test_workflow()
response = self._request_test_workflow_preview_view()
response = self._request_test_workflow_template_preview_view()
self.assertEqual(response.status_code, 404)
self.assertTrue(self.test_workflow in Workflow.objects.all())
def test_workflow_preview_view_with_access(self):
def test_workflow_template_preview_view_with_access(self):
self._create_test_workflow()
self.grant_access(
obj=self.test_workflow, permission=permission_workflow_view
)
response = self._request_test_workflow_preview_view()
response = self._request_test_workflow_template_preview_view()
self.assertEqual(response.status_code, 200)
class WorkflowToolViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase):
def _request_workflow_launch_view(self):
return self.post(
viewname='document_states:tool_launch_all_workflows',
viewname='document_states:tool_launch_workflows',
)
def test_tool_launch_all_workflows_view_no_permission(self):
def test_tool_launch_workflows_view_no_permission(self):
self._create_test_workflow(add_document_type=True)
self._create_test_workflow_states()
self._create_test_workflow_transition()
@@ -129,7 +129,7 @@ class WorkflowToolViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase):
self.assertEqual(self.test_document.workflows.count(), 0)
def test_tool_launch_all_workflows_view_with_permission(self):
def test_tool_launch_workflows_view_with_permission(self):
self._create_test_workflow(add_document_type=True)
self._create_test_workflow_states()
self._create_test_workflow_transition()

View File

@@ -3,136 +3,57 @@ from __future__ import unicode_literals
from django.conf.urls import url
from .api_views import (
APIDocumentTypeWorkflowListView, APIWorkflowDocumentTypeList,
APIDocumentTypeWorkflowRuntimeProxyListView, APIWorkflowDocumentTypeList,
APIWorkflowDocumentTypeView, APIWorkflowImageView,
APIWorkflowInstanceListView, APIWorkflowInstanceView,
APIWorkflowInstanceLogEntryListView, APIWorkflowListView,
APIWorkflowInstanceLogEntryListView, APIWorkflowRuntimeProxyListView,
APIWorkflowStateListView, APIWorkflowStateView,
APIWorkflowTransitionListView, APIWorkflowTransitionView, APIWorkflowView
)
from .views import (
DocumentWorkflowInstanceListView, SetupWorkflowCreateView,
SetupWorkflowDeleteView, SetupWorkflowDocumentTypesView,
SetupWorkflowEditView, SetupWorkflowListView,
SetupWorkflowStateActionCreateView, SetupWorkflowStateActionDeleteView,
SetupWorkflowStateActionEditView, SetupWorkflowStateActionListView,
SetupWorkflowStateActionSelectionView, SetupWorkflowStateCreateView,
SetupWorkflowStateDeleteView, SetupWorkflowStateEditView,
SetupWorkflowStateListView, SetupWorkflowTransitionListView,
SetupWorkflowTransitionCreateView, SetupWorkflowTransitionDeleteView,
SetupWorkflowTransitionEditView,
SetupWorkflowTransitionTriggerEventListView, ToolLaunchAllWorkflows,
WorkflowDocumentListView, WorkflowInstanceDetailView,
WorkflowInstanceTransitionExecuteView, WorkflowInstanceTransitionSelectView,
WorkflowListView, WorkflowPreviewView, WorkflowStateDocumentListView,
WorkflowStateListView,
from .views.workflow_instance_views import (
WorkflowInstanceDetailView, WorkflowInstanceListView,
WorkflowInstanceTransitionSelectView,
WorkflowInstanceTransitionExecuteView
)
from .views.workflow_views import (
SetupDocumentTypeWorkflowsView, SetupWorkflowTransitionFieldCreateView,
SetupWorkflowTransitionFieldDeleteView,
SetupWorkflowTransitionFieldEditView, SetupWorkflowTransitionFieldListView
from .views.workflow_proxy_views import (
WorkflowRuntimeProxyDocumentListView,
WorkflowRuntimeProxyListView, WorkflowRuntimeProxyStateDocumentListView,
WorkflowRuntimeProxyStateListView
)
from .views.workflow_template_views import (
DocumentTypeWorkflowTemplatesView, ToolLaunchWorkflows,
WorkflowTemplateCreateView, WorkflowTemplateDeleteView,
WorkflowTemplateEditView, WorkflowTemplateListView,
WorkflowTemplatePreviewView, WorkflowTemplateDocumentTypesView
)
from .views.workflow_template_state_views import (
WorkflowTemplateStateActionCreateView,
WorkflowTemplateStateActionDeleteView, WorkflowTemplateStateActionEditView,
WorkflowTemplateStateActionListView,
WorkflowTemplateStateActionSelectionView, WorkflowTemplateStateCreateView,
WorkflowTemplateStateDeleteView, WorkflowTemplateStateEditView,
WorkflowTemplateStateListView
)
from .views.workflow_template_transition_views import (
WorkflowTemplateTransitionCreateView, WorkflowTemplateTransitionDeleteView,
WorkflowTemplateTransitionEditView, WorkflowTemplateTransitionListView,
WorkflowTemplateTransitionTriggerEventListView,
WorkflowTemplateTransitionFieldCreateView,
WorkflowTemplateTransitionFieldDeleteView,
WorkflowTemplateTransitionFieldEditView,
WorkflowTemplateTransitionFieldListView
)
urlpatterns_workflow_templates = [
urlpatterns_workflow_instances = [
url(
regex=r'^setup/workflows/$', view=SetupWorkflowListView.as_view(),
name='setup_workflow_list'
regex=r'^documents/(?P<pk>\d+)/workflows/$',
view=WorkflowInstanceListView.as_view(),
name='workflow_instance_list'
),
url(
regex=r'^setup/workflows/create/$', view=SetupWorkflowCreateView.as_view(),
name='setup_workflow_create'
),
url(
regex=r'^setup/workflows/(?P<pk>\d+)/delete/$',
view=SetupWorkflowDeleteView.as_view(), name='setup_workflow_delete'
),
url(
regex=r'^setup/workflows/(?P<pk>\d+)/edit/$',
view=SetupWorkflowEditView.as_view(), name='setup_workflow_edit'
),
url(
regex=r'^setup/document_types/(?P<pk>\d+)/workflows/$',
view=SetupDocumentTypeWorkflowsView.as_view(),
name='document_type_workflows'
),
]
urlpatterns_workflow_states = [
url(
regex=r'^setup/workflows/(?P<pk>\d+)/states/$',
view=SetupWorkflowStateListView.as_view(),
name='setup_workflow_state_list'
),
url(
regex=r'^setup/workflows/(?P<pk>\d+)/states/create/$',
view=SetupWorkflowStateCreateView.as_view(),
name='setup_workflow_state_create'
),
url(
regex=r'^setup/workflows/states/(?P<pk>\d+)/delete/$',
view=SetupWorkflowStateDeleteView.as_view(),
name='setup_workflow_state_delete'
),
url(
regex=r'^setup/workflows/states/(?P<pk>\d+)/edit/$',
view=SetupWorkflowStateEditView.as_view(),
name='setup_workflow_state_edit'
),
]
urlpatterns_workflow_state_actions = [
url(
regex=r'^setup/workflows/states/(?P<pk>\d+)/actions/$',
view=SetupWorkflowStateActionListView.as_view(),
name='setup_workflow_state_action_list'
),
url(
regex=r'^setup/workflows/states/(?P<pk>\d+)/actions/selection/$',
view=SetupWorkflowStateActionSelectionView.as_view(),
name='setup_workflow_state_action_selection'
),
url(
regex=r'^setup/workflows/states/(?P<pk>\d+)/actions/(?P<class_path>[a-zA-Z0-9_.]+)/create/$',
view=SetupWorkflowStateActionCreateView.as_view(),
name='setup_workflow_state_action_create'
),
url(
regex=r'^setup/workflows/states/actions/(?P<pk>\d+)/delete/$',
view=SetupWorkflowStateActionDeleteView.as_view(),
name='setup_workflow_state_action_delete'
),
url(
regex=r'^setup/workflows/states/actions/(?P<pk>\d+)/edit/$',
view=SetupWorkflowStateActionEditView.as_view(),
name='setup_workflow_state_action_edit'
),
]
urlpatterns_workflow_transitions = [
url(
regex=r'^setup/workflows/(?P<pk>\d+)/transitions/$',
view=SetupWorkflowTransitionListView.as_view(),
name='setup_workflow_transition_list'
),
url(
regex=r'^setup/workflows/(?P<pk>\d+)/transitions/create/$',
view=SetupWorkflowTransitionCreateView.as_view(),
name='setup_workflow_transition_create'
),
url(
regex=r'^setup/workflows/(?P<pk>\d+)/transitions/events/$',
view=SetupWorkflowTransitionTriggerEventListView.as_view(),
name='setup_workflow_transition_events'
),
url(
regex=r'^setup/workflows/transitions/(?P<pk>\d+)/delete/$',
view=SetupWorkflowTransitionDeleteView.as_view(),
name='setup_workflow_transition_delete'
),
url(
regex=r'^setup/workflows/transitions/(?P<pk>\d+)/edit/$',
view=SetupWorkflowTransitionEditView.as_view(),
name='setup_workflow_transition_edit'
regex=r'^documents/workflows/(?P<pk>\d+)/$',
view=WorkflowInstanceDetailView.as_view(),
name='workflow_instance_detail'
),
url(
regex=r'^documents/workflows/(?P<pk>\d+)/transitions/select/$',
@@ -146,82 +67,174 @@ urlpatterns_workflow_transitions = [
),
]
urlpatterns_workflow_runtime_proxies = [
url(
regex=r'workflow_runtime_proxies/$',
view=WorkflowRuntimeProxyListView.as_view(),
name='workflow_runtime_proxy_list'
),
url(
regex=r'^workflow_runtime_proxies/(?P<pk>\d+)/documents/$',
view=WorkflowRuntimeProxyDocumentListView.as_view(),
name='workflow_runtime_proxy_document_list'
),
url(
regex=r'^workflow_runtime_proxies/(?P<pk>\d+)/states/$',
view=WorkflowRuntimeProxyStateListView.as_view(),
name='workflow_runtime_proxy_state_list'
),
url(
regex=r'^workflow_runtime_proxies/states/(?P<pk>\d+)/documents/$',
view=WorkflowRuntimeProxyStateDocumentListView.as_view(),
name='workflow_runtime_proxy_state_document_list'
),
]
urlpatterns_workflow_states = [
url(
regex=r'^workflow_templates/(?P<pk>\d+)/states/$',
view=WorkflowTemplateStateListView.as_view(),
name='workflow_template_state_list'
),
url(
regex=r'^workflow_templates/(?P<pk>\d+)/states/create/$',
view=WorkflowTemplateStateCreateView.as_view(),
name='workflow_template_state_create'
),
url(
regex=r'^workflow_templates/states/(?P<pk>\d+)/delete/$',
view=WorkflowTemplateStateDeleteView.as_view(),
name='workflow_template_state_delete'
),
url(
regex=r'^workflow_templates/states/(?P<pk>\d+)/edit/$',
view=WorkflowTemplateStateEditView.as_view(),
name='workflow_template_state_edit'
),
]
urlpatterns_workflow_state_actions = [
url(
regex=r'^workflow_templates/states/(?P<pk>\d+)/actions/$',
view=WorkflowTemplateStateActionListView.as_view(),
name='workflow_template_state_action_list'
),
url(
regex=r'^workflow_templates/states/(?P<pk>\d+)/actions/selection/$',
view=WorkflowTemplateStateActionSelectionView.as_view(),
name='workflow_template_state_action_selection'
),
url(
regex=r'^workflow_templates/states/(?P<pk>\d+)/actions/(?P<class_path>[a-zA-Z0-9_.]+)/create/$',
view=WorkflowTemplateStateActionCreateView.as_view(),
name='workflow_template_state_action_create'
),
url(
regex=r'^workflow_templates/states/actions/(?P<pk>\d+)/delete/$',
view=WorkflowTemplateStateActionDeleteView.as_view(),
name='workflow_template_state_action_delete'
),
url(
regex=r'^workflow_templates/states/actions/(?P<pk>\d+)/edit/$',
view=WorkflowTemplateStateActionEditView.as_view(),
name='workflow_template_state_action_edit'
),
]
urlpatterns_workflow_templates = [
url(
regex=r'^workflow_templates/$', view=WorkflowTemplateListView.as_view(),
name='workflow_template_list'
),
url(
regex=r'^workflow_templates/create/$', view=WorkflowTemplateCreateView.as_view(),
name='workflow_template_create'
),
url(
regex=r'^workflow_templates/(?P<pk>\d+)/delete/$',
view=WorkflowTemplateDeleteView.as_view(), name='workflow_template_delete'
),
url(
regex=r'^workflow_templates/(?P<pk>\d+)/document_types/$',
view=WorkflowTemplateDocumentTypesView.as_view(),
name='workflow_template_document_types'
),
url(
regex=r'^workflow_templates/(?P<pk>\d+)/edit/$',
view=WorkflowTemplateEditView.as_view(), name='workflow_template_edit'
),
url(
regex=r'^workflow_templates/(?P<pk>\d+)/preview/$',
view=WorkflowTemplatePreviewView.as_view(),
name='workflow_template_preview'
),
url(
regex=r'^document_types/(?P<pk>\d+)/workflow_templates/$',
view=DocumentTypeWorkflowTemplatesView.as_view(),
name='document_type_workflow_templates'
),
]
urlpatterns_workflow_transitions = [
url(
regex=r'^workflow_templates/(?P<pk>\d+)/transitions/$',
view=WorkflowTemplateTransitionListView.as_view(),
name='workflow_template_transition_list'
),
url(
regex=r'^workflow_templates/(?P<pk>\d+)/transitions/create/$',
view=WorkflowTemplateTransitionCreateView.as_view(),
name='workflow_template_transition_create'
),
url(
regex=r'^workflow_templates/(?P<pk>\d+)/transitions/events/$',
view=WorkflowTemplateTransitionTriggerEventListView.as_view(),
name='workflow_template_transition_events'
),
url(
regex=r'^workflow_templates/transitions/(?P<pk>\d+)/delete/$',
view=WorkflowTemplateTransitionDeleteView.as_view(),
name='workflow_template_transition_delete'
),
url(
regex=r'^workflow_templates/transitions/(?P<pk>\d+)/edit/$',
view=WorkflowTemplateTransitionEditView.as_view(),
name='workflow_template_transition_edit'
),
]
urlpatterns_workflow_transition_fields = [
url(
regex=r'^setup/workflows/transitions/(?P<pk>\d+)/fields/create/$',
view=SetupWorkflowTransitionFieldCreateView.as_view(),
name='setup_workflow_transition_field_create'
regex=r'^workflow_templates/transitions/(?P<pk>\d+)/fields/create/$',
view=WorkflowTemplateTransitionFieldCreateView.as_view(),
name='workflow_template_transition_field_create'
),
url(
regex=r'^setup/workflows/transitions/(?P<pk>\d+)/fields/$',
view=SetupWorkflowTransitionFieldListView.as_view(),
name='setup_workflow_transition_field_list'
regex=r'^workflow_templates/transitions/(?P<pk>\d+)/fields/$',
view=WorkflowTemplateTransitionFieldListView.as_view(),
name='workflow_template_transition_field_list'
),
url(
regex=r'^setup/workflows/transitions/fields/(?P<pk>\d+)/delete/$',
view=SetupWorkflowTransitionFieldDeleteView.as_view(),
name='setup_workflow_transition_field_delete'
regex=r'^workflow_templates/transitions/fields/(?P<pk>\d+)/delete/$',
view=WorkflowTemplateTransitionFieldDeleteView.as_view(),
name='workflow_template_transition_field_delete'
),
url(
regex=r'^setup/workflows/transitions/fields/(?P<pk>\d+)/edit/$',
view=SetupWorkflowTransitionFieldEditView.as_view(),
name='setup_workflow_transition_field_edit'
regex=r'^workflow_templates/transitions/fields/(?P<pk>\d+)/edit/$',
view=WorkflowTemplateTransitionFieldEditView.as_view(),
name='workflow_template_transition_field_edit'
),
]
urlpatterns = [
url(
regex=r'^document/(?P<pk>\d+)/workflows/$',
view=DocumentWorkflowInstanceListView.as_view(),
name='document_workflow_instance_list'
),
url(
regex=r'^document/workflows/(?P<pk>\d+)/$',
view=WorkflowInstanceDetailView.as_view(),
name='workflow_instance_detail'
),
url(
regex=r'^setup/workflow/(?P<pk>\d+)/documents/$',
view=WorkflowDocumentListView.as_view(),
name='setup_workflow_document_list'
),
url(
regex=r'^setup/workflow/(?P<pk>\d+)/document_types/$',
view=SetupWorkflowDocumentTypesView.as_view(),
name='setup_workflow_document_types'
),
url(
regex=r'^tools/workflow/all/launch/$',
view=ToolLaunchAllWorkflows.as_view(),
name='tool_launch_all_workflows'
),
url(
regex=r'all/$',
view=WorkflowListView.as_view(),
name='workflow_list'
),
url(
regex=r'^(?P<pk>\d+)/documents/$',
view=WorkflowDocumentListView.as_view(),
name='workflow_document_list'
),
url(
regex=r'^(?P<pk>\d+)/states/$',
view=WorkflowStateListView.as_view(),
name='workflow_state_list'
),
url(
regex=r'^(?P<pk>\d+)/preview/$',
view=WorkflowPreviewView.as_view(),
name='workflow_preview'
),
url(
regex=r'^state/(?P<pk>\d+)/documents/$',
view=WorkflowStateDocumentListView.as_view(),
name='workflow_state_document_list'
regex=r'^tools/workflows/launch/$',
view=ToolLaunchWorkflows.as_view(),
name='tool_launch_workflows'
),
]
urlpatterns.extend(urlpatterns_workflow_instances)
urlpatterns.extend(urlpatterns_workflow_runtime_proxies)
urlpatterns.extend(urlpatterns_workflow_states)
urlpatterns.extend(urlpatterns_workflow_state_actions)
urlpatterns.extend(urlpatterns_workflow_templates)
@@ -230,7 +243,7 @@ urlpatterns.extend(urlpatterns_workflow_transition_fields)
api_urls = [
url(
regex=r'^workflows/$', view=APIWorkflowListView.as_view(),
regex=r'^workflows/$', view=APIWorkflowRuntimeProxyListView.as_view(),
name='workflow-list'
),
url(
@@ -286,7 +299,7 @@ api_urls = [
),
url(
regex=r'^document_types/(?P<pk>[0-9]+)/workflows/$',
view=APIDocumentTypeWorkflowListView.as_view(),
view=APIDocumentTypeWorkflowRuntimeProxyListView.as_view(),
name='documenttype-workflow-list'
),
]

View File

@@ -1,3 +1 @@
from .workflow_instance_views import * # NOQA
from .workflow_proxy_views import * # NOQA
from .workflow_views import * # NOQA

View File

@@ -14,20 +14,14 @@ from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.documents.models import Document
from ..forms import WorkflowInstanceTransitionSelectForm
from ..icons import icon_workflow_instance_detail, icon_workflow_list
from ..icons import icon_workflow_instance_detail, icon_workflow_template_list
from ..links import link_workflow_instance_transition
from ..literals import FIELD_TYPE_MAPPING, WIDGET_CLASS_MAPPING
from ..models import WorkflowInstance
from ..permissions import permission_workflow_view
__all__ = (
'DocumentWorkflowInstanceListView', 'WorkflowInstanceDetailView',
'WorkflowInstanceTransitionSelectView',
'WorkflowInstanceTransitionExecuteView'
)
class DocumentWorkflowInstanceListView(SingleObjectListView):
class WorkflowInstanceListView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
obj=self.get_document(), permissions=(permission_workflow_view,),
@@ -35,7 +29,7 @@ class DocumentWorkflowInstanceListView(SingleObjectListView):
)
return super(
DocumentWorkflowInstanceListView, self
WorkflowInstanceListView, self
).dispatch(request, *args, **kwargs)
def get_document(self):
@@ -44,7 +38,7 @@ class DocumentWorkflowInstanceListView(SingleObjectListView):
def get_extra_context(self):
return {
'hide_link': True,
'no_results_icon': icon_workflow_list,
'no_results_icon': icon_workflow_template_list,
'no_results_text': _(
'Assign workflows to the document type of this document '
'to have this document execute those workflows. '

View File

@@ -9,18 +9,13 @@ from mayan.apps.common.generics import SingleObjectListView
from mayan.apps.documents.models import Document
from mayan.apps.documents.views import DocumentListView
from ..icons import icon_workflow_list
from ..links import link_setup_workflow_create, link_setup_workflow_state_create
from ..icons import icon_workflow_template_list
from ..links import link_workflow_template_create, link_workflow_template_state_create
from ..models import WorkflowRuntimeProxy, WorkflowStateRuntimeProxy
from ..permissions import permission_workflow_view
__all__ = (
'WorkflowDocumentListView', 'WorkflowListView',
'WorkflowStateDocumentListView', 'WorkflowStateListView'
)
class WorkflowDocumentListView(DocumentListView):
class WorkflowRuntimeProxyDocumentListView(DocumentListView):
def dispatch(self, request, *args, **kwargs):
self.workflow = get_object_or_404(
klass=WorkflowRuntimeProxy, pk=self.kwargs['pk']
@@ -32,14 +27,14 @@ class WorkflowDocumentListView(DocumentListView):
)
return super(
WorkflowDocumentListView, self
WorkflowRuntimeProxyDocumentListView, self
).dispatch(request, *args, **kwargs)
def get_document_queryset(self):
return Document.objects.filter(workflows__workflow=self.workflow)
def get_extra_context(self):
context = super(WorkflowDocumentListView, self).get_extra_context()
context = super(WorkflowRuntimeProxyDocumentListView, self).get_extra_context()
context.update(
{
'no_results_text': _(
@@ -56,14 +51,14 @@ class WorkflowDocumentListView(DocumentListView):
return context
class WorkflowListView(SingleObjectListView):
class WorkflowRuntimeProxyListView(SingleObjectListView):
object_permission = permission_workflow_view
def get_extra_context(self):
return {
'hide_object': True,
'no_results_icon': icon_workflow_list,
'no_results_main_link': link_setup_workflow_create.resolve(
'no_results_icon': icon_workflow_template_list,
'no_results_main_link': link_workflow_template_create.resolve(
context=RequestContext(request=self.request)
),
'no_results_text': _(
@@ -79,13 +74,13 @@ class WorkflowListView(SingleObjectListView):
return WorkflowRuntimeProxy.objects.all()
class WorkflowStateDocumentListView(DocumentListView):
class WorkflowRuntimeProxyStateDocumentListView(DocumentListView):
def get_document_queryset(self):
return self.get_workflow_state().get_documents()
def get_extra_context(self):
workflow_state = self.get_workflow_state()
context = super(WorkflowStateDocumentListView, self).get_extra_context()
context = super(WorkflowRuntimeProxyStateDocumentListView, self).get_extra_context()
context.update(
{
'object': workflow_state,
@@ -118,7 +113,7 @@ class WorkflowStateDocumentListView(DocumentListView):
return workflow_state
class WorkflowStateListView(SingleObjectListView):
class WorkflowRuntimeProxyStateListView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
obj=self.get_workflow(), permissions=(permission_workflow_view,),
@@ -126,14 +121,14 @@ class WorkflowStateListView(SingleObjectListView):
)
return super(
WorkflowStateListView, self
WorkflowRuntimeProxyStateListView, self
).dispatch(request, *args, **kwargs)
def get_extra_context(self):
return {
'hide_link': True,
'hide_object': True,
'no_results_main_link': link_setup_workflow_state_create.resolve(
'no_results_main_link': link_workflow_template_state_create.resolve(
context=RequestContext(
request=self.request, dict_={'object': self.get_workflow()}
)

View File

@@ -0,0 +1,326 @@
from __future__ import absolute_import, unicode_literals
from django.contrib import messages
from django.db import transaction
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.template import RequestContext
from django.urls import reverse, reverse_lazy
from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.generics import (
AddRemoveView, ConfirmView, FormView, SingleObjectCreateView,
SingleObjectDeleteView, SingleObjectDetailView,
SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView,
SingleObjectEditView, SingleObjectListView
)
from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.documents.events import event_document_type_edited
from mayan.apps.documents.models import DocumentType
from mayan.apps.documents.permissions import permission_document_type_edit
from mayan.apps.events.classes import EventType
from mayan.apps.events.models import StoredEventType
from ..classes import WorkflowAction
from ..events import event_workflow_edited
from ..forms import (
WorkflowActionSelectionForm, WorkflowForm, WorkflowPreviewForm,
WorkflowStateActionDynamicForm, WorkflowStateForm, WorkflowTransitionForm,
WorkflowTransitionTriggerEventRelationshipFormSet
)
from ..icons import (
icon_workflow_template_list, icon_workflow_state, icon_workflow_state_action,
icon_workflow_transition, icon_workflow_transition_field
)
from ..links import (
link_workflow_template_create, link_workflow_template_state_create,
link_workflow_template_state_action_selection,
link_workflow_template_transition_create,
link_workflow_template_transition_field_create,
)
from ..models import (
Workflow, WorkflowState, WorkflowStateAction, WorkflowTransition,
WorkflowTransitionField
)
from ..permissions import (
permission_workflow_create, permission_workflow_delete,
permission_workflow_edit, permission_workflow_tools,
permission_workflow_view,
)
from ..tasks import task_launch_all_workflows
class WorkflowTemplateStateActionCreateView(SingleObjectDynamicFormCreateView):
form_class = WorkflowStateActionDynamicForm
object_permission = permission_workflow_edit
def get_class(self):
try:
return WorkflowAction.get(name=self.kwargs['class_path'])
except KeyError:
raise Http404(
'{} class not found'.format(self.kwargs['class_path'])
)
def get_extra_context(self):
return {
'navigation_object_list': ('object', 'workflow'),
'object': self.get_object(),
'title': _(
'Create a "%s" workflow action'
) % self.get_class().label,
'workflow': self.get_object().workflow
}
def get_form_extra_kwargs(self):
return {
'request': self.request,
'action_path': self.kwargs['class_path']
}
def get_form_schema(self):
return self.get_class()().get_form_schema(request=self.request)
def get_instance_extra_data(self):
return {
'action_path': self.kwargs['class_path'],
'state': self.get_object()
}
def get_object(self):
return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk'])
def get_post_action_redirect(self):
return reverse(
viewname='document_states:workflow_template_state_action_list',
kwargs={'pk': self.get_object().pk}
)
class WorkflowTemplateStateActionDeleteView(SingleObjectDeleteView):
model = WorkflowStateAction
object_permission = permission_workflow_edit
def get_extra_context(self):
return {
'navigation_object_list': (
'object', 'workflow_state', 'workflow'
),
'object': self.get_object(),
'title': _('Delete workflow state action: %s') % self.get_object(),
'workflow': self.get_object().state.workflow,
'workflow_state': self.get_object().state,
}
def get_post_action_redirect(self):
return reverse(
viewname='document_states:workflow_template_state_action_list',
kwargs={'pk': self.get_object().state.pk}
)
class WorkflowTemplateStateActionEditView(SingleObjectDynamicFormEditView):
form_class = WorkflowStateActionDynamicForm
model = WorkflowStateAction
object_permission = permission_workflow_edit
def get_extra_context(self):
return {
'navigation_object_list': (
'object', 'workflow_state', 'workflow'
),
'object': self.get_object(),
'title': _('Edit workflow state action: %s') % self.get_object(),
'workflow': self.get_object().state.workflow,
'workflow_state': self.get_object().state,
}
def get_form_extra_kwargs(self):
return {
'request': self.request,
'action_path': self.get_object().action_path,
}
def get_form_schema(self):
return self.get_object().get_class_instance().get_form_schema(
request=self.request
)
def get_post_action_redirect(self):
return reverse(
viewname='document_states:workflow_template_state_action_list',
kwargs={'pk': self.get_object().state.pk}
)
class WorkflowTemplateStateActionListView(SingleObjectListView):
object_permission = permission_workflow_edit
def get_extra_context(self):
return {
'hide_object': True,
'navigation_object_list': ('object', 'workflow'),
'no_results_icon': icon_workflow_state_action,
'no_results_main_link': link_workflow_template_state_action_selection.resolve(
context=RequestContext(
request=self.request, dict_={
'object': self.get_workflow_state()
}
)
),
'no_results_text': _(
'Workflow state actions are macros that get executed when '
'documents enters or leaves the state in which they reside.'
),
'no_results_title': _(
'There are no actions for this workflow state'
),
'object': self.get_workflow_state(),
'title': _(
'Actions for workflow state: %s'
) % self.get_workflow_state(),
'workflow': self.get_workflow_state().workflow,
}
def get_form_schema(self):
return {'fields': self.get_class().fields}
def get_source_queryset(self):
return self.get_workflow_state().actions.all()
def get_workflow_state(self):
return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk'])
class WorkflowTemplateStateActionSelectionView(FormView):
form_class = WorkflowActionSelectionForm
view_permission = permission_workflow_edit
def form_valid(self, form):
klass = form.cleaned_data['klass']
return HttpResponseRedirect(
redirect_to=reverse(
viewname='document_states:workflow_template_state_action_create',
kwargs={'pk': self.get_object().pk, 'class_path': klass}
)
)
def get_extra_context(self):
return {
'navigation_object_list': (
'object', 'workflow'
),
'object': self.get_object(),
'title': _('New workflow state action selection'),
'workflow': self.get_object().workflow,
}
def get_object(self):
return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk'])
class WorkflowTemplateStateCreateView(ExternalObjectMixin, SingleObjectCreateView):
external_object_class = Workflow
external_object_permission = permission_workflow_edit
external_object_pk_url_kwarg = 'pk'
form_class = WorkflowStateForm
def get_extra_context(self):
return {
'object': self.get_workflow(),
'title': _(
'Create states for workflow: %s'
) % self.get_workflow()
}
def get_instance_extra_data(self):
return {'workflow': self.get_workflow()}
def get_source_queryset(self):
return self.get_workflow().states.all()
def get_success_url(self):
return reverse(
viewname='document_states:workflow_template_state_list',
kwargs={'pk': self.kwargs['pk']}
)
def get_workflow(self):
return self.external_object
class WorkflowTemplateStateDeleteView(SingleObjectDeleteView):
model = WorkflowState
object_permission = permission_workflow_edit
pk_url_kwarg = 'pk'
def get_extra_context(self):
return {
'navigation_object_list': ('object', 'workflow_instance'),
'object': self.get_object(),
'title': _(
'Delete workflow state: %s?'
) % self.object,
'workflow_instance': self.get_object().workflow,
}
def get_success_url(self):
return reverse(
viewname='document_states:workflow_template_state_list',
kwargs={'pk': self.get_object().workflow.pk}
)
class WorkflowTemplateStateEditView(SingleObjectEditView):
form_class = WorkflowStateForm
model = WorkflowState
object_permission = permission_workflow_edit
pk_url_kwarg = 'pk'
def get_extra_context(self):
return {
'navigation_object_list': ('object', 'workflow_instance'),
'object': self.get_object(),
'title': _(
'Edit workflow state: %s'
) % self.object,
'workflow_instance': self.get_object().workflow,
}
def get_success_url(self):
return reverse(
viewname='document_states:workflow_template_state_list',
kwargs={'pk': self.get_object().workflow.pk}
)
class WorkflowTemplateStateListView(ExternalObjectMixin, SingleObjectListView):
external_object_class = Workflow
external_object_permission = permission_workflow_view
external_object_pk_url_kwarg = 'pk'
object_permission = permission_workflow_view
def get_extra_context(self):
return {
'hide_object': True,
'no_results_icon': icon_workflow_state,
'no_results_main_link': link_workflow_template_state_create.resolve(
context=RequestContext(
self.request, {'object': self.get_workflow()}
)
),
'no_results_text': _(
'Create states and link them using transitions.'
),
'no_results_title': _(
'This workflow doesn\'t have any states'
),
'object': self.get_workflow(),
'title': _('States of workflow: %s') % self.get_workflow()
}
def get_source_queryset(self):
return self.get_workflow().states.all()
def get_workflow(self):
return self.external_object

View File

@@ -0,0 +1,372 @@
from __future__ import absolute_import, unicode_literals
from django.contrib import messages
from django.db import transaction
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.template import RequestContext
from django.urls import reverse, reverse_lazy
from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.generics import (
AddRemoveView, ConfirmView, FormView, SingleObjectCreateView,
SingleObjectDeleteView, SingleObjectDetailView,
SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView,
SingleObjectEditView, SingleObjectListView
)
from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.documents.events import event_document_type_edited
from mayan.apps.documents.models import DocumentType
from mayan.apps.documents.permissions import permission_document_type_edit
from mayan.apps.events.classes import EventType
from mayan.apps.events.models import StoredEventType
from ..classes import WorkflowAction
from ..events import event_workflow_edited
from ..forms import (
WorkflowActionSelectionForm, WorkflowForm, WorkflowPreviewForm,
WorkflowStateActionDynamicForm, WorkflowStateForm, WorkflowTransitionForm,
WorkflowTransitionTriggerEventRelationshipFormSet
)
from ..icons import (
icon_workflow_template_list, icon_workflow_state, icon_workflow_state_action,
icon_workflow_transition, icon_workflow_transition_field
)
from ..links import (
link_workflow_template_create, link_workflow_template_state_create,
link_workflow_template_state_action_selection,
link_workflow_template_transition_create,
link_workflow_template_transition_field_create,
)
from ..models import (
Workflow, WorkflowState, WorkflowStateAction, WorkflowTransition,
WorkflowTransitionField
)
from ..permissions import (
permission_workflow_create, permission_workflow_delete,
permission_workflow_edit, permission_workflow_tools,
permission_workflow_view,
)
from ..tasks import task_launch_all_workflows
class WorkflowTemplateTransitionCreateView(ExternalObjectMixin, SingleObjectCreateView):
external_object_class = Workflow
external_object_permission = permission_workflow_edit
external_object_pk_url_kwarg = 'pk'
form_class = WorkflowTransitionForm
def get_extra_context(self):
return {
'object': self.get_workflow(),
'title': _(
'Create transitions for workflow: %s'
) % self.get_workflow()
}
def get_form_kwargs(self):
kwargs = super(
WorkflowTemplateTransitionCreateView, self
).get_form_kwargs()
kwargs['workflow'] = self.get_workflow()
return kwargs
def get_instance_extra_data(self):
return {'workflow': self.get_workflow()}
def get_source_queryset(self):
return self.get_workflow().transitions.all()
def get_success_url(self):
return reverse(
viewname='document_states:workflow_template_transition_list',
kwargs={'pk': self.kwargs['pk']}
)
def get_workflow(self):
return self.external_object
class WorkflowTemplateTransitionDeleteView(SingleObjectDeleteView):
model = WorkflowTransition
object_permission = permission_workflow_edit
pk_url_kwarg = 'pk'
def get_extra_context(self):
return {
'object': self.get_object(),
'navigation_object_list': ('object', 'workflow_instance'),
'title': _(
'Delete workflow transition: %s?'
) % self.object,
'workflow_instance': self.get_object().workflow,
}
def get_success_url(self):
return reverse(
viewname='document_states:workflow_template_transition_list',
kwargs={'pk': self.get_object().workflow.pk}
)
class WorkflowTemplateTransitionEditView(SingleObjectEditView):
form_class = WorkflowTransitionForm
model = WorkflowTransition
object_permission = permission_workflow_edit
pk_url_kwarg = 'pk'
def get_extra_context(self):
return {
'navigation_object_list': ('object', 'workflow_instance'),
'object': self.get_object(),
'title': _(
'Edit workflow transition: %s'
) % self.object,
'workflow_instance': self.get_object().workflow,
}
def get_form_kwargs(self):
kwargs = super(
WorkflowTemplateTransitionEditView, self
).get_form_kwargs()
kwargs['workflow'] = self.get_object().workflow
return kwargs
def get_success_url(self):
return reverse(
viewname='document_states:workflow_template_transition_list',
kwargs={'pk': self.get_object().workflow.pk}
)
class WorkflowTemplateTransitionListView(ExternalObjectMixin, SingleObjectListView):
external_object_class = Workflow
external_object_permission = permission_workflow_view
external_object_pk_url_kwarg = 'pk'
object_permission = permission_workflow_view
def get_extra_context(self):
return {
'hide_object': True,
'no_results_icon': icon_workflow_transition,
'no_results_main_link': link_workflow_template_transition_create.resolve(
context=RequestContext(
self.request, {'object': self.get_workflow()}
)
),
'no_results_text': _(
'Create a transition and use it to move a workflow from '
' one state to another.'
),
'no_results_title': _(
'This workflow doesn\'t have any transitions'
),
'object': self.get_workflow(),
'title': _(
'Transitions of workflow: %s'
) % self.get_workflow()
}
def get_source_queryset(self):
return self.get_workflow().transitions.all()
def get_workflow(self):
return self.external_object
class WorkflowTemplateTransitionTriggerEventListView(ExternalObjectMixin, FormView):
external_object_class = WorkflowTransition
external_object_permission = permission_workflow_edit
external_object_pk_url_kwarg = 'pk'
form_class = WorkflowTransitionTriggerEventRelationshipFormSet
def dispatch(self, *args, **kwargs):
EventType.refresh()
return super(
WorkflowTemplateTransitionTriggerEventListView, self
).dispatch(*args, **kwargs)
def form_valid(self, form):
try:
for instance in form:
instance.save()
except Exception as exception:
messages.error(
message=_(
'Error updating workflow transition trigger events; %s'
) % exception, request=self.request
)
else:
messages.success(
message=_(
'Workflow transition trigger events updated successfully'
), request=self.request
)
return super(
WorkflowTemplateTransitionTriggerEventListView, self
).form_valid(form=form)
def get_extra_context(self):
return {
'form_display_mode_table': True,
'navigation_object_list': ('object', 'workflow'),
'object': self.get_object(),
'subtitle': _(
'Triggers are events that cause this transition to execute '
'automatically.'
),
'title': _(
'Workflow transition trigger events for: %s'
) % self.get_object(),
'workflow': self.get_object().workflow,
}
def get_initial(self):
obj = self.get_object()
initial = []
# Return the queryset by name from the sorted list of the class
event_type_ids = [event_type.id for event_type in EventType.all()]
event_type_queryset = StoredEventType.objects.filter(
name__in=event_type_ids
)
# Sort queryset in Python by namespace, then by label
event_type_queryset = sorted(
event_type_queryset, key=lambda x: (x.namespace, x.label)
)
for event_type in event_type_queryset:
initial.append({
'transition': obj,
'event_type': event_type,
})
return initial
def get_object(self):
return self.external_object
def get_post_action_redirect(self):
return reverse(
viewname='document_states:workflow_template_transition_list',
kwargs={'pk': self.get_object().workflow.pk}
)
class WorkflowTemplateTransitionFieldCreateView(ExternalObjectMixin, SingleObjectCreateView):
external_object_class = WorkflowTransition
external_object_permission = permission_workflow_edit
fields = (
'name', 'label', 'field_type', 'help_text', 'required', 'widget',
'widget_kwargs'
)
def get_extra_context(self):
return {
'navigation_object_list': ('transition', 'workflow'),
'transition': self.external_object,
'title': _(
'Create a field for workflow transition: %s'
) % self.external_object,
'workflow': self.external_object.workflow
}
def get_instance_extra_data(self):
return {
'transition': self.external_object,
}
def get_queryset(self):
return self.external_object.fields.all()
def get_post_action_redirect(self):
return reverse(
viewname='document_states:workflow_template_transition_field_list',
kwargs={'pk': self.external_object.pk}
)
class WorkflowTemplateTransitionFieldDeleteView(SingleObjectDeleteView):
model = WorkflowTransitionField
object_permission = permission_workflow_edit
def get_extra_context(self):
return {
'navigation_object_list': (
'object', 'workflow_transition', 'workflow'
),
'object': self.object,
'title': _('Delete workflow transition field: %s') % self.object,
'workflow': self.object.transition.workflow,
'workflow_transition': self.object.transition,
}
def get_post_action_redirect(self):
return reverse(
viewname='document_states:workflow_template_transition_field_list',
kwargs={'pk': self.object.transition.pk}
)
class WorkflowTemplateTransitionFieldEditView(SingleObjectEditView):
fields = (
'name', 'label', 'field_type', 'help_text', 'required', 'widget',
'widget_kwargs'
)
model = WorkflowTransitionField
object_permission = permission_workflow_edit
def get_extra_context(self):
return {
'navigation_object_list': (
'object', 'workflow_transition', 'workflow'
),
'object': self.object,
'title': _('Edit workflow transition field: %s') % self.object,
'workflow': self.object.transition.workflow,
'workflow_transition': self.object.transition,
}
def get_post_action_redirect(self):
return reverse(
viewname='document_states:workflow_template_transition_field_list',
kwargs={'pk': self.object.transition.pk}
)
class WorkflowTemplateTransitionFieldListView(ExternalObjectMixin, SingleObjectListView):
external_object_class = WorkflowTransition
external_object_permission = permission_workflow_edit
def get_extra_context(self):
return {
'hide_object': True,
'navigation_object_list': ('object', 'workflow'),
'no_results_icon': icon_workflow_transition_field,
'no_results_main_link': link_workflow_template_transition_field_create.resolve(
context=RequestContext(
request=self.request, dict_={
'object': self.external_object
}
)
),
'no_results_text': _(
'Workflow transition fields allow adding data to the '
'workflow\'s context. This additional context data can then '
'be used by other elements of the workflow system like the '
'workflow state actions.'
),
'no_results_title': _(
'There are no fields for this workflow transition'
),
'object': self.external_object,
'title': _(
'Fields for workflow transition: %s'
) % self.external_object,
'workflow': self.external_object.workflow,
}
def get_source_queryset(self):
return self.external_object.fields.all()

View File

@@ -0,0 +1,261 @@
from __future__ import absolute_import, unicode_literals
from django.contrib import messages
from django.db import transaction
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.template import RequestContext
from django.urls import reverse, reverse_lazy
from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.generics import (
AddRemoveView, ConfirmView, FormView, SingleObjectCreateView,
SingleObjectDeleteView, SingleObjectDetailView,
SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView,
SingleObjectEditView, SingleObjectListView
)
from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.documents.events import event_document_type_edited
from mayan.apps.documents.models import DocumentType
from mayan.apps.documents.permissions import permission_document_type_edit
from mayan.apps.events.classes import EventType
from mayan.apps.events.models import StoredEventType
from ..classes import WorkflowAction
from ..events import event_workflow_edited
from ..forms import (
WorkflowActionSelectionForm, WorkflowForm, WorkflowPreviewForm,
WorkflowStateActionDynamicForm, WorkflowStateForm, WorkflowTransitionForm,
WorkflowTransitionTriggerEventRelationshipFormSet
)
from ..icons import (
icon_workflow_template_list, icon_workflow_state, icon_workflow_state_action,
icon_workflow_transition, icon_workflow_transition_field
)
from ..links import (
link_workflow_template_create, link_workflow_template_state_create,
link_workflow_template_state_action_selection,
link_workflow_template_transition_create,
link_workflow_template_transition_field_create,
)
from ..models import (
Workflow, WorkflowState, WorkflowStateAction, WorkflowTransition,
WorkflowTransitionField
)
from ..permissions import (
permission_workflow_create, permission_workflow_delete,
permission_workflow_edit, permission_workflow_tools,
permission_workflow_view,
)
from ..tasks import task_launch_all_workflows
class DocumentTypeWorkflowTemplatesView(AddRemoveView):
main_object_permission = permission_document_type_edit
main_object_model = DocumentType
main_object_pk_url_kwarg = 'pk'
secondary_object_model = Workflow
secondary_object_permission = permission_workflow_edit
list_available_title = _('Available workflows')
list_added_title = _('Workflows assigned this document type')
related_field = 'workflows'
def get_actions_extra_kwargs(self):
return {'_user': self.request.user}
def get_extra_context(self):
return {
'object': self.main_object,
'subtitle': _(
'Removing a workflow from a document type will also '
'remove all running instances of that workflow.'
),
'title': _(
'Workflows assigned the document type: %s'
) % self.main_object,
}
def action_add(self, queryset, _user):
with transaction.atomic():
event_document_type_edited.commit(
actor=_user, target=self.main_object
)
for obj in queryset:
self.main_object.workflows.add(obj)
event_workflow_edited.commit(
action_object=self.main_object, actor=_user, target=obj
)
def action_remove(self, queryset, _user):
with transaction.atomic():
event_document_type_edited.commit(
actor=_user, target=self.main_object
)
for obj in queryset:
self.main_object.workflows.remove(obj)
event_workflow_edited.commit(
action_object=self.main_object, actor=_user,
target=obj
)
obj.instances.filter(
document__document_type=self.main_object
).delete()
class WorkflowTemplateListView(SingleObjectListView):
model = Workflow
object_permission = permission_workflow_view
def get_extra_context(self):
return {
'hide_object': True,
'no_results_icon': icon_workflow_template_list,
'no_results_main_link': link_workflow_template_create.resolve(
context=RequestContext(request=self.request)
),
'no_results_text': _(
'Workflows store a series of states and keep track of the '
'current state of a document. Transitions are used to change the '
'current state to a new one.'
),
'no_results_title': _(
'No workflows have been defined'
),
'title': _('Workflows'),
}
class WorkflowTemplateCreateView(SingleObjectCreateView):
extra_context = {'title': _('Create workflow')}
form_class = WorkflowForm
model = Workflow
post_action_redirect = reverse_lazy(
viewname='document_states:workflow_template_list'
)
view_permission = permission_workflow_create
def get_save_extra_data(self):
return {'_user': self.request.user}
class WorkflowTemplateDeleteView(SingleObjectDeleteView):
model = Workflow
object_permission = permission_workflow_delete
post_action_redirect = reverse_lazy(
viewname='document_states:workflow_template_list'
)
def get_extra_context(self):
return {
'title': _(
'Delete workflow: %s?'
) % self.object,
}
class WorkflowTemplateEditView(SingleObjectEditView):
form_class = WorkflowForm
model = Workflow
object_permission = permission_workflow_edit
post_action_redirect = reverse_lazy(
viewname='document_states:workflow_template_list'
)
def get_extra_context(self):
return {
'title': _(
'Edit workflow: %s'
) % self.object,
}
def get_save_extra_data(self):
return {'_user': self.request.user}
class WorkflowTemplateDocumentTypesView(AddRemoveView):
main_object_permission = permission_workflow_edit
main_object_model = Workflow
main_object_pk_url_kwarg = 'pk'
secondary_object_model = DocumentType
secondary_object_permission = permission_document_type_edit
list_available_title = _('Available document types')
list_added_title = _('Document types assigned this workflow')
related_field = 'document_types'
def get_actions_extra_kwargs(self):
return {'_user': self.request.user}
def get_extra_context(self):
return {
'object': self.main_object,
'subtitle': _(
'Removing a document type from a workflow will also '
'remove all running instances of that workflow for '
'documents of the document type just removed.'
),
'title': _(
'Document types assigned the workflow: %s'
) % self.main_object,
}
def action_add(self, queryset, _user):
with transaction.atomic():
event_workflow_edited.commit(
actor=_user, target=self.main_object
)
for obj in queryset:
self.main_object.document_types.add(obj)
event_document_type_edited.commit(
action_object=self.main_object, actor=_user, target=obj
)
def action_remove(self, queryset, _user):
with transaction.atomic():
event_workflow_edited.commit(
actor=_user, target=self.main_object
)
for obj in queryset:
self.main_object.document_types.remove(obj)
event_document_type_edited.commit(
action_object=self.main_object, actor=_user,
target=obj
)
self.main_object.instances.filter(
document__document_type=obj
).delete()
class WorkflowTemplatePreviewView(SingleObjectDetailView):
form_class = WorkflowPreviewForm
model = Workflow
object_permission = permission_workflow_view
pk_url_kwarg = 'pk'
def get_extra_context(self):
return {
'hide_labels': True,
'object': self.get_object(),
'title': _('Preview of: %s') % self.get_object()
}
class ToolLaunchWorkflows(ConfirmView):
extra_context = {
'title': _('Launch all workflows?'),
'subtitle': _(
'This will launch all workflows created after documents have '
'already been uploaded.'
)
}
view_permission = permission_workflow_tools
def view_action(self):
task_launch_all_workflows.apply_async()
messages.success(
message=_('Workflow launch queued successfully.'),
request=self.request
)

File diff suppressed because it is too large Load Diff

View File

@@ -139,7 +139,7 @@ class EmailActionViewTestCase(DocumentTestMixin, MailerTestMixin, WorkflowTestMi
self._create_test_user_mailer()
response = self.get(
viewname='document_states:setup_workflow_state_action_create',
viewname='document_states:workflow_template_state_action_create',
kwargs={
'pk': self.test_workflow_state.pk,
'class_path': 'mayan.apps.mailer.workflow_actions.EmailAction',
@@ -151,7 +151,7 @@ class EmailActionViewTestCase(DocumentTestMixin, MailerTestMixin, WorkflowTestMi
def _request_email_action_create_post_view(self):
return self.post(
viewname='document_states:setup_workflow_state_action_create',
viewname='document_states:workflow_template_state_action_create',
kwargs={
'pk': self.test_workflow_state.pk,
'class_path': 'mayan.apps.mailer.workflow_actions.EmailAction',

View File

@@ -39,7 +39,7 @@ class TagActionViewTestCase(WorkflowTestMixin, GenericViewTestCase):
self._create_test_workflow_state()
response = self.get(
viewname='document_states:setup_workflow_state_action_create',
viewname='document_states:workflow_template_state_action_create',
kwargs={
'pk': self.test_workflow_state.pk,
'class_path': 'mayan.apps.tags.workflow_actions.AttachTagAction'
@@ -53,7 +53,7 @@ class TagActionViewTestCase(WorkflowTestMixin, GenericViewTestCase):
self._create_test_workflow_state()
response = self.get(
viewname='document_states:setup_workflow_state_action_create',
viewname='document_states:workflow_template_state_action_create',
kwargs={
'pk': self.test_workflow_state.pk,
'class_path': 'mayan.apps.tags.workflow_actions.RemoveTagAction'