Add support for workflow transition triggers.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-03 04:01:11 -04:00
parent 4560009927
commit 81f481fadf
14 changed files with 359 additions and 22 deletions

View File

@@ -14,14 +14,16 @@ from common.views import (
)
from documents.models import Document
from documents.views import DocumentListView
from events.classes import Event
from events.models import EventType
from .forms import (
WorkflowForm, WorkflowInstanceTransitionForm, WorkflowStateForm,
WorkflowTransitionForm
WorkflowTransitionForm, WorkflowTransitionTriggerEventRelationshipFormSet
)
from .models import (
Workflow, WorkflowInstance, WorkflowState, WorkflowTransition,
WorkflowRuntimeProxy, WorkflowStateRuntimeProxy
WorkflowRuntimeProxy, WorkflowStateRuntimeProxy,
)
from .permissions import (
permission_workflow_create, permission_workflow_delete,
@@ -507,6 +509,79 @@ class WorkflowStateListView(SingleObjectListView):
return get_object_or_404(WorkflowRuntimeProxy, pk=self.kwargs['pk'])
class SetupWorkflowTransitionTriggerEventListView(FormView):
form_class = WorkflowTransitionTriggerEventRelationshipFormSet
submodel = EventType
def dispatch(self, *args, **kwargs):
AccessControlList.objects.check_access(
permissions=permission_workflow_edit,
user=self.request.user, obj=self.get_object().workflow
)
Event.refresh()
return super(
SetupWorkflowTransitionTriggerEventListView, self
).dispatch(*args, **kwargs)
def form_valid(self, form):
try:
for instance in form:
instance.save()
except Exception as exception:
messages.error(
self.request,
_(
'Error updating workflow transition trigger events; %s'
) % exception
)
else:
messages.success(
self.request, _(
'Workflow transition trigger events updated successfully'
)
)
return super(
SetupWorkflowTransitionTriggerEventListView, self
).form_valid(form=form)
def get_object(self):
return get_object_or_404(WorkflowTransition, pk=self.kwargs['pk'])
def get_extra_context(self):
return {
'form_display_mode_table': True,
'navigation_object_list': ('object', 'workflow'),
'object': self.get_object(),
'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.name for event_type in Event.all()]
event_type_queryset = EventType.objects.filter(name__in=event_type_ids)
for event_type in event_type_queryset:
initial.append({
'transition': obj,
'event_type': event_type,
})
return initial
def get_post_action_redirect(self):
return reverse(
'document_states:setup_workflow_transitions',
args=(self.get_object().workflow.pk,)
)
class ToolLaunchAllWorkflows(ConfirmView):
extra_context = {
'title': _('Launch all workflows?')