workflows: allow marking a status as terminal (#1960)

This commit is contained in:
Frédéric Péters 2012-11-16 17:34:48 +01:00 committed by Thomas NOEL
parent 8230b00de6
commit 909e6cd7ca
2 changed files with 31 additions and 4 deletions

View File

@ -280,7 +280,8 @@ class WorkflowItemsDir(Directory):
class WorkflowStatusPage(Directory):
_q_exports = ['', 'delete', 'newitem', ('items', 'items_dir'),
'update_order', 'edit', 'reassign', 'visibility']
'update_order', 'edit', 'reassign', 'visibility',
'endpoint']
def __init__(self, workflow, status_id):
self.workflow = workflow
@ -360,6 +361,7 @@ class WorkflowStatusPage(Directory):
'<ul>'
'<li><a href="edit">%s</a></li>' % _('Change Status Name')
'<li><a href="visibility" rel="popup">%s</a></li>' % _('Change Status Visibility')
'<li><a href="endpoint" rel="popup">%s</a></li>' % _('Change Terminal Status')
'<li><a href="delete" rel="popup">%s</a></li>' % _('Delete')
'</ul>'
'<div id="new-field">'
@ -559,6 +561,25 @@ class WorkflowStatusPage(Directory):
'<h2>%s</h2>' % _('Edit Workflow Status Visibility')
form.render()
def endpoint [html] (self):
form = Form(enctype = 'multipart/form-data')
form.add(CheckboxWidget, 'force_terminal_status',
title=_('Force Terminal Status'),
value=(self.status.forced_endpoint == True))
form.add_submit('submit', _('Submit'))
form.add_submit('cancel', _('Cancel'))
if form.get_widget('cancel').parse():
return redirect('..')
if form.is_submitted() and not form.has_errors():
self.status.forced_endpoint = form.get_widget('force_terminal_status').parse()
self.workflow.store()
return redirect('.')
html_top('workflows', title = _('Edit Terminal Status'))
get_response().breadcrumb.append( ('endpoint', _('Terminal Status')) )
form.render()
class WorkflowStatusDirectory(Directory):
_q_exports = ['']

View File

@ -133,9 +133,12 @@ class Workflow(StorableObject):
for status in self.possible_status:
waitpoint = False
endpoint = True
for item in status.items:
endpoint = item.endpoint and endpoint
waitpoint = item.waitpoint or waitpoint
if status.forced_endpoint:
endpoint = True
else:
for item in status.items:
endpoint = item.endpoint and endpoint
waitpoint = item.waitpoint or waitpoint
if endpoint or waitpoint:
waitpoint_status.append(status)
return waitpoint_status
@ -148,6 +151,8 @@ class Workflow(StorableObject):
def get_not_endpoint_status(self):
not_endpoint_status = []
for status in self.possible_status:
if status.forced_endpoint:
continue
endpoint = True
for item in status.items:
endpoint = item.endpoint and endpoint
@ -335,6 +340,7 @@ class WorkflowStatus:
name = None
items = None
visibility = None
forced_endpoint = False
def __init__(self, name = None):
self.name = name