Skip to content

Commit b31936e

Browse files
committed
add workflow checks
1 parent 3b88074 commit b31936e

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

por/dashboard/forms/workflow.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# -*- coding: utf-8 -*-
2+
from pyramid.threadlocal import get_current_request
23
from fa.bootstrap import actions
34
from webob.exc import HTTPFound
45
from repoze.workflow import WorkflowError
@@ -16,7 +17,7 @@ def goto_state(context, request):
1617
request.add_message(u'Workflow status has been changed. New workflow state is: <strong>%s</strong>.' % state)
1718
return HTTPFound(location=request.fa_url(request.model_name, request.model_id))
1819
except WorkflowError, msg:
19-
print unicode(msg)
20+
request.add_message(msg, 'error')
2021
return HTTPFound(location=request.fa_url(request.model_name, request.model_id))
2122

2223

@@ -30,7 +31,8 @@ def change_workflow(context):
3031
permission='workflow',
3132
content='%s state' % context.get_instance().workflow_state)
3233

33-
states = wf.get_transitions(context.get_instance(), None)
34+
request = get_current_request()
35+
states = wf.get_transitions(context.get_instance(), request)
3436
if not states:
3537
return None
3638
for state in states:
@@ -40,3 +42,9 @@ def change_workflow(context):
4042
content=state['name'],
4143
attrs=attrs))
4244
return wf_actions
45+
46+
47+
def validate_contract_done(content, info):
48+
""" raise WorkflowError when contract has active CustomerRequests. """
49+
if [a for a in content.customer_requests if a.active]:
50+
raise WorkflowError(u'Contract cannot be closed - there are customer requests still open.')

por/dashboard/workflow.zcml

+8-1
Original file line numberDiff line numberDiff line change
@@ -123,30 +123,37 @@
123123
name="Contract workflow"
124124
state_attr="workflow_state"
125125
content_types="por.models.interfaces.IContract"
126+
permission_checker="pyramid.security.has_permission"
126127
initial_state="draft">
127128

128129
<state name="draft"></state>
129130
<state name="active"></state>
130-
<state name="done"></state>
131+
<state name="done"
132+
callback="por.dashboard.forms.workflow.validate_contract_done">
133+
</state>
131134

132135
<transition
133136
name="activate"
134137
from_state="draft"
138+
permission="workflow_activate"
135139
to_state="active" />
136140

137141
<transition
138142
name="deactivate"
139143
from_state="active"
144+
permission="workflow_deactivate"
140145
to_state="draft" />
141146

142147
<transition
143148
name="achieve"
144149
from_state="active"
150+
permission="workflow_achieve"
145151
to_state="done" />
146152

147153
<transition
148154
name="unachieve"
149155
from_state="done"
156+
permission="workflow_unachieve"
150157
to_state="active" />
151158

152159
</workflow>

0 commit comments

Comments
 (0)