formdata: get correct status for intermediary evolutions (#20146)

This commit is contained in:
Frédéric Péters 2017-11-17 19:13:53 +04:00
parent 25878fad06
commit bed253cb75
2 changed files with 54 additions and 2 deletions

View File

@ -498,3 +498,47 @@ def test_workflow_data_file_url(pub):
)
substvars = formdata.get_substitution_variables()
assert substvars['foo_var_file_url']
def test_evolution_get_status(pub):
Workflow.wipe()
workflow = Workflow(name='test')
st_new = workflow.add_status('New')
st_finished = workflow.add_status('Finished')
workflow.store()
formdef = FormDef()
formdef.workflow_id = workflow.id
formdef.name = 'foo'
formdef.fields = []
formdef.store()
formdef.data_class().wipe()
d = formdef.data_class()()
d.evolution = []
evo = Evolution()
evo.time = time.localtime()
evo.status = 'wf-%s' % st_new.id
d.evolution.append(evo)
evo = Evolution()
evo.time = time.localtime()
d.evolution.append(evo)
evo = Evolution()
evo.time = time.localtime()
d.evolution.append(evo)
evo = Evolution()
evo.time = time.localtime()
evo.status = 'wf-%s' % st_finished.id
d.evolution.append(evo)
evo = Evolution()
evo.time = time.localtime()
d.evolution.append(evo)
d.store()
d = formdef.data_class().get(d.id)
assert [x.get_status().id for x in d.evolution] == ['1', '1', '1', '2', '2']

View File

@ -223,10 +223,18 @@ class Evolution(object):
return False
def get_status(self):
return self.formdata.get_status(status=self.status)
status = self.status
if not self.status:
# look for the previous evolution with a status
for evolution in reversed(self.formdata.evolution[:self.formdata.evolution.index(self)]):
status = evolution.status
if status:
break
return self.formdata.get_status(status=status)
def get_status_label(self):
return self.formdata.get_status_label(status=self.status)
status = self.get_status()
return status.name if status else _('Unknown')
class FormData(StorableObject):