From 32250a5cea958b82d0f48186b35477aa796cbd90 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 17 Jan 2015 01:56:05 -0400 Subject: [PATCH] Add workflow state and transition edit views --- mayan/apps/document_states/__init__.py | 9 ++-- mayan/apps/document_states/links.py | 9 +++- mayan/apps/document_states/urls.py | 12 +++-- mayan/apps/document_states/views.py | 66 ++++++++++++++++++++++++-- 4 files changed, 82 insertions(+), 14 deletions(-) diff --git a/mayan/apps/document_states/__init__.py b/mayan/apps/document_states/__init__.py index 502e8d39ba..da130de102 100644 --- a/mayan/apps/document_states/__init__.py +++ b/mayan/apps/document_states/__init__.py @@ -17,8 +17,9 @@ from .links import ( link_document_workflow_instance_list, link_setup_workflow_create, link_setup_workflow_delete, link_setup_workflow_edit, link_setup_workflow_list, link_setup_workflow_states, - link_setup_workflow_states_create, link_setup_workflow_transitions, - link_setup_workflow_transitions_create, link_setup_workflow_document_types, + link_setup_workflow_state_create, link_setup_workflow_state_edit, + link_setup_workflow_transitions, link_setup_workflow_transition_create, + link_setup_workflow_transition_edit, link_setup_workflow_document_types, link_workflow_instance_detail, link_workflow_instance_transition ) @@ -86,4 +87,6 @@ register_links([Document], [link_document_workflow_instance_list], menu_name='fo register_links([WorkflowInstance], [link_workflow_instance_detail, link_workflow_instance_transition]) register_links([Workflow, 'document_states:setup_workflow_create', 'document_states:setup_workflow_list'], [link_setup_workflow_list, link_setup_workflow_create], menu_name='secondary_menu') register_links([Workflow], [link_setup_workflow_states, link_setup_workflow_transitions, link_setup_workflow_document_types, link_setup_workflow_edit, link_setup_workflow_delete]) -register_links([Workflow], [link_setup_workflow_states_create, link_setup_workflow_transitions_create], menu_name='sidebar') +register_links([Workflow], [link_setup_workflow_state_create, link_setup_workflow_transition_create], menu_name='sidebar') +register_links([WorkflowState], [link_setup_workflow_state_edit]) +register_links([WorkflowTransition], [link_setup_workflow_transition_edit]) diff --git a/mayan/apps/document_states/links.py b/mayan/apps/document_states/links.py index 7e48ccdc30..8e132c2b92 100644 --- a/mayan/apps/document_states/links.py +++ b/mayan/apps/document_states/links.py @@ -8,13 +8,18 @@ link_setup_workflow_delete = {'text': _('Delete'), 'view': 'document_states:setu link_setup_workflow_edit = {'text': _('Edit'), 'view': 'document_states:setup_workflow_edit', 'args': 'object.pk', 'famfam': 'table_edit'} link_setup_workflow_states = {'text': _('States'), 'view': 'document_states:setup_workflow_states', 'args': 'object.pk', 'famfam': 'style'} -link_setup_workflow_states_create = {'text': _('Create state'), 'view': 'document_states:setup_workflow_states_create', 'args': 'object.pk', 'famfam': 'style_add'} +link_setup_workflow_state_create = {'text': _('Create state'), 'view': 'document_states:setup_workflow_state_create', 'args': 'object.pk', 'famfam': 'style_add'} +link_setup_workflow_state_edit = {'text': _('Edit'), 'view': 'document_states:setup_workflow_state_edit', 'args': 'object.pk', 'famfam': 'pencil'} link_setup_workflow_transitions = {'text': _('Transitions'), 'view': 'document_states:setup_workflow_transitions', 'args': 'object.pk', 'famfam': 'lightning'} -link_setup_workflow_transitions_create = {'text': _('Create transition'), 'view': 'document_states:setup_workflow_transitions_create', 'args': 'object.pk', 'famfam': 'lightning_add'} +link_setup_workflow_transition_create = {'text': _('Create transition'), 'view': 'document_states:setup_workflow_transition_create', 'args': 'object.pk', 'famfam': 'lightning_add'} +link_setup_workflow_transition_edit = {'text': _('Edit'), 'view': 'document_states:setup_workflow_transition_edit', 'args': 'object.pk', 'famfam': 'pencil'} link_setup_workflow_document_types = {'text': _('Document types'), 'view': 'document_states:setup_workflow_document_types', 'args': 'object.pk', 'famfam': 'layout'} link_document_workflow_instance_list = {'text': _('Workflows'), 'view': 'document_states:document_workflow_instance_list', 'args': 'object.pk', 'famfam': 'table'} link_workflow_instance_detail = {'text': _('Detail'), 'view': 'document_states:workflow_instance_detail', 'args': 'workflow_instance.pk', 'famfam': 'table'} link_workflow_instance_transition = {'text': _('Transition'), 'view': 'document_states:workflow_instance_transition', 'args': 'workflow_instance.pk', 'famfam': 'table_lightning'} + + + diff --git a/mayan/apps/document_states/urls.py b/mayan/apps/document_states/urls.py index c881e26c1c..542a002d01 100644 --- a/mayan/apps/document_states/urls.py +++ b/mayan/apps/document_states/urls.py @@ -3,8 +3,9 @@ from django.conf.urls import patterns, url from .views import ( SetupWorkflowCreateView, SetupWorkflowDeleteView, SetupWorkflowEditView, SetupWorkflowListView, SetupWorkflowStateListView, - SetupWorkflowStateCreateView, SetupWorkflowTransitionListView, - SetupWorkflowTransitionCreateView, DocumentWorkflowInstanceListView, + SetupWorkflowStateCreateView, SetupWorkflowStateEditView, + SetupWorkflowTransitionListView, SetupWorkflowTransitionCreateView, + SetupWorkflowTransitionEditView, DocumentWorkflowInstanceListView, WorkflowInstanceDetailView, WorkflowInstanceTransitionView ) @@ -14,10 +15,13 @@ urlpatterns = patterns('', url(r'^setup/(?P\d+)/edit/$', SetupWorkflowEditView.as_view(), name='setup_workflow_edit'), url(r'^setup/(?P\d+)/delete/$', SetupWorkflowDeleteView.as_view(), name='setup_workflow_delete'), url(r'^setup/(?P\d+)/states/$', SetupWorkflowStateListView.as_view(), name='setup_workflow_states'), - url(r'^setup/(?P\d+)/states/create/$', SetupWorkflowStateCreateView.as_view(), name='setup_workflow_states_create'), + url(r'^setup/(?P\d+)/states/create/$', SetupWorkflowStateCreateView.as_view(), name='setup_workflow_state_create'), + + url(r'^setup/workflow/state/(?P\d+)/edit/$', SetupWorkflowStateEditView.as_view(), name='setup_workflow_state_edit'), url(r'^setup/(?P\d+)/transitions/$', SetupWorkflowTransitionListView.as_view(), name='setup_workflow_transitions'), - url(r'^setup/(?P\d+)/transitions/create/$', SetupWorkflowTransitionCreateView.as_view(), name='setup_workflow_transitions_create'), + url(r'^setup/(?P\d+)/transitions/create/$', SetupWorkflowTransitionCreateView.as_view(), name='setup_workflow_transition_create'), + url(r'^setup/workflow/transitions/(?P\d+)/edit/$', SetupWorkflowTransitionEditView.as_view(), name='setup_workflow_transition_edit'), url(r'^document/(?P\d+)/workflows/$', DocumentWorkflowInstanceListView.as_view(), name='document_workflow_instance_list'), url(r'^document/workflows/(?P\d+)/$', WorkflowInstanceDetailView.as_view(), name='workflow_instance_detail'), diff --git a/mayan/apps/document_states/views.py b/mayan/apps/document_states/views.py index facbda94ac..87f659f2af 100644 --- a/mayan/apps/document_states/views.py +++ b/mayan/apps/document_states/views.py @@ -26,7 +26,7 @@ from .forms import ( WorkflowInstanceDetailForm, WorkflowInstanceTransitionForm, WorkflowStateForm, WorkflowTransitionForm ) -from .models import Workflow, WorkflowInstance +from .models import Workflow, WorkflowInstance, WorkflowState, WorkflowTransition from .permissions import ( PERMISSION_WORKFLOW_CREATE, PERMISSION_WORKFLOW_DELETE, PERMISSION_WORKFLOW_EDIT, PERMISSION_WORKFLOW_VIEW, @@ -151,8 +151,8 @@ class WorkflowInstanceTransitionView(FormView): 'object': self.get_workflow_instance().document, 'workflow_instance': self.get_workflow_instance(), 'navigation_object_list': [ - {'object': 'object', 'name': _('Index')}, - {'object': 'workflow_instance', 'name': _('Node')} + {'object': 'object'}, + {'object': 'workflow_instance'} ], 'title': _('Do transition for workflow: %s') % self.get_workflow_instance(), 'submit_label': _('Submit'), @@ -186,13 +186,13 @@ class SetupWorkflowCreateView(SingleObjectCreateView): class SetupWorkflowEditView(SingleObjectEditView): form_class = WorkflowForm model = Workflow - object_permission = PERMISSION_WORKFLOW_EDIT + view_permission = PERMISSION_WORKFLOW_EDIT success_url = reverse_lazy('document_states:setup_workflow_list') class SetupWorkflowDeleteView(SingleObjectDeleteView): model = Workflow - object_permission = PERMISSION_WORKFLOW_DELETE + view_permission = PERMISSION_WORKFLOW_DELETE success_url = reverse_lazy('document_states:setup_workflow_list') @@ -263,8 +263,34 @@ class SetupWorkflowStateCreateView(SingleObjectCreateView): return super(SetupWorkflowStateCreateView, self).form_valid(form) +class SetupWorkflowStateEditView(SingleObjectEditView): + form_class = WorkflowStateForm + model = WorkflowState + view_permission = PERMISSION_WORKFLOW_EDIT + + def get_context_data(self, **kwargs): + context = super(SetupWorkflowStateEditView, self).get_context_data(**kwargs) + + context.update( + { + 'object': self.get_object().workflow, + 'workflow_instance': self.get_object(), + 'navigation_object_list': [ + {'object': 'object'}, + {'object': 'workflow_instance'} + ], + } + ) + + return context + + def get_success_url(self): + return reverse('document_states:setup_workflow_states', args=[self.get_object().workflow.pk]) + + # Transitions + class SetupWorkflowTransitionListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): try: @@ -340,6 +366,36 @@ class SetupWorkflowTransitionCreateView(SingleObjectCreateView): return HttpResponseRedirect(self.get_success_url()) +class SetupWorkflowTransitionEditView(SingleObjectEditView): + form_class = WorkflowTransitionForm + model = WorkflowTransition + view_permission = PERMISSION_WORKFLOW_EDIT + + def get_context_data(self, **kwargs): + context = super(SetupWorkflowTransitionEditView, self).get_context_data(**kwargs) + + context.update( + { + 'object': self.get_object().workflow, + 'workflow_instance': self.get_object(), + 'navigation_object_list': [ + {'object': 'object'}, + {'object': 'workflow_instance'} + ], + } + ) + + return context + + def get_form_kwargs(self): + kwargs = super(SetupWorkflowTransitionEditView, self).get_form_kwargs() + kwargs['workflow'] = self.get_object().workflow + return kwargs + + def get_success_url(self): + return reverse('document_states:setup_workflow_transitions', args=[self.get_object().workflow.pk]) + + def setup_workflow_document_types(request, pk): workflow = get_object_or_404(Workflow, pk=pk)