forms: don't set form_status_changed on evolutions in same status (#34888)
This commit is contained in:
parent
b9db059a47
commit
f8da77c8f9
|
@ -4516,6 +4516,8 @@ def test_form_worklow_multiple_identical_status(pub):
|
|||
assert len(formdata.evolution) == 1
|
||||
assert formdata.status == 'wf-st1'
|
||||
assert formdata.evolution[0].last_jump_datetime is not None
|
||||
assert formdef.data_class().get(formdata.id).get_static_substitution_variables()['form_status_changed'] is False
|
||||
assert formdef.data_class().get(formdata.id).get_substitution_variables()['form_status_changed'] is False
|
||||
|
||||
# add a comment to last evolution, forcing create a new one
|
||||
formdata.evolution[-1].comment = 'new-evolution-1'
|
||||
|
@ -4524,6 +4526,8 @@ def test_form_worklow_multiple_identical_status(pub):
|
|||
formdata = formdef.data_class().get(formdata.id)
|
||||
assert len(formdata.evolution) == 2
|
||||
assert formdata.status == 'wf-st1'
|
||||
assert formdef.data_class().get(formdata.id).get_static_substitution_variables()['form_status_changed'] is False
|
||||
assert formdef.data_class().get(formdata.id).get_substitution_variables()['form_status_changed'] is False
|
||||
|
||||
# again
|
||||
formdata.evolution[-1].comment = 'new-evolution-2'
|
||||
|
@ -4547,6 +4551,48 @@ def test_form_worklow_multiple_identical_status(pub):
|
|||
assert resp.body.count('new-evolution-1') == 1
|
||||
assert resp.body.count('new-evolution-2') == 1
|
||||
|
||||
def test_form_worklow_comments_on_same_status(pub):
|
||||
pub.session_manager.session_class.wipe()
|
||||
user = create_user(pub)
|
||||
|
||||
role = Role(name='xxx')
|
||||
role.store()
|
||||
user.roles = [role.id]
|
||||
user.store()
|
||||
|
||||
formdef = create_formdef()
|
||||
formdef.fields = []
|
||||
formdef.workflow_roles = {'_receiver': role.id}
|
||||
formdef.store()
|
||||
|
||||
workflow = Workflow.get_default_workflow()
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
formdef.data_class().wipe()
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
formdata.perform_workflow()
|
||||
formdata.store()
|
||||
assert formdef.data_class().get(formdata.id).status == 'wf-new'
|
||||
|
||||
app = get_app(pub)
|
||||
|
||||
assert formdef.data_class().get(formdata.id).get_static_substitution_variables()['form_status_changed'] is True
|
||||
assert formdef.data_class().get(formdata.id).get_substitution_variables()['form_status_changed'] is True
|
||||
login(app, username='foo', password='foo')
|
||||
resp = app.get(formdata.get_url()).follow()
|
||||
resp.form['comment'] = 'TEST COMMENT'
|
||||
resp = resp.form.submit('button_commentable')
|
||||
assert formdef.data_class().get(formdata.id).get_static_substitution_variables()['form_status_changed'] is False
|
||||
assert formdef.data_class().get(formdata.id).get_substitution_variables()['form_status_changed'] is False
|
||||
|
||||
resp = app.get(formdata.get_url()).follow()
|
||||
resp = resp.form.submit('button_accept')
|
||||
assert formdef.data_class().get(formdata.id).get_static_substitution_variables()['form_status_changed'] is True
|
||||
assert formdef.data_class().get(formdata.id).get_substitution_variables()['form_status_changed'] is True
|
||||
|
||||
|
||||
def test_display_message(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
|
|
|
@ -766,13 +766,22 @@ class FormData(StorableObject):
|
|||
d['form_comment'] = ''
|
||||
|
||||
d['form_previous_status'] = ''
|
||||
d['form_status_changed'] = False
|
||||
if self.evolution:
|
||||
first_evolution_in_current_status = None
|
||||
for evolution in reversed(self.evolution):
|
||||
if evolution.status and evolution.status != self.status:
|
||||
d['form_previous_status'] = self.get_status_label(evolution.status)
|
||||
break
|
||||
if d['form_status'] != d['form_previous_status']:
|
||||
d['form_status_changed'] = True
|
||||
if evolution.status:
|
||||
first_evolution_in_current_status = evolution
|
||||
if (d['form_status'] != d['form_previous_status'] and
|
||||
self.evolution[-1].status and
|
||||
first_evolution_in_current_status is self.evolution[-1] and
|
||||
not self.evolution[-1].last_jump_datetime):
|
||||
# mark status has changed if the previous status was different
|
||||
# and we are not on a change done on the same status.
|
||||
d['form_status_changed'] = True
|
||||
|
||||
d['form_evolution'] = self.formdef.get_detailed_evolution(self)
|
||||
|
||||
|
|
|
@ -396,7 +396,18 @@ class LazyFormData(LazyFormDef):
|
|||
|
||||
@property
|
||||
def status_changed(self):
|
||||
return self.status != self.previous_status
|
||||
first_evolution_in_current_status = None
|
||||
for evolution in reversed(self._formdata.evolution or []):
|
||||
if evolution.status and evolution.status != self._formdata.status:
|
||||
break
|
||||
if evolution.status:
|
||||
first_evolution_in_current_status = evolution
|
||||
|
||||
return bool(self.status != self.previous_status and
|
||||
self._formdata.evolution and
|
||||
self._formdata.evolution[-1].status and
|
||||
first_evolution_in_current_status is self._formdata.evolution[-1] and
|
||||
not self._formdata.evolution[-1].last_jump_datetime)
|
||||
|
||||
@property
|
||||
def evolution(self):
|
||||
|
|
Loading…
Reference in New Issue