automatically tests all Mayan apps that report to have tests. Change the app flag that indicates when an app has test from 'test' to the more explicit 'has_test'. Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
215 lines
7.3 KiB
Python
215 lines
7.3 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from django.apps import apps
|
|
from django.db.models.signals import post_save
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from kombu import Exchange, Queue
|
|
|
|
from acls import ModelPermission
|
|
from acls.links import link_acl_list
|
|
from common import (
|
|
MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary,
|
|
menu_setup, menu_sidebar, menu_tools
|
|
)
|
|
from common.widgets import two_state_template
|
|
from mayan.celery import app
|
|
from navigation import SourceColumn
|
|
from rest_api.classes import APIEndPoint
|
|
|
|
from .handlers import launch_workflow
|
|
from .links import (
|
|
link_document_workflow_instance_list, 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_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_tool_launch_all_workflows, link_workflow_instance_detail,
|
|
link_workflow_instance_transition, link_workflow_document_list,
|
|
link_workflow_list, link_workflow_state_document_list,
|
|
link_workflow_state_list
|
|
)
|
|
from .permissions import permission_workflow_transition
|
|
|
|
|
|
class DocumentStatesApp(MayanAppConfig):
|
|
app_url = 'states'
|
|
has_tests = True
|
|
name = 'document_states'
|
|
verbose_name = _('Document states')
|
|
|
|
def ready(self):
|
|
super(DocumentStatesApp, self).ready()
|
|
|
|
APIEndPoint(app=self, version_string='1')
|
|
|
|
Document = apps.get_model(
|
|
app_label='documents', model_name='Document'
|
|
)
|
|
|
|
Workflow = self.get_model('Workflow')
|
|
WorkflowInstance = self.get_model('WorkflowInstance')
|
|
WorkflowInstanceLogEntry = self.get_model('WorkflowInstanceLogEntry')
|
|
WorkflowRuntimeProxy = self.get_model('WorkflowRuntimeProxy')
|
|
WorkflowState = self.get_model('WorkflowState')
|
|
WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy')
|
|
WorkflowTransition = self.get_model('WorkflowTransition')
|
|
|
|
ModelPermission.register(
|
|
model=Workflow, permissions=(permission_workflow_transition,)
|
|
)
|
|
|
|
ModelPermission.register(
|
|
model=WorkflowTransition,
|
|
permissions=(permission_workflow_transition,)
|
|
)
|
|
|
|
SourceColumn(
|
|
source=Workflow, label=_('Initial state'),
|
|
func=lambda context: context['object'].get_initial_state() or _('None')
|
|
)
|
|
|
|
SourceColumn(
|
|
source=WorkflowInstance, label=_('Current state'),
|
|
attribute='get_current_state'
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowInstance, label=_('User'),
|
|
func=lambda context: getattr(
|
|
context['object'].get_last_log_entry(), 'user', _('None')
|
|
)
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowInstance, label=_('Last transition'),
|
|
attribute='get_last_transition'
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowInstance, label=_('Date and time'),
|
|
func=lambda context: getattr(
|
|
context['object'].get_last_log_entry(), 'datetime', _('None')
|
|
)
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowInstance, label=_('Completion'),
|
|
func=lambda context: getattr(
|
|
context['object'].get_current_state(), 'completion', _('None')
|
|
)
|
|
)
|
|
|
|
SourceColumn(
|
|
source=WorkflowInstanceLogEntry, label=_('Date and time'),
|
|
attribute='datetime'
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowInstanceLogEntry, label=_('User'), attribute='user'
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowInstanceLogEntry, label=_('Transition'),
|
|
attribute='transition'
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowInstanceLogEntry, label=_('Comment'),
|
|
attribute='comment'
|
|
)
|
|
|
|
SourceColumn(
|
|
source=WorkflowState, label=_('Is initial state?'),
|
|
func=lambda context: two_state_template(context['object'].initial)
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowState, label=_('Completion'), attribute='completion'
|
|
)
|
|
|
|
SourceColumn(
|
|
source=WorkflowTransition, label=_('Origin state'),
|
|
attribute='origin_state'
|
|
)
|
|
SourceColumn(
|
|
source=WorkflowTransition, label=_('Destination state'),
|
|
attribute='destination_state'
|
|
)
|
|
|
|
app.conf.CELERY_QUEUES.extend(
|
|
(
|
|
Queue(
|
|
'document_states', Exchange('document_states'),
|
|
routing_key='converter'
|
|
),
|
|
)
|
|
)
|
|
|
|
app.conf.CELERY_ROUTES.update(
|
|
{
|
|
'document_states.tasks.task_launch_all_workflows': {
|
|
'queue': 'document_states'
|
|
},
|
|
}
|
|
)
|
|
|
|
menu_facet.bind_links(
|
|
links=(link_document_workflow_instance_list,), sources=(Document,)
|
|
)
|
|
menu_main.bind_links(links=(link_workflow_list,), position=10)
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_setup_workflow_states, link_setup_workflow_transitions,
|
|
link_setup_workflow_document_types, link_setup_workflow_edit,
|
|
link_acl_list, link_setup_workflow_delete
|
|
), sources=(Workflow,)
|
|
)
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_setup_workflow_state_edit,
|
|
link_setup_workflow_state_delete
|
|
), sources=(WorkflowState,)
|
|
)
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_setup_workflow_transition_edit, link_acl_list,
|
|
link_setup_workflow_transition_delete
|
|
), sources=(WorkflowTransition,)
|
|
)
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_workflow_instance_detail,
|
|
link_workflow_instance_transition
|
|
), sources=(WorkflowInstance,)
|
|
)
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_workflow_document_list, link_workflow_state_list,
|
|
), sources=(WorkflowRuntimeProxy,)
|
|
)
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_workflow_state_document_list,
|
|
), sources=(WorkflowStateRuntimeProxy,)
|
|
)
|
|
menu_secondary.bind_links(
|
|
links=(link_setup_workflow_list, link_setup_workflow_create),
|
|
sources=(
|
|
Workflow, 'document_states:setup_workflow_create',
|
|
'document_states:setup_workflow_list'
|
|
)
|
|
)
|
|
menu_secondary.bind_links(
|
|
links=(link_workflow_list,),
|
|
sources=(
|
|
WorkflowRuntimeProxy,
|
|
)
|
|
)
|
|
menu_setup.bind_links(links=(link_setup_workflow_list,))
|
|
menu_sidebar.bind_links(
|
|
links=(
|
|
link_setup_workflow_state_create,
|
|
link_setup_workflow_transition_create
|
|
), sources=(Workflow,)
|
|
)
|
|
menu_tools.bind_links(links=(link_tool_launch_all_workflows,))
|
|
|
|
post_save.connect(
|
|
launch_workflow, dispatch_uid='launch_workflow', sender=Document
|
|
)
|