Update document states app
Change the app view namespace from 'document_states' to 'workflows'. Add missing icons. Improve view names. Split views into 3 modules: workflows views, runtime proxy views and instance views. Update views to comply with new MERCs 5 and 6. Fix failing tests. Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
@@ -22,28 +22,25 @@ from mayan.celery import app
|
||||
from .classes import WorkflowAction
|
||||
from .handlers import (
|
||||
handler_index_document, handler_launch_workflow,
|
||||
handler_trigger_transition,
|
||||
handler_trigger_transition
|
||||
)
|
||||
from .links import (
|
||||
link_document_workflow_instance_list, link_tool_launch_all_workflows,
|
||||
link_workflow_create, link_workflow_delete, link_workflow_document_types,
|
||||
link_workflow_edit, link_workflow_instance_detail,
|
||||
link_workflow_instance_transition, link_workflow_list,
|
||||
link_workflow_preview, link_workflow_runtime_proxy_document_list,
|
||||
link_workflow_runtime_proxy_list,
|
||||
link_workflow_runtime_proxy_state_document_list,
|
||||
link_workflow_runtime_proxy_state_list, link_workflow_state_action_delete,
|
||||
link_workflow_state_action_edit, link_workflow_state_action_list,
|
||||
link_workflow_state_action_selection, link_workflow_state_create,
|
||||
link_workflow_state_delete, link_workflow_state_edit,
|
||||
link_workflow_state_list, link_workflow_transition_create,
|
||||
link_workflow_transition_delete, link_workflow_transition_edit,
|
||||
link_workflow_transition_list, link_workflow_transition_triggers
|
||||
)
|
||||
from .methods import method_get_workflow
|
||||
from .links import (
|
||||
link_document_workflow_instance_list, link_setup_workflow_create,
|
||||
link_setup_workflow_delete, link_setup_workflow_document_types,
|
||||
link_setup_workflow_edit, link_setup_workflow_list,
|
||||
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_states,
|
||||
link_setup_workflow_transition_create,
|
||||
link_setup_workflow_transition_delete, link_setup_workflow_transition_edit,
|
||||
link_setup_workflow_transitions, link_tool_launch_all_workflows,
|
||||
link_workflow_document_list, link_workflow_instance_detail,
|
||||
link_workflow_instance_transition,
|
||||
link_workflow_instance_transition_events, link_workflow_list,
|
||||
link_workflow_preview, link_workflow_state_document_list,
|
||||
link_workflow_state_list
|
||||
)
|
||||
from .permissions import (
|
||||
permission_workflow_delete, permission_workflow_edit,
|
||||
permission_workflow_transition, permission_workflow_view
|
||||
@@ -53,7 +50,7 @@ from .widgets import widget_transition_events
|
||||
|
||||
|
||||
class DocumentStatesApp(MayanAppConfig):
|
||||
app_namespace = 'document_states'
|
||||
app_namespace = 'workflows'
|
||||
app_url = 'workflows'
|
||||
has_rest_api = True
|
||||
has_tests = True
|
||||
@@ -239,30 +236,30 @@ class DocumentStatesApp(MayanAppConfig):
|
||||
)
|
||||
menu_list_facet.bind_links(
|
||||
links=(
|
||||
link_setup_workflow_document_types,
|
||||
link_setup_workflow_states, link_setup_workflow_transitions,
|
||||
link_workflow_document_types,
|
||||
link_workflow_state_list, link_workflow_transition_list,
|
||||
link_workflow_preview, link_acl_list
|
||||
), sources=(Workflow,)
|
||||
)
|
||||
menu_main.bind_links(links=(link_workflow_list,), position=10)
|
||||
menu_main.bind_links(links=(link_workflow_runtime_proxy_list,), position=10)
|
||||
menu_object.bind_links(
|
||||
links=(
|
||||
link_setup_workflow_edit,
|
||||
link_setup_workflow_delete
|
||||
link_workflow_edit,
|
||||
link_workflow_delete
|
||||
), 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_state_edit,
|
||||
link_workflow_state_action_list,
|
||||
link_workflow_state_delete
|
||||
), sources=(WorkflowState,)
|
||||
)
|
||||
menu_object.bind_links(
|
||||
links=(
|
||||
link_setup_workflow_transition_edit,
|
||||
link_workflow_instance_transition_events, link_acl_list,
|
||||
link_setup_workflow_transition_delete
|
||||
link_workflow_transition_edit,
|
||||
link_workflow_transition_triggers, link_acl_list,
|
||||
link_workflow_transition_delete
|
||||
), sources=(WorkflowTransition,)
|
||||
)
|
||||
menu_object.bind_links(
|
||||
@@ -273,60 +270,60 @@ class DocumentStatesApp(MayanAppConfig):
|
||||
)
|
||||
menu_object.bind_links(
|
||||
links=(
|
||||
link_workflow_document_list, link_workflow_state_list,
|
||||
link_workflow_runtime_proxy_document_list,
|
||||
link_workflow_runtime_proxy_state_list,
|
||||
), sources=(WorkflowRuntimeProxy,)
|
||||
)
|
||||
menu_object.bind_links(
|
||||
links=(
|
||||
link_workflow_state_document_list,
|
||||
link_workflow_runtime_proxy_state_document_list,
|
||||
), sources=(WorkflowStateRuntimeProxy,)
|
||||
)
|
||||
menu_object.bind_links(
|
||||
links=(
|
||||
link_setup_workflow_state_action_edit,
|
||||
link_workflow_state_action_edit,
|
||||
link_object_error_list,
|
||||
link_setup_workflow_state_action_delete,
|
||||
link_workflow_state_action_delete,
|
||||
), sources=(WorkflowStateAction,)
|
||||
)
|
||||
|
||||
menu_secondary.bind_links(
|
||||
links=(link_setup_workflow_list, link_setup_workflow_create),
|
||||
links=(link_workflow_list, link_workflow_create),
|
||||
sources=(
|
||||
Workflow, 'document_states:setup_workflow_create',
|
||||
'document_states:setup_workflow_list'
|
||||
Workflow, 'document_states:workflow_create',
|
||||
'document_states:workflow_list'
|
||||
)
|
||||
)
|
||||
menu_secondary.bind_links(
|
||||
links=(link_workflow_list,),
|
||||
links=(link_workflow_runtime_proxy_list,),
|
||||
sources=(
|
||||
WorkflowRuntimeProxy,
|
||||
)
|
||||
)
|
||||
menu_secondary.bind_links(
|
||||
links=(link_setup_workflow_state_action_selection,),
|
||||
links=(link_workflow_state_action_selection,),
|
||||
sources=(
|
||||
WorkflowState,
|
||||
)
|
||||
)
|
||||
menu_setup.bind_links(links=(link_setup_workflow_list,))
|
||||
menu_setup.bind_links(links=(link_workflow_list,))
|
||||
menu_sidebar.bind_links(
|
||||
links=(
|
||||
link_setup_workflow_transition_create,
|
||||
link_workflow_transition_create,
|
||||
), sources=(
|
||||
WorkflowTransition,
|
||||
'document_states:setup_workflow_transition_list',
|
||||
'document_states:workflow_transition_list',
|
||||
)
|
||||
)
|
||||
menu_sidebar.bind_links(
|
||||
links=(
|
||||
link_setup_workflow_state_create,
|
||||
link_workflow_state_create,
|
||||
), sources=(
|
||||
WorkflowState,
|
||||
'document_states:setup_workflow_state_list',
|
||||
'document_states:workflow_state_list',
|
||||
)
|
||||
)
|
||||
menu_tools.bind_links(links=(link_tool_launch_all_workflows,))
|
||||
|
||||
post_save.connect(
|
||||
dispatch_uid='workflows_handler_launch_workflow',
|
||||
receiver=handler_launch_workflow, sender=Document
|
||||
|
||||
@@ -9,11 +9,42 @@ 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(driver_name='fontawesome', symbol='plus')
|
||||
icon_workflow_create = Icon(
|
||||
driver_name='fontawesome-dual', primary_symbol='sitemap',
|
||||
secondary_symbol='plus'
|
||||
)
|
||||
icon_workflow_delete = Icon(driver_name='fontawesome', symbol='times')
|
||||
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_state_action_delete = Icon(
|
||||
driver_name='fontawesome', symbol='times'
|
||||
)
|
||||
icon_workflow_state_action_edit = Icon(
|
||||
driver_name='fontawesome', symbol='pencil-alt'
|
||||
)
|
||||
icon_workflow_state_action_list = Icon(
|
||||
driver_name='fontawesome', symbol='code'
|
||||
)
|
||||
icon_workflow_state = Icon(driver_name='fontawesome', symbol='circle')
|
||||
icon_workflow_state_create = Icon(
|
||||
driver_name='fontawesome-dual', primary_symbol='circle',
|
||||
secondary_symbol='plus'
|
||||
)
|
||||
icon_workflow_state_delete = Icon(driver_name='fontawesome', symbol='times')
|
||||
icon_workflow_state_edit = Icon(driver_name='fontawesome', symbol='pencil-alt')
|
||||
icon_workflow_state_action = Icon(driver_name='fontawesome', symbol='code')
|
||||
icon_workflow_state_action_selection = Icon(
|
||||
driver_name='fontawesome-dual', primary_symbol='code',
|
||||
secondary_symbol='plus'
|
||||
)
|
||||
icon_workflow_transition = Icon(
|
||||
driver_name='fontawesome', symbol='arrows-alt-h'
|
||||
)
|
||||
icon_workflow_transition_create = Icon(
|
||||
driver_name='fontawesome-dual', primary_symbol='arrows-alt-h',
|
||||
secondary_symbol='plus'
|
||||
)
|
||||
icon_workflow_transition_delete = Icon(driver_name='fontawesome', symbol='times')
|
||||
icon_workflow_transition_edit = Icon(driver_name='fontawesome', symbol='pencil-alt')
|
||||
|
||||
@@ -6,10 +6,15 @@ from mayan.apps.documents.icons import icon_document_type
|
||||
from mayan.apps.navigation import Link
|
||||
|
||||
from .icons import (
|
||||
icon_document_workflow_instance_list, icon_setup_workflow_list,
|
||||
icon_tool_launch_all_workflows, icon_workflow_create, icon_workflow_list,
|
||||
icon_workflow_preview, icon_workflow_state, icon_workflow_state_action,
|
||||
icon_workflow_transition
|
||||
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
|
||||
)
|
||||
from .permissions import (
|
||||
permission_workflow_create, permission_workflow_delete,
|
||||
@@ -18,129 +23,166 @@ from .permissions import (
|
||||
)
|
||||
|
||||
link_document_workflow_instance_list = Link(
|
||||
args='resolved_object.pk', icon_class=icon_document_workflow_instance_list,
|
||||
icon_class=icon_document_workflow_instance_list,
|
||||
kwargs={'document_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_view,), text=_('Workflows'),
|
||||
view='document_states:document_workflow_instance_list',
|
||||
)
|
||||
link_setup_workflow_create = Link(
|
||||
icon_class=icon_workflow_create, permissions=(permission_workflow_create,),
|
||||
text=_('Create workflow'), view='document_states:setup_workflow_create'
|
||||
)
|
||||
link_setup_workflow_delete = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_delete,),
|
||||
tags='dangerous', text=_('Delete'),
|
||||
view='document_states:setup_workflow_delete',
|
||||
)
|
||||
link_setup_workflow_document_types = Link(
|
||||
args='resolved_object.pk', icon_class=icon_document_type,
|
||||
permissions=(permission_workflow_edit,), text=_('Document types'),
|
||||
view='document_states:setup_workflow_document_types',
|
||||
)
|
||||
link_setup_workflow_edit = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_edit,),
|
||||
text=_('Edit'), view='document_states:setup_workflow_edit',
|
||||
)
|
||||
link_setup_workflow_list = Link(
|
||||
icon_class=icon_setup_workflow_list,
|
||||
permissions=(permission_workflow_view,), text=_('Workflows'),
|
||||
view='document_states:setup_workflow_list'
|
||||
)
|
||||
link_setup_workflow_state_action_delete = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_edit,),
|
||||
tags='dangerous', text=_('Delete'),
|
||||
view='document_states:setup_workflow_state_action_delete',
|
||||
)
|
||||
link_setup_workflow_state_action_edit = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_edit,),
|
||||
text=_('Edit'), view='document_states:setup_workflow_state_action_edit',
|
||||
)
|
||||
link_setup_workflow_state_action_list = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_edit,),
|
||||
text=_('Actions'),
|
||||
view='document_states:setup_workflow_state_action_list',
|
||||
)
|
||||
link_setup_workflow_state_action_selection = Link(
|
||||
args='resolved_object.pk', icon_class=icon_workflow_state_action,
|
||||
permissions=(permission_workflow_edit,), text=_('Create action'),
|
||||
view='document_states:setup_workflow_state_action_selection',
|
||||
)
|
||||
link_setup_workflow_state_create = Link(
|
||||
args='resolved_object.pk', icon_class=icon_workflow_state,
|
||||
permissions=(permission_workflow_edit,), text=_('Create state'),
|
||||
view='document_states:setup_workflow_state_create',
|
||||
)
|
||||
link_setup_workflow_state_delete = Link(
|
||||
args='object.pk', permissions=(permission_workflow_edit,),
|
||||
tags='dangerous', text=_('Delete'),
|
||||
view='document_states:setup_workflow_state_delete',
|
||||
)
|
||||
link_setup_workflow_state_edit = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_edit,),
|
||||
text=_('Edit'), view='document_states:setup_workflow_state_edit',
|
||||
)
|
||||
link_setup_workflow_states = Link(
|
||||
args='resolved_object.pk', icon_class=icon_workflow_state,
|
||||
permissions=(permission_workflow_view,), text=_('States'),
|
||||
view='document_states:setup_workflow_state_list',
|
||||
)
|
||||
link_setup_workflow_transition_create = Link(
|
||||
args='resolved_object.pk', icon_class=icon_workflow_transition,
|
||||
permissions=(permission_workflow_edit,), text=_('Create transition'),
|
||||
view='document_states:setup_workflow_transition_create',
|
||||
)
|
||||
link_setup_workflow_transition_delete = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_edit,),
|
||||
tags='dangerous', text=_('Delete'),
|
||||
view='document_states:setup_workflow_transition_delete',
|
||||
)
|
||||
link_setup_workflow_transition_edit = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_edit,),
|
||||
text=_('Edit'), view='document_states:setup_workflow_transition_edit',
|
||||
)
|
||||
link_setup_workflow_transitions = Link(
|
||||
args='resolved_object.pk', icon_class=icon_workflow_transition,
|
||||
permissions=(permission_workflow_view,), text=_('Transitions'),
|
||||
view='document_states:setup_workflow_transition_list',
|
||||
view='workflows:document_workflow_instance_list'
|
||||
)
|
||||
link_tool_launch_all_workflows = Link(
|
||||
icon_class=icon_tool_launch_all_workflows,
|
||||
permissions=(permission_workflow_tools,),
|
||||
text=_('Launch all workflows'),
|
||||
view='document_states:tool_launch_all_workflows'
|
||||
view='workflows:tool_launch_all_workflows'
|
||||
)
|
||||
link_workflow_instance_detail = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_view,),
|
||||
text=_('Detail'), view='document_states:workflow_instance_detail',
|
||||
link_workflow_create = Link(
|
||||
icon_class=icon_workflow_create, permissions=(permission_workflow_create,),
|
||||
text=_('Create workflow'), view='workflows:workflow_create'
|
||||
)
|
||||
link_workflow_instance_transition = Link(
|
||||
args='resolved_object.pk', text=_('Transition'),
|
||||
view='document_states:workflow_instance_transition',
|
||||
link_workflow_delete = Link(
|
||||
icon_class=icon_workflow_delete,
|
||||
kwargs={'workflow_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_delete,), tags='dangerous',
|
||||
text=_('Delete'), view='workflows:workflow_delete'
|
||||
)
|
||||
link_workflow_document_list = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_view,),
|
||||
text=_('Workflow documents'),
|
||||
view='document_states:workflow_document_list',
|
||||
link_workflow_document_types = Link(
|
||||
icon_class=icon_document_type, kwargs={'workflow_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Document types'),
|
||||
view='workflows:workflow_document_types'
|
||||
)
|
||||
link_workflow_edit = Link(
|
||||
icon_class=icon_workflow_edit,
|
||||
kwargs={'workflow_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Edit'),
|
||||
view='workflows:workflow_edit'
|
||||
)
|
||||
link_workflow_list = Link(
|
||||
icon_class=icon_workflow_list, permissions=(permission_workflow_view,),
|
||||
text=_('Workflows'), view='document_states:workflow_list'
|
||||
)
|
||||
link_workflow_state_document_list = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_view,),
|
||||
text=_('State documents'),
|
||||
view='document_states:workflow_state_document_list',
|
||||
)
|
||||
link_workflow_state_list = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_view,),
|
||||
text=_('States'), view='document_states:workflow_state_list',
|
||||
)
|
||||
link_workflow_instance_transition_events = Link(
|
||||
args='resolved_object.pk', permissions=(permission_workflow_edit,),
|
||||
text=_('Transition triggers'),
|
||||
view='document_states:setup_workflow_transition_events'
|
||||
icon_class=icon_workflow_list,
|
||||
permissions=(permission_workflow_view,), text=_('Workflows'),
|
||||
view='workflows:workflow_list'
|
||||
)
|
||||
link_workflow_preview = Link(
|
||||
args='resolved_object.pk', icon_class=icon_workflow_preview,
|
||||
icon_class=icon_workflow_preview,
|
||||
kwargs={'workflow_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_view,), text=_('Preview'),
|
||||
view='document_states:workflow_preview'
|
||||
view='workflows:workflow_preview'
|
||||
)
|
||||
|
||||
# Workflow instances
|
||||
|
||||
link_workflow_instance_detail = Link(
|
||||
kwargs={'workflow_instance_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_view,), text=_('Detail'),
|
||||
view='workflows:workflow_instance_detail'
|
||||
)
|
||||
link_workflow_instance_transition = Link(
|
||||
kwargs={'workflow_instance_id': 'resolved_object.pk'}, text=_('Transition'),
|
||||
view='workflows:workflow_instance_transition'
|
||||
)
|
||||
|
||||
# Workflow state actions
|
||||
|
||||
link_workflow_state_action_delete = Link(
|
||||
icon_class=icon_workflow_state_action_delete,
|
||||
kwargs={'workflow_state_action_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), tags='dangerous',
|
||||
text=_('Delete'), view='workflows:workflow_state_action_delete'
|
||||
)
|
||||
link_workflow_state_action_edit = Link(
|
||||
icon_class=icon_workflow_state_action_edit,
|
||||
kwargs={'workflow_state_action_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Edit'),
|
||||
view='workflows:workflow_state_action_edit'
|
||||
)
|
||||
link_workflow_state_action_list = Link(
|
||||
icon_class=icon_workflow_state_action_list,
|
||||
kwargs={'workflow_state_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Actions'),
|
||||
view='workflows:workflow_state_action_list'
|
||||
)
|
||||
link_workflow_state_action_selection = Link(
|
||||
icon_class=icon_workflow_state_action_selection,
|
||||
kwargs={'workflow_state_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Create action'),
|
||||
view='workflows:workflow_state_action_selection'
|
||||
)
|
||||
|
||||
# Workflow states
|
||||
|
||||
link_workflow_state_create = Link(
|
||||
icon_class=icon_workflow_state_create,
|
||||
kwargs={'workflow_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Create state'),
|
||||
view='workflows:workflow_state_create'
|
||||
)
|
||||
link_workflow_state_delete = Link(
|
||||
icon_class=icon_workflow_state_delete,
|
||||
kwargs={'workflow_state_id': 'object.pk'},
|
||||
permissions=(permission_workflow_edit,), tags='dangerous', text=_('Delete'),
|
||||
view='workflows:workflow_state_delete'
|
||||
)
|
||||
link_workflow_state_edit = Link(
|
||||
icon_class=icon_workflow_state_edit,
|
||||
kwargs={'workflow_state_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Edit'),
|
||||
view='workflows:workflow_state_edit'
|
||||
)
|
||||
link_workflow_state_list = Link(
|
||||
icon_class=icon_workflow_state,
|
||||
kwargs={'workflow_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_view,), text=_('States'),
|
||||
view='workflows:workflow_state_list'
|
||||
)
|
||||
|
||||
# Workflow transitions
|
||||
|
||||
link_workflow_transition_create = Link(
|
||||
icon_class=icon_workflow_transition_create,
|
||||
kwargs={'workflow_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Create transition'),
|
||||
view='workflows:workflow_transition_create'
|
||||
)
|
||||
link_workflow_transition_delete = Link(
|
||||
icon_class=icon_workflow_transition_delete,
|
||||
kwargs={'workflow_transition_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), tags='dangerous', text=_('Delete'),
|
||||
view='workflows:workflow_transition_delete'
|
||||
)
|
||||
link_workflow_transition_edit = Link(
|
||||
icon_class=icon_workflow_transition_edit,
|
||||
kwargs={'workflow_transition_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Edit'),
|
||||
view='workflows:workflow_transition_edit'
|
||||
)
|
||||
link_workflow_transition_list = Link(
|
||||
icon_class=icon_workflow_transition,
|
||||
kwargs={'workflow_transition_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_view,), text=_('Transitions'),
|
||||
view='workflows:workflow_transition_list'
|
||||
)
|
||||
link_workflow_transition_triggers = Link(
|
||||
kwargs={'workflow_transition_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_edit,), text=_('Transition triggers'),
|
||||
view='workflows:workflow_transition_triggers'
|
||||
)
|
||||
|
||||
# Workflow runtime proxies
|
||||
|
||||
link_workflow_runtime_proxy_document_list = Link(
|
||||
kwargs={'workflow_runtime_proxy_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_view,), text=_('Workflow documents'),
|
||||
view='workflows:workflow_runtime_proxy_document_list'
|
||||
)
|
||||
link_workflow_runtime_proxy_list = Link(
|
||||
icon_class=icon_workflow_list, permissions=(permission_workflow_view,),
|
||||
text=_('Workflows'), view='workflows:workflow_runtime_proxy_list'
|
||||
)
|
||||
link_workflow_runtime_proxy_state_document_list = Link(
|
||||
kwargs={'workflow_runtime_proxy_state_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_view,), text=_('State documents'),
|
||||
view='workflows:workflow_runtime_proxy_state_document_list'
|
||||
)
|
||||
link_workflow_runtime_proxy_state_list = Link(
|
||||
kwargs={'workflow_runtime_proxy_id': 'resolved_object.pk'},
|
||||
permissions=(permission_workflow_view,), text=_('States'),
|
||||
view='workflows:workflow_runtime_proxy_state_list'
|
||||
)
|
||||
|
||||
@@ -406,7 +406,7 @@ class WorkflowInstance(models.Model):
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse(
|
||||
viewname='document_states:workflow_instance_detail',
|
||||
viewname='workflows:workflow_instance_detail',
|
||||
kwargs={'workflow_instance_id': self.pk}
|
||||
)
|
||||
|
||||
|
||||
@@ -22,14 +22,10 @@ from .literals import (
|
||||
from .mixins import WorkflowTestMixin
|
||||
|
||||
|
||||
class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
def setUp(self):
|
||||
super(DocumentStateViewTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
def _request_workflow_create_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_create', data={
|
||||
viewname='workflows:workflow_create', data={
|
||||
'label': TEST_WORKFLOW_LABEL,
|
||||
'internal_name': TEST_WORKFLOW_INTERNAL_NAME,
|
||||
}
|
||||
@@ -37,38 +33,38 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
|
||||
def test_workflow_create_view_no_permission(self):
|
||||
response = self._request_workflow_create_view()
|
||||
self.assertEquals(response.status_code, 403)
|
||||
self.assertEquals(Workflow.objects.count(), 0)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(Workflow.objects.count(), 0)
|
||||
|
||||
def test_workflow_create_view_with_permission(self):
|
||||
self.grant_permission(permission=permission_workflow_create)
|
||||
response = self._request_workflow_create_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEquals(Workflow.objects.count(), 1)
|
||||
self.assertEquals(Workflow.objects.all()[0].label, TEST_WORKFLOW_LABEL)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(Workflow.objects.count(), 1)
|
||||
self.assertEqual(Workflow.objects.all()[0].label, TEST_WORKFLOW_LABEL)
|
||||
|
||||
def _request_workflow_delete_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_delete',
|
||||
viewname='workflows:workflow_delete',
|
||||
kwargs={'workflow_id': self.workflow.pk}
|
||||
)
|
||||
|
||||
def test_workflow_delete_view_no_access(self):
|
||||
self._create_workflow()
|
||||
response = self._request_workflow_delete_view()
|
||||
self.assertEquals(response.status_code, 403)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertTrue(self.workflow in Workflow.objects.all())
|
||||
|
||||
def test_workflow_delete_view_with_access(self):
|
||||
self._create_workflow()
|
||||
self.grant_access(permission=permission_workflow_delete, obj=self.workflow)
|
||||
response = self._request_workflow_delete_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertFalse(self.workflow in Workflow.objects.all())
|
||||
|
||||
def _request_workflow_edit_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_edit',
|
||||
viewname='workflows:workflow_edit',
|
||||
kwargs={'workflow_id': self.workflow.pk},
|
||||
data={
|
||||
'label': TEST_WORKFLOW_LABEL_EDITED,
|
||||
@@ -79,7 +75,7 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
def test_workflow_edit_view_no_access(self):
|
||||
self._create_workflow()
|
||||
response = self._request_workflow_edit_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.workflow.refresh_from_db()
|
||||
self.assertEqual(self.workflow.label, TEST_WORKFLOW_LABEL)
|
||||
|
||||
@@ -87,55 +83,52 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
self._create_workflow()
|
||||
self.grant_access(permission=permission_workflow_edit, obj=self.workflow)
|
||||
response = self._request_workflow_edit_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.workflow.refresh_from_db()
|
||||
self.assertEqual(self.workflow.label, TEST_WORKFLOW_LABEL_EDITED)
|
||||
|
||||
def _request_workflow_list_view(self):
|
||||
return self.get(
|
||||
viewname='document_states:setup_workflow_list',
|
||||
viewname='workflows:workflow_list',
|
||||
)
|
||||
|
||||
def test_workflow_list_view_no_access(self):
|
||||
self._create_workflow()
|
||||
response = self._request_workflow_list_view()
|
||||
self.assertEquals(response.status_code, 200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertNotContains(response, text=self.workflow.label)
|
||||
|
||||
def test_workflow_list_view_with_access(self):
|
||||
self._create_workflow()
|
||||
self.grant_access(permission=permission_workflow_view, obj=self.workflow)
|
||||
response = self._request_workflow_list_view()
|
||||
self.assertEquals(response.status_code, 200)
|
||||
self.assertContains(response, text=self.workflow.label)
|
||||
self.assertContains(
|
||||
response=response, text=self.workflow.label, status_code=200
|
||||
)
|
||||
|
||||
def _request_workflow_preview_view(self):
|
||||
return self.get(
|
||||
viewname='document_states:workflow_preview',
|
||||
viewname='workflows:workflow_preview',
|
||||
kwargs={'workflow_id': self.workflow.pk}
|
||||
)
|
||||
|
||||
def test_workflow_preview_view_no_access(self):
|
||||
self._create_workflow()
|
||||
response = self._request_workflow_preview_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertTrue(self.workflow in Workflow.objects.all())
|
||||
|
||||
def test_workflow_preview_view_with_access(self):
|
||||
self._create_workflow()
|
||||
self.grant_access(permission=permission_workflow_view, obj=self.workflow)
|
||||
response = self._request_workflow_preview_view()
|
||||
self.assertEquals(response.status_code, 200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
def setUp(self):
|
||||
super(DocumentStateStateViewTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
def _request_workflow_state_create_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_state_create',
|
||||
viewname='workflows:workflow_state_create',
|
||||
kwargs={'workflow_id': self.workflow.pk},
|
||||
data={
|
||||
'label': TEST_WORKFLOW_STATE_LABEL,
|
||||
@@ -146,8 +139,8 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
def test_create_workflow_state_no_access(self):
|
||||
self._create_workflow()
|
||||
response = self._request_workflow_state_create_view()
|
||||
self.assertEquals(response.status_code, 403)
|
||||
self.assertEquals(WorkflowState.objects.count(), 0)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertEqual(WorkflowState.objects.count(), 0)
|
||||
|
||||
def test_create_workflow_state_with_access(self):
|
||||
self._create_workflow()
|
||||
@@ -155,19 +148,19 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
permission=permission_workflow_edit, obj=self.workflow
|
||||
)
|
||||
response = self._request_workflow_state_create_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEquals(WorkflowState.objects.count(), 1)
|
||||
self.assertEquals(
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(WorkflowState.objects.count(), 1)
|
||||
self.assertEqual(
|
||||
WorkflowState.objects.all()[0].label, TEST_WORKFLOW_STATE_LABEL
|
||||
)
|
||||
self.assertEquals(
|
||||
self.assertEqual(
|
||||
WorkflowState.objects.all()[0].completion,
|
||||
TEST_WORKFLOW_STATE_COMPLETION
|
||||
)
|
||||
|
||||
def _request_workflow_state_delete_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_state_delete',
|
||||
viewname='workflows:workflow_state_delete',
|
||||
kwargs={'workflow_state_id': self.workflow_state.pk}
|
||||
)
|
||||
|
||||
@@ -175,20 +168,20 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
response = self._request_workflow_state_delete_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
self.assertEquals(WorkflowState.objects.count(), 2)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertEqual(WorkflowState.objects.count(), 2)
|
||||
|
||||
def test_delete_workflow_state_with_access(self):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
self.grant_access(permission=permission_workflow_edit, obj=self.workflow)
|
||||
response = self._request_workflow_state_delete_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEquals(WorkflowState.objects.count(), 1)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(WorkflowState.objects.count(), 1)
|
||||
|
||||
def _request_workflow_state_edit_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_state_edit',
|
||||
viewname='workflows:workflow_state_edit',
|
||||
kwargs={'workflow_state_id': self.workflow_state.pk},
|
||||
data={
|
||||
'label': TEST_WORKFLOW_STATE_LABEL_EDITED
|
||||
@@ -199,21 +192,21 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
response = self._request_workflow_state_edit_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
self.assertEquals(self.workflow_state.label, TEST_WORKFLOW_STATE_LABEL)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertEqual(self.workflow_state.label, TEST_WORKFLOW_STATE_LABEL)
|
||||
|
||||
def test_edit_workflow_state_with_access(self):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
self.grant_access(permission=permission_workflow_edit, obj=self.workflow)
|
||||
response = self._request_workflow_state_edit_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.workflow_state.refresh_from_db()
|
||||
self.assertEquals(self.workflow_state.label, TEST_WORKFLOW_STATE_LABEL_EDITED)
|
||||
self.assertEqual(self.workflow_state.label, TEST_WORKFLOW_STATE_LABEL_EDITED)
|
||||
|
||||
def _request_workflow_state_list_view(self):
|
||||
return self.get(
|
||||
viewname='document_states:setup_workflow_state_list',
|
||||
viewname='workflows:workflow_state_list',
|
||||
kwargs={'workflow_id': self.workflow.pk}
|
||||
)
|
||||
|
||||
@@ -221,22 +214,19 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
response = self._request_workflow_state_list_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_workflow_state_list_with_access(self):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
self.grant_access(permission=permission_workflow_view, obj=self.workflow)
|
||||
response = self._request_workflow_state_list_view()
|
||||
self.assertEquals(response.status_code, 200)
|
||||
self.assertContains(response, text=self.workflow_state.label)
|
||||
self.assertContains(
|
||||
response=response, text=self.workflow_state.label, status_code=200
|
||||
)
|
||||
|
||||
|
||||
class DocumentStateToolViewTestCase(GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(DocumentStateToolViewTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
class WorkflowToolViewTestCase(GenericDocumentViewTestCase):
|
||||
def _create_workflow(self):
|
||||
self.workflow = Workflow.objects.create(label=TEST_WORKFLOW_LABEL)
|
||||
self.workflow.document_types.add(self.document_type)
|
||||
@@ -262,7 +252,7 @@ class DocumentStateToolViewTestCase(GenericDocumentViewTestCase):
|
||||
|
||||
def _request_workflow_launch_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:tool_launch_all_workflows',
|
||||
viewname='workflows:tool_launch_all_workflows',
|
||||
)
|
||||
|
||||
def test_tool_launch_all_workflows_view_no_permission(self):
|
||||
@@ -283,11 +273,7 @@ class DocumentStateToolViewTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
|
||||
class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(DocumentStateTransitionViewTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase):
|
||||
def _create_document(self):
|
||||
with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object:
|
||||
self.document_2 = self.document_type.new_document(
|
||||
@@ -296,7 +282,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
|
||||
def _request_workflow_transition_create_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_transition_create',
|
||||
viewname='workflows:workflow_transition_create',
|
||||
kwargs={'workflow_id': self.workflow.pk}, data={
|
||||
'label': TEST_WORKFLOW_TRANSITION_LABEL,
|
||||
'origin_state': self.workflow_initial_state.pk,
|
||||
@@ -308,32 +294,32 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
response = self._request_workflow_transition_create_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
self.assertEquals(WorkflowTransition.objects.count(), 0)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertEqual(WorkflowTransition.objects.count(), 0)
|
||||
|
||||
def test_create_workflow_transition_with_access(self):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
self.grant_access(permission=permission_workflow_edit, obj=self.workflow)
|
||||
response = self._request_workflow_transition_create_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEquals(WorkflowTransition.objects.count(), 1)
|
||||
self.assertEquals(
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(WorkflowTransition.objects.count(), 1)
|
||||
self.assertEqual(
|
||||
WorkflowTransition.objects.all()[0].label,
|
||||
TEST_WORKFLOW_TRANSITION_LABEL
|
||||
)
|
||||
self.assertEquals(
|
||||
self.assertEqual(
|
||||
WorkflowTransition.objects.all()[0].origin_state,
|
||||
self.workflow_initial_state
|
||||
)
|
||||
self.assertEquals(
|
||||
self.assertEqual(
|
||||
WorkflowTransition.objects.all()[0].destination_state,
|
||||
self.workflow_state
|
||||
)
|
||||
|
||||
def _request_workflow_transition_delete_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_transition_delete',
|
||||
viewname='workflows:workflow_transition_delete',
|
||||
kwargs={'workflow_transition_id': self.workflow_transition.pk}
|
||||
)
|
||||
|
||||
@@ -342,7 +328,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
self._create_workflow_states()
|
||||
self._create_workflow_transition()
|
||||
response = self._request_workflow_transition_delete_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertTrue(self.workflow_transition in WorkflowTransition.objects.all())
|
||||
|
||||
def test_delete_workflow_transition_with_access(self):
|
||||
@@ -351,12 +337,12 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
self._create_workflow_transition()
|
||||
self.grant_access(permission=permission_workflow_edit, obj=self.workflow)
|
||||
response = self._request_workflow_transition_delete_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertFalse(self.workflow_transition in WorkflowTransition.objects.all())
|
||||
|
||||
def _request_workflow_transition_edit_view(self):
|
||||
return self.post(
|
||||
viewname='document_states:setup_workflow_transition_edit',
|
||||
viewname='workflows:workflow_transition_edit',
|
||||
kwargs={'workflow_transition_id': self.workflow_transition.pk},
|
||||
data={
|
||||
'label': TEST_WORKFLOW_TRANSITION_LABEL_EDITED,
|
||||
@@ -370,7 +356,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
self._create_workflow_states()
|
||||
self._create_workflow_transition()
|
||||
response = self._request_workflow_transition_edit_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.workflow_transition.refresh_from_db()
|
||||
self.assertEqual(
|
||||
self.workflow_transition.label, TEST_WORKFLOW_TRANSITION_LABEL
|
||||
@@ -382,7 +368,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
self._create_workflow_transition()
|
||||
self.grant_access(permission=permission_workflow_edit, obj=self.workflow)
|
||||
response = self._request_workflow_transition_edit_view()
|
||||
self.assertEquals(response.status_code, 302)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.workflow_transition.refresh_from_db()
|
||||
self.assertEqual(
|
||||
self.workflow_transition.label, TEST_WORKFLOW_TRANSITION_LABEL_EDITED
|
||||
@@ -390,7 +376,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
|
||||
def _request_workflow_transition_list_view(self):
|
||||
return self.get(
|
||||
viewname='document_states:setup_workflow_transition_list',
|
||||
viewname='workflows:workflow_transition_list',
|
||||
kwargs={'workflow_id': self.workflow.pk}
|
||||
)
|
||||
|
||||
@@ -399,8 +385,9 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
self._create_workflow_states()
|
||||
self._create_workflow_transition()
|
||||
response = self._request_workflow_transition_list_view()
|
||||
self.assertEquals(response.status_code, 200)
|
||||
self.assertNotContains(response, text=self.workflow_transition.label)
|
||||
self.assertNotContains(
|
||||
response, text=self.workflow_transition.label, status_code=404
|
||||
)
|
||||
|
||||
def test_workflow_transition_list_with_access(self):
|
||||
self._create_workflow()
|
||||
@@ -408,12 +395,14 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
self._create_workflow_transition()
|
||||
self.grant_access(permission=permission_workflow_view, obj=self.workflow)
|
||||
response = self._request_workflow_transition_list_view()
|
||||
self.assertEquals(response.status_code, 200)
|
||||
self.assertContains(response, text=self.workflow_transition.label)
|
||||
self.assertContains(
|
||||
response=response, text=self.workflow_transition.label,
|
||||
status_code=200
|
||||
)
|
||||
|
||||
def _request_workflow_transition(self):
|
||||
return self.post(
|
||||
viewname='document_states:workflow_instance_transition',
|
||||
viewname='workflows:workflow_instance_transition',
|
||||
kwargs={'workflow_instance_id': self.workflow_instance.pk},
|
||||
data={
|
||||
'transition': self.workflow_transition.pk,
|
||||
@@ -432,7 +421,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
self._create_document()
|
||||
self.workflow_instance = self.document_2.workflows.first()
|
||||
response = self._request_workflow_transition()
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
# Workflow should remain in the same initial state
|
||||
self.assertEqual(
|
||||
self.workflow_instance.get_current_state(), self.workflow_initial_state
|
||||
@@ -477,28 +466,24 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
|
||||
)
|
||||
|
||||
|
||||
class DocumentStateTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(DocumentStateTransitionEventViewTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
def _request_workflow_transition_event_list_view(self):
|
||||
class WorkflowTransitionTriggerViewTestCase(WorkflowTestMixin, GenericViewTestCase):
|
||||
def _request_workflow_transition_triggers_list_view(self):
|
||||
return self.get(
|
||||
viewname='document_states:setup_workflow_transition_events',
|
||||
viewname='workflows:workflow_transition_triggers',
|
||||
kwargs={'workflow_transition_id': self.workflow_transition.pk}
|
||||
)
|
||||
|
||||
def test_workflow_transition_event_list_no_access(self):
|
||||
def test_workflow_transition_triggers_list_no_access(self):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
self._create_workflow_transition()
|
||||
response = self._request_workflow_transition_event_list_view()
|
||||
self.assertEquals(response.status_code, 404)
|
||||
response = self._request_workflow_transition_triggers_list_view()
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_workflow_transition_event_list_with_access(self):
|
||||
def test_workflow_transition_triggers_list_with_access(self):
|
||||
self._create_workflow()
|
||||
self._create_workflow_states()
|
||||
self._create_workflow_transition()
|
||||
self.grant_access(permission=permission_workflow_edit, obj=self.workflow)
|
||||
response = self._request_workflow_transition_event_list_view()
|
||||
self.assertEquals(response.status_code, 200)
|
||||
response = self._request_workflow_transition_triggers_list_view()
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -11,38 +11,37 @@ from .api_views import (
|
||||
APIWorkflowTransitionView, APIWorkflowView
|
||||
)
|
||||
from .views import (
|
||||
DocumentWorkflowInstanceListView, SetupWorkflowCreateView,
|
||||
SetupWorkflowDeleteView, SetupWorkflowDocumentTypesView,
|
||||
SetupWorkflowEditView, SetupWorkflowListView,
|
||||
SetupWorkflowStateActionCreateView, SetupWorkflowStateActionDeleteView,
|
||||
SetupWorkflowStateActionEditView, SetupWorkflowStateActionListView,
|
||||
SetupWorkflowStateActionSelectionView, SetupWorkflowStateCreateView,
|
||||
SetupWorkflowStateDeleteView, SetupWorkflowStateEditView,
|
||||
SetupWorkflowStateListView, SetupWorkflowTransitionCreateView,
|
||||
SetupWorkflowTransitionDeleteView, SetupWorkflowTransitionEditView,
|
||||
SetupWorkflowTransitionListView,
|
||||
SetupWorkflowTransitionTriggerEventListView, ToolLaunchAllWorkflows,
|
||||
WorkflowDocumentListView, WorkflowInstanceDetailView,
|
||||
DocumentWorkflowInstanceListView, ToolLaunchAllWorkflows,
|
||||
WorkflowCreateView, WorkflowDeleteView, WorkflowDocumentTypesView,
|
||||
WorkflowEditView, WorkflowInstanceDetailView,
|
||||
WorkflowInstanceTransitionView, WorkflowListView, WorkflowPreviewView,
|
||||
WorkflowStateDocumentListView, WorkflowStateListView
|
||||
WorkflowRuntimeProxyDocumentListView, WorkflowRuntimeProxyListView,
|
||||
WorkflowRuntimeProxyStateDocumentListView,
|
||||
WorkflowRuntimeProxyStateListView, WorkflowStateActionCreateView,
|
||||
WorkflowStateActionDeleteView, WorkflowStateActionEditView,
|
||||
WorkflowStateActionListView, WorkflowStateActionSelectionView,
|
||||
WorkflowStateCreateView, WorkflowStateDeleteView, WorkflowStateEditView,
|
||||
WorkflowStateListView, WorkflowTransitionCreateView,
|
||||
WorkflowTransitionDeleteView, WorkflowTransitionEditView,
|
||||
WorkflowTransitionListView, WorkflowTransitionTriggerEventListView
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
url(
|
||||
regex=r'^workflows/$', name='setup_workflow_list',
|
||||
view=SetupWorkflowListView.as_view()
|
||||
regex=r'^workflows/$', name='workflow_list',
|
||||
view=WorkflowListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/create/$', name='setup_workflow_create',
|
||||
view=SetupWorkflowCreateView.as_view()
|
||||
regex=r'^workflows/create/$', name='workflow_create',
|
||||
view=WorkflowCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/delete/$',
|
||||
name='setup_workflow_delete', view=SetupWorkflowDeleteView.as_view()
|
||||
name='workflow_delete', view=WorkflowDeleteView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/edit/$',
|
||||
name='setup_workflow_edit', view=SetupWorkflowEditView.as_view()
|
||||
name='workflow_edit', view=WorkflowEditView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/preview/$',
|
||||
@@ -50,106 +49,113 @@ urlpatterns = [
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/document_types/$',
|
||||
name='setup_workflow_document_types',
|
||||
view=SetupWorkflowDocumentTypesView.as_view()
|
||||
name='workflow_document_types',
|
||||
view=WorkflowDocumentTypesView.as_view()
|
||||
),
|
||||
|
||||
# Workflow states
|
||||
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/states/$',
|
||||
name='setup_workflow_state_list',
|
||||
view=SetupWorkflowStateListView.as_view()
|
||||
name='workflow_state_list',
|
||||
view=WorkflowStateListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/states/create/$',
|
||||
name='setup_workflow_state_create',
|
||||
view=SetupWorkflowStateCreateView.as_view()
|
||||
name='workflow_state_create',
|
||||
view=WorkflowStateCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/delete/$',
|
||||
name='setup_workflow_state_delete',
|
||||
view=SetupWorkflowStateDeleteView.as_view()
|
||||
name='workflow_state_delete',
|
||||
view=WorkflowStateDeleteView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/edit/$',
|
||||
name='setup_workflow_state_edit',
|
||||
view=SetupWorkflowStateEditView.as_view()
|
||||
name='workflow_state_edit',
|
||||
view=WorkflowStateEditView.as_view()
|
||||
),
|
||||
|
||||
# Workflow states actions
|
||||
|
||||
url(
|
||||
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/actions/$',
|
||||
name='setup_workflow_state_action_list',
|
||||
view=SetupWorkflowStateActionListView.as_view()
|
||||
name='workflow_state_action_list',
|
||||
view=WorkflowStateActionListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/actions/selection/$',
|
||||
name='setup_workflow_state_action_selection',
|
||||
view=SetupWorkflowStateActionSelectionView.as_view(),
|
||||
name='workflow_state_action_selection',
|
||||
view=WorkflowStateActionSelectionView.as_view(),
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/actions/(?P<class_path>[a-zA-Z0-9_.]+)/create/$',
|
||||
name='setup_workflow_state_action_create',
|
||||
view=SetupWorkflowStateActionCreateView.as_view()
|
||||
name='workflow_state_action_create',
|
||||
view=WorkflowStateActionCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/states/actions/(?P<workflow_state_action_id>\d+)/delete/$',
|
||||
view=SetupWorkflowStateActionDeleteView.as_view(),
|
||||
name='setup_workflow_state_action_delete'
|
||||
view=WorkflowStateActionDeleteView.as_view(),
|
||||
name='workflow_state_action_delete'
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/states/actions/(?P<workflow_state_action_id>\d+)/edit/$',
|
||||
name='setup_workflow_state_action_edit',
|
||||
view=SetupWorkflowStateActionEditView.as_view()
|
||||
name='workflow_state_action_edit',
|
||||
view=WorkflowStateActionEditView.as_view()
|
||||
),
|
||||
|
||||
# Workflow transitions
|
||||
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/transitions/$',
|
||||
name='setup_workflow_transition_list',
|
||||
view=SetupWorkflowTransitionListView.as_view()
|
||||
name='workflow_transition_list',
|
||||
view=WorkflowTransitionListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/transitions/create/$',
|
||||
name='setup_workflow_transition_create',
|
||||
view=SetupWorkflowTransitionCreateView.as_view()
|
||||
name='workflow_transition_create',
|
||||
view=WorkflowTransitionCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/transitions/(?P<workflow_transitions_id>\d+)/delete/$',
|
||||
name='setup_workflow_transition_delete',
|
||||
view=SetupWorkflowTransitionDeleteView.as_view()
|
||||
regex=r'^workflows/transitions/(?P<workflow_transition_id>\d+)/delete/$',
|
||||
name='workflow_transition_delete',
|
||||
view=WorkflowTransitionDeleteView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/transitions/(?P<workflow_transitions_id>\d+)/edit/$',
|
||||
name='setup_workflow_transition_edit',
|
||||
view=SetupWorkflowTransitionEditView.as_view()
|
||||
regex=r'^workflows/transitions/(?P<workflow_transition_id>\d+)/edit/$',
|
||||
name='workflow_transition_edit',
|
||||
view=WorkflowTransitionEditView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/transitions/events/$',
|
||||
name='setup_workflow_transition_events',
|
||||
view=SetupWorkflowTransitionTriggerEventListView.as_view()
|
||||
regex=r'^workflows/transitions/(?P<workflow_transition_id>\d+)/triggers/$',
|
||||
name='workflow_transition_triggers',
|
||||
view=WorkflowTransitionTriggerEventListView.as_view()
|
||||
),
|
||||
|
||||
# Workflow runtime proxies
|
||||
|
||||
url(
|
||||
regex=r'^workflow_instances/$', name='workflow_list',
|
||||
view=WorkflowListView.as_view()
|
||||
regex=r'^workflow_runtime_proxies/$', name='workflow_runtime_proxy_list',
|
||||
view=WorkflowRuntimeProxyListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflow_instances/(?P<workflow_id>\d+)/documents/$',
|
||||
name='setup_workflow_document_list',
|
||||
view=WorkflowDocumentListView.as_view()
|
||||
regex=r'^workflow_runtime_proxies/(?P<workflow_runtime_proxy_id>\d+)/documents/$',
|
||||
name='workflow_runtime_proxy_document_list',
|
||||
view=WorkflowRuntimeProxyDocumentListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflow_instances/(?P<workflow_id>\d+)/documents/$',
|
||||
name='workflow_document_list',
|
||||
view=WorkflowDocumentListView.as_view()
|
||||
regex=r'^workflow_runtime_proxies/(?P<workflow_runtime_proxy_id>\d+)/states/$',
|
||||
name='workflow_runtime_proxy_state_list',
|
||||
view=WorkflowRuntimeProxyStateListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflow_instances/(?P<workflow_id>\d+)/states/$',
|
||||
name='workflow_state_list', view=WorkflowStateListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^workflow_instances/states/(?P<workflow_state_id>\d+)/documents/$',
|
||||
name='workflow_state_document_list',
|
||||
view=WorkflowStateDocumentListView.as_view()
|
||||
regex=r'^workflow_runtime_proxies/states/(?P<workflow_runtime_proxy_state_id>\d+)/documents/$',
|
||||
name='workflow_runtime_proxy_state_document_list',
|
||||
view=WorkflowRuntimeProxyStateDocumentListView.as_view()
|
||||
),
|
||||
|
||||
# Workflow instances
|
||||
|
||||
url(
|
||||
regex=r'^documents/(?P<document_id>\d+)/workflows/$',
|
||||
name='document_workflow_instance_list',
|
||||
@@ -165,6 +171,9 @@ urlpatterns = [
|
||||
name='workflow_instance_transition',
|
||||
view=WorkflowInstanceTransitionView.as_view()
|
||||
),
|
||||
|
||||
# Workflow tools
|
||||
|
||||
url(
|
||||
regex=r'^tools/workflows/all/launch/$',
|
||||
name='tool_launch_all_workflows',
|
||||
|
||||
5
mayan/apps/document_states/views/__init__.py
Normal file
5
mayan/apps/document_states/views/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from .workflow_instance_views import * # NOQA
|
||||
from .workflow_proxy_views import * # NOQA
|
||||
from .workflow_views import * # NOQA
|
||||
142
mayan/apps/document_states/views/workflow_instance_views.py
Normal file
142
mayan/apps/document_states/views/workflow_instance_views.py
Normal file
@@ -0,0 +1,142 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.contrib import messages
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from mayan.apps.acls.models import AccessControlList
|
||||
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||
from mayan.apps.common.views import FormView, SingleObjectListView
|
||||
from mayan.apps.documents.models import Document
|
||||
|
||||
from ..forms import WorkflowInstanceTransitionForm
|
||||
from ..icons import icon_workflow_list
|
||||
from ..models import WorkflowInstance
|
||||
from ..permissions import (
|
||||
permission_workflow_transition, permission_workflow_view
|
||||
)
|
||||
|
||||
__all__ = (
|
||||
'DocumentWorkflowInstanceListView', 'WorkflowInstanceDetailView',
|
||||
'WorkflowInstanceTransitionView'
|
||||
)
|
||||
|
||||
|
||||
class DocumentWorkflowInstanceListView(SingleObjectListView):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_workflow_view, user=request.user,
|
||||
obj=self.get_document()
|
||||
)
|
||||
|
||||
return super(
|
||||
DocumentWorkflowInstanceListView, self
|
||||
).dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_document(self):
|
||||
return get_object_or_404(
|
||||
klass=Document, pk=self.kwargs['document_id']
|
||||
)
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'hide_object': True,
|
||||
'no_results_icon': icon_workflow_list,
|
||||
'no_results_text': _(
|
||||
'Assign workflows to the document type of this document '
|
||||
'to have this document execute those workflows. '
|
||||
),
|
||||
'no_results_title': _(
|
||||
'There are no workflow for this document'
|
||||
),
|
||||
'object': self.get_document(),
|
||||
'title': _(
|
||||
'Workflows for document: %s'
|
||||
) % self.get_document(),
|
||||
}
|
||||
|
||||
def get_object_list(self):
|
||||
return self.get_document().workflows.all()
|
||||
|
||||
|
||||
class WorkflowInstanceDetailView(SingleObjectListView):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_workflow_view, user=request.user,
|
||||
obj=self.get_workflow_instance().document
|
||||
)
|
||||
|
||||
return super(
|
||||
WorkflowInstanceDetailView, self
|
||||
).dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'hide_object': True,
|
||||
'navigation_object_list': ('object', 'workflow_instance'),
|
||||
'no_results_text': _(
|
||||
'This view will show the states changed as a workflow '
|
||||
'instance is transitioned.'
|
||||
),
|
||||
'no_results_title': _(
|
||||
'There are no details for this workflow instance'
|
||||
),
|
||||
'object': self.get_workflow_instance().document,
|
||||
'title': _('Detail of workflow: %(workflow)s') % {
|
||||
'workflow': self.get_workflow_instance()
|
||||
},
|
||||
'workflow_instance': self.get_workflow_instance(),
|
||||
}
|
||||
|
||||
def get_object_list(self):
|
||||
return self.get_workflow_instance().log_entries.order_by('-datetime')
|
||||
|
||||
def get_workflow_instance(self):
|
||||
return get_object_or_404(
|
||||
klass=WorkflowInstance, pk=self.kwargs['workflow_instance_id']
|
||||
)
|
||||
|
||||
|
||||
class WorkflowInstanceTransitionView(ExternalObjectMixin, FormView):
|
||||
external_object_class = WorkflowInstance
|
||||
external_object_permission = permission_workflow_transition
|
||||
external_object_pk_url_kwarg = 'workflow_instance_id'
|
||||
form_class = WorkflowInstanceTransitionForm
|
||||
template_name = 'appearance/generic_form.html'
|
||||
|
||||
def form_valid(self, form):
|
||||
self.get_workflow_instance().do_transition(
|
||||
comment=form.cleaned_data['comment'],
|
||||
transition=form.cleaned_data['transition'], user=self.request.user
|
||||
)
|
||||
messages.success(
|
||||
message=_(
|
||||
'Document "%s" transitioned successfully'
|
||||
) % self.get_workflow_instance().document,
|
||||
request=self.request
|
||||
)
|
||||
return HttpResponseRedirect(redirect_to=self.get_success_url())
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'navigation_object_list': ('object', 'workflow_instance'),
|
||||
'object': self.get_workflow_instance().document,
|
||||
'submit_label': _('Submit'),
|
||||
'title': _(
|
||||
'Do transition for workflow: %s'
|
||||
) % self.get_workflow_instance(),
|
||||
'workflow_instance': self.get_workflow_instance(),
|
||||
}
|
||||
|
||||
def get_form_extra_kwargs(self):
|
||||
return {
|
||||
'user': self.request.user,
|
||||
'workflow_instance': self.get_workflow_instance()
|
||||
}
|
||||
|
||||
def get_success_url(self):
|
||||
return self.get_workflow_instance().get_absolute_url()
|
||||
|
||||
def get_workflow_instance(self):
|
||||
return self.get_external_object()
|
||||
151
mayan/apps/document_states/views/workflow_proxy_views.py
Normal file
151
mayan/apps/document_states/views/workflow_proxy_views.py
Normal file
@@ -0,0 +1,151 @@
|
||||
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 _
|
||||
|
||||
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||
from mayan.apps.common.views 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_workflow_create, link_workflow_state_create
|
||||
from ..models import WorkflowRuntimeProxy, WorkflowStateRuntimeProxy
|
||||
from ..permissions import permission_workflow_view
|
||||
|
||||
__all__ = (
|
||||
'WorkflowRuntimeProxyDocumentListView', 'WorkflowRuntimeProxyListView',
|
||||
'WorkflowRuntimeProxyStateDocumentListView',
|
||||
'WorkflowRuntimeProxyStateListView'
|
||||
)
|
||||
|
||||
|
||||
class WorkflowRuntimeProxyDocumentListView(ExternalObjectMixin, DocumentListView):
|
||||
external_object_class = WorkflowRuntimeProxy
|
||||
external_object_permission = permission_workflow_view
|
||||
external_object_pk_url_kwarg = 'workflow_runtime_proxy_id'
|
||||
|
||||
def get_document_queryset(self):
|
||||
return Document.objects.filter(workflows__workflow=self.get_workflow())
|
||||
|
||||
def get_extra_context(self):
|
||||
context = super(WorkflowRuntimeProxyDocumentListView, self).get_extra_context()
|
||||
context.update(
|
||||
{
|
||||
'no_results_text': _(
|
||||
'Associate a workflow with some document types and '
|
||||
'documents of those types will be listed in this view.'
|
||||
),
|
||||
'no_results_title': _(
|
||||
'There are no documents executing this workflow'
|
||||
),
|
||||
'object': self.get_workflow(),
|
||||
'title': _('Documents with the workflow: %s') % self.get_workflow()
|
||||
}
|
||||
)
|
||||
return context
|
||||
|
||||
def get_workflow(self):
|
||||
return self.get_external_object()
|
||||
|
||||
|
||||
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_workflow_create.resolve(
|
||||
context=RequestContext(
|
||||
self.request, {}
|
||||
)
|
||||
),
|
||||
'no_results_text': _(
|
||||
'Create some workflows and associated them with a document '
|
||||
'type. Active workflows will be shown here and the documents '
|
||||
'for which they are executing.'
|
||||
),
|
||||
'no_results_title': _('There are no workflows'),
|
||||
'title': _('Workflows'),
|
||||
}
|
||||
|
||||
def get_object_list(self):
|
||||
return WorkflowRuntimeProxy.objects.all()
|
||||
|
||||
|
||||
class WorkflowRuntimeProxyStateDocumentListView(ExternalObjectMixin, DocumentListView):
|
||||
external_object_class = WorkflowRuntimeProxy
|
||||
external_object_permission = permission_workflow_view
|
||||
external_object_pk_url_kwarg = 'workflow_runtime_proxy_id'
|
||||
|
||||
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(WorkflowRuntimeProxyStateDocumentListView, self).get_extra_context()
|
||||
context.update(
|
||||
{
|
||||
'object': workflow_state,
|
||||
'navigation_object_list': ('object', 'workflow'),
|
||||
'no_results_title': _(
|
||||
'There are documents in this workflow state'
|
||||
),
|
||||
'title': _(
|
||||
'Documents in the workflow "%s", state "%s"'
|
||||
) % (
|
||||
workflow_state.workflow, workflow_state
|
||||
),
|
||||
'workflow': WorkflowRuntimeProxy.objects.get(
|
||||
pk=workflow_state.workflow.pk
|
||||
),
|
||||
}
|
||||
)
|
||||
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()
|
||||
|
||||
|
||||
class WorkflowRuntimeProxyStateListView(ExternalObjectMixin, SingleObjectListView):
|
||||
external_object_class = WorkflowRuntimeProxy
|
||||
external_object_permission = permission_workflow_view
|
||||
external_object_pk_url_kwarg = 'workflow_runtime_proxy_id'
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'hide_columns': True,
|
||||
'hide_link': True,
|
||||
'no_results_main_link': link_workflow_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 state'
|
||||
),
|
||||
'object': self.get_workflow(),
|
||||
'title': _('States of workflow: %s') % self.get_workflow()
|
||||
}
|
||||
|
||||
def get_object_list(self):
|
||||
return WorkflowStateRuntimeProxy.objects.filter(
|
||||
workflow=self.get_workflow()
|
||||
)
|
||||
|
||||
def get_workflow(self):
|
||||
return self.get_external_object()
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user