workflows: allow marking a status as terminal (#1960)
This commit is contained in:
parent
8230b00de6
commit
909e6cd7ca
|
@ -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 = ['']
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue