diff --git a/apps/workflows/__init__.py b/apps/workflows/__init__.py index 83d2e6dfe3..8474e43709 100644 --- a/apps/workflows/__init__.py +++ b/apps/workflows/__init__.py @@ -10,28 +10,32 @@ from .permissions import (PERMISSION_WORKFLOW_SETUP_VIEW, PERMISSION_WORKFLOW_SETUP_DELETE, PERMISSION_STATE_SETUP_VIEW, PERMISSION_STATE_SETUP_CREATE, PERMISSION_STATE_SETUP_EDIT, PERMISSION_STATE_SETUP_DELETE) -from .models import Workflow, State, Transition +from .models import Workflow, State, Transition, WorkflowState setup_workflow_link = {'text': _(u'workflows'), 'view': 'setup_workflow_list', 'icon': 'chart_organisation.png', 'permissions': [PERMISSION_WORKFLOW_SETUP_VIEW]} setup_workflow_list_link = {'text': _(u'workflow list'), 'view': 'setup_workflow_list', 'famfam': 'chart_organisation', 'permissions': [PERMISSION_WORKFLOW_SETUP_VIEW]} -setup_workflow_create_link = {'text': _(u'create new'), 'view': 'setup_workflow_create', 'famfam': 'chart_organisation_add', 'permissions': [PERMISSION_WORKFLOW_SETUP_CREATE]} -setup_workflow_edit_link = {'text': _(u'edit'), 'view': 'setup_workflow_edit', 'args': 'object.pk', 'famfam': 'chart_organisation', 'permissions': [PERMISSION_WORKFLOW_SETUP_EDIT]} -setup_workflow_delete_link = {'text': _(u'delete'), 'view': 'setup_workflow_delete', 'args': 'object.pk', 'famfam': 'chart_organisation_delete', 'permissions': [PERMISSION_WORKFLOW_SETUP_DELETE]} -setup_workflow_states_list_link = {'text': _(u'states'), 'view': 'setup_workflow_states_list', 'args': 'object.pk', 'famfam': 'transmit_go', 'permissions': [PERMISSION_WORKFLOW_SETUP_EDIT]} +setup_workflow_create_link = {'text': _(u'create new workflow'), 'view': 'setup_workflow_create', 'famfam': 'chart_organisation_add', 'permissions': [PERMISSION_WORKFLOW_SETUP_CREATE]} +setup_workflow_edit_link = {'text': _(u'edit'), 'view': 'setup_workflow_edit', 'args': 'workflow.pk', 'famfam': 'chart_organisation', 'permissions': [PERMISSION_WORKFLOW_SETUP_EDIT]} +setup_workflow_delete_link = {'text': _(u'delete'), 'view': 'setup_workflow_delete', 'args': 'workflow.pk', 'famfam': 'chart_organisation_delete', 'permissions': [PERMISSION_WORKFLOW_SETUP_DELETE]} +setup_workflow_states_list_link = {'text': _(u'states'), 'view': 'setup_workflow_states_list', 'args': 'workflow.pk', 'famfam': 'transmit_go', 'permissions': [PERMISSION_WORKFLOW_SETUP_EDIT]} +setup_workflow_states_add_link = {'text': _(u'add state'), 'view': 'setup_workflow_state_add', 'args': 'workflow.pk', 'famfam': 'transmit_add', 'permissions': [PERMISSION_WORKFLOW_SETUP_EDIT]} +setup_workflow_states_edit_link = {'text': _(u'edit state'), 'view': 'setup_workflow_state_edit', 'args': 'workflow_state.pk', 'famfam': 'transmit_edit', 'permissions': [PERMISSION_WORKFLOW_SETUP_EDIT]} setup_state_list_link = {'text': _(u'state list'), 'view': 'setup_state_list', 'famfam': 'transmit', 'permissions': [PERMISSION_STATE_SETUP_VIEW]} -setup_state_create_link = {'text': _(u'create new'), 'view': 'setup_state_create', 'famfam': 'transmit_add', 'permissions': [PERMISSION_STATE_SETUP_CREATE]} +setup_state_create_link = {'text': _(u'create new state'), 'view': 'setup_state_create', 'famfam': 'transmit_add', 'permissions': [PERMISSION_STATE_SETUP_CREATE]} setup_state_edit_link = {'text': _(u'edit'), 'view': 'setup_state_edit', 'args': 'object.pk', 'famfam': 'transmit_edit', 'permissions': [PERMISSION_STATE_SETUP_EDIT]} setup_state_delete_link = {'text': _(u'delete'), 'view': 'setup_state_delete', 'args': 'object.pk', 'famfam': 'transmit_delete', 'permissions': [PERMISSION_STATE_SETUP_DELETE]} register_links(Workflow, [setup_workflow_states_list_link, setup_workflow_edit_link, setup_workflow_delete_link]) register_links([Workflow, State, 'setup_workflow_list', 'setup_workflow_create', 'setup_state_list'], [setup_workflow_list_link], menu_name=u'form_header') register_links([Workflow, 'setup_workflow_list', 'setup_workflow_create'], [setup_workflow_create_link], menu_name=u'secondary_menu') +register_links(['setup_workflow_states_list', 'setup_workflow_states_add'], [setup_workflow_states_add_link], menu_name=u'sidebar') register_links(State, [setup_state_edit_link, setup_state_delete_link]) register_links([State, Workflow, 'setup_state_list', 'setup_workflow_list', 'setup_workflow_create'], [setup_state_list_link], menu_name=u'form_header') register_links([State, 'setup_state_list', 'setup_state_create'], [setup_state_create_link], menu_name=u'secondary_menu') +register_links([WorkflowState], [setup_workflow_states_edit_link]) register_setup(setup_workflow_link) diff --git a/apps/workflows/forms.py b/apps/workflows/forms.py index fd425d4883..b50a3b7cfd 100644 --- a/apps/workflows/forms.py +++ b/apps/workflows/forms.py @@ -3,7 +3,7 @@ from __future__ import absolute_import from django import forms from django.utils.translation import ugettext_lazy as _ -from .models import Workflow, State, Transition +from .models import Workflow, State, Transition, WorkflowState class WorkflowSetupForm(forms.ModelForm): @@ -14,3 +14,8 @@ class WorkflowSetupForm(forms.ModelForm): class StateSetupForm(forms.ModelForm): class Meta: model = State + + +class WorkflowStateSetupForm(forms.ModelForm): + class Meta: + model = WorkflowState diff --git a/apps/workflows/urls.py b/apps/workflows/urls.py index 7223c08e5d..3a9b79557f 100644 --- a/apps/workflows/urls.py +++ b/apps/workflows/urls.py @@ -6,6 +6,8 @@ urlpatterns = patterns('workflows.views', url(r'^setup/workflow/(?P\d+)/edit/$', 'setup_workflow_edit', (), 'setup_workflow_edit'), url(r'^setup/workflow/(?P\d+)/delete/$', 'setup_workflow_delete', (), 'setup_workflow_delete'), url(r'^setup/workflow/(?P\d+)/state/list/$', 'setup_workflow_states_list', (), 'setup_workflow_states_list'), + url(r'^setup/workflow/(?P\d+)/state/create/$', 'setup_workflow_state_add', (), 'setup_workflow_state_add'), + url(r'^setup/workflow/state/(?P\d+)/edit/$', 'setup_workflow_state_edit', (), 'setup_workflow_state_edit'), url(r'^setup/state/list/$', 'setup_state_list', (), 'setup_state_list'), url(r'^setup/state/create/$', 'setup_state_create', (), 'setup_state_create'), diff --git a/apps/workflows/views.py b/apps/workflows/views.py index 242de0206a..ceb7bef219 100644 --- a/apps/workflows/views.py +++ b/apps/workflows/views.py @@ -18,8 +18,8 @@ from common.utils import encapsulate #from common.widgets import two_state_template #from acls.models import AccessEntry -from .models import Workflow, State, Transition -from .forms import WorkflowSetupForm, StateSetupForm +from .models import Workflow, State, Transition, WorkflowState +from .forms import WorkflowSetupForm, StateSetupForm, WorkflowStateSetupForm from .permissions import (PERMISSION_WORKFLOW_SETUP_VIEW, PERMISSION_WORKFLOW_SETUP_CREATE, PERMISSION_WORKFLOW_SETUP_EDIT, PERMISSION_WORKFLOW_SETUP_DELETE, PERMISSION_STATE_SETUP_VIEW, @@ -41,6 +41,7 @@ def setup_workflow_list(request): 'extra_columns': [ {'name': _(u'Initial state'), 'attribute': encapsulate(lambda workflow: workflow.initial_state or _(u'None'))}, ], + 'list_object_variable_name': 'workflow', } return render_to_response('generic_list.html', context, @@ -83,8 +84,10 @@ def setup_workflow_edit(request, workflow_pk): return render_to_response('generic_form.html', { 'title': _(u'edit workflow: %s') % workflow, 'form': form, - 'object': workflow, - 'object_name': _(u'workflow'), + 'workflow': workflow, + 'navigation_object_list': [ + {'object': 'workflow', 'name': _(u'workflow')}, + ], }, context_instance=RequestContext(request)) @@ -122,14 +125,16 @@ def setup_workflow_delete(request, workflow_pk=None, workflow_pk_list=None): return HttpResponseRedirect(next) context = { - 'object_name': _(u'workflow'), 'delete_view': True, 'previous': previous, 'next': next, 'form_icon': u'chart_organisation_delete.png', + 'navigation_object_list': [ + {'object': 'workflow', 'name': _(u'workflow')}, + ], } if len(workflows) == 1: - context['object'] = workflows[0] + context['workflow'] = workflows[0] context['title'] = _(u'Are you sure you wish to delete the workflow: %s?') % ', '.join([unicode(d) for d in workflows]) context['message'] = _('Will be removed from all documents.') elif len(workflows) > 1: @@ -146,15 +151,68 @@ def setup_workflow_states_list(request, workflow_pk): context = { 'object_list': workflow.workflowstate_set.all(), - 'title': _(u'workflows'), + 'title': _(u'states for workflow: %s') % workflow, 'hide_link': True, - 'object': workflow, + 'workflow': workflow, + 'navigation_object_list': [ + {'object': 'workflow', 'name': _(u'workflow')}, + ], + 'list_object_variable_name': 'workflow_state', } return render_to_response('generic_list.html', context, context_instance=RequestContext(request)) +def setup_workflow_state_add(request, workflow_pk): + Permission.objects.check_permissions(request.user, [PERMISSION_WORKFLOW_SETUP_EDIT]) + redirect_url = reverse('setup_workflow_states_list', args=[workflow_pk]) + workflow = get_object_or_404(Workflow, pk=workflow_pk) + + if request.method == 'POST': + form = WorkflowStateSetupForm(request.POST) + if form.is_valid(): + state = form.save() + messages.success(request, _(u'worflow state created succesfully.')) + return HttpResponseRedirect(redirect_url) + else: + form = WorkflowStateSetupForm() + + return render_to_response('generic_form.html', { + 'title': _(u'add worflow state'), + 'form': form, + 'workflow': workflow, + 'navigation_object_list': [ + {'object': 'workflow', 'name': _(u'workflow')}, + ], + }, context_instance=RequestContext(request)) + + +def setup_workflow_state_edit(request, workflow_state_pk): + Permission.objects.check_permissions(request.user, [PERMISSION_WORKFLOW_SETUP_EDIT]) + workflow_state = get_object_or_404(WorkflowState, pk=workflow_state_pk) + redirect_url = reverse('setup_workflow_states_list', args=[workflow_state.workflow.pk]) + + if request.method == 'POST': + form = WorkflowStateSetupForm(instance=workflow_state, data=request.POST) + if form.is_valid(): + state = form.save() + messages.success(request, _(u'worflow state edited succesfully.')) + return HttpResponseRedirect(redirect_url) + else: + form = WorkflowStateSetupForm(instance=workflow_state) + + return render_to_response('generic_form.html', { + 'title': _(u'edit worflow state'), + 'form': form, + 'workflow': workflow_state.workflow, + 'workflow_state': workflow_state, + 'navigation_object_list': [ + {'object': 'workflow', 'name': _(u'workflow')}, + {'object': 'workflow_state', 'name': _(u'workflow state')} + ], + }, context_instance=RequestContext(request)) + # States def setup_state_list(request): Permission.objects.check_permissions(request.user, [PERMISSION_STATE_SETUP_VIEW])