misc: make form_status accessible during form edition (#42541) #740
|
@ -2564,6 +2564,49 @@ def test_backoffice_wfedit_and_data_source_with_user_info(pub):
|
|||
resp = resp.follow()
|
||||
|
||||
|
||||
def test_backoffice_wfedit_and_form_status(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
workflow = Workflow(name='wfedit')
|
||||
st1 = workflow.add_status('Status1')
|
||||
wfedit = st1.add_action('editable', id='_wfedit')
|
||||
wfedit.by = [user.roles[0]]
|
||||
st2 = workflow.add_status('Status2')
|
||||
wfedit = st2.add_action('editable', id='_wfedit')
|
||||
wfedit.by = [user.roles[0]]
|
||||
workflow.store()
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test form'
|
||||
formdef.fields = [
|
||||
fields.CommentField(id='1', label='current status: {{form_status}}'),
|
||||
fields.CommentField(id='2', label='previous status: {{form_previous_status}}'),
|
||||
]
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
||||
resp = app.get(f'/backoffice/management/test-form/{formdata.id}/')
|
||||
resp = resp.form.submit('button_wfedit')
|
||||
resp = resp.follow()
|
||||
assert resp.pyquery('[data-field-id="1"]').text() == 'current status: Status1'
|
||||
assert resp.pyquery('[data-field-id="2"]').text() == 'previous status:'
|
||||
|
||||
formdata.jump_status(st2.id)
|
||||
formdata.store()
|
||||
|
||||
resp = app.get(f'/backoffice/management/test-form/{formdata.id}/')
|
||||
resp = resp.form.submit('button_wfedit')
|
||||
resp = resp.follow()
|
||||
assert resp.pyquery('[data-field-id="1"]').text() == 'current status: Status2'
|
||||
assert resp.pyquery('[data-field-id="2"]').text() == 'previous status: Status1'
|
||||
|
||||
|
||||
def test_backoffice_wfedit_and_workflow_data(pub):
|
||||
user = create_user(pub)
|
||||
create_environment(pub)
|
||||
|
|
|
@ -42,7 +42,7 @@ from wcs.qommon.admin.texts import TextsDirectory
|
|||
from wcs.qommon.storage import NothingToUpdate
|
||||
from wcs.roles import logged_users_role
|
||||
from wcs.sql_criterias import Equal, NotEqual
|
||||
from wcs.variables import LazyFormDef
|
||||
from wcs.variables import LazyFormData, LazyFormDef
|
||||
from wcs.workflows import ContentSnapshotPart, WorkflowStatusItem
|
||||
|
||||
from ..qommon import _, emails, errors, get_cfg, misc, ngettext, template
|
||||
|
@ -919,6 +919,11 @@ class FormPage(Directory, TempfileDirectoryMixin, FormTemplateMixin):
|
|||
formdata._edited_id = self.edited_data.id
|
||||
# keep workflow data as it may be used in conditions
|
||||
formdata.workflow_data = self.edited_data.workflow_data
|
||||
# make form_status and form_previous_status accessible
|
||||
formdata.status = self.edited_data.status
|
||||
# add previous status as a private attribute as it cannot be computed
|
||||
# from history when editing.
|
||||
formdata._previous_status = LazyFormData(self.edited_data).previous_status
|
||||
return formdata
|
||||
|
||||
formdata.status = ''
|
||||
|
|
|
@ -946,6 +946,9 @@ class LazyFormData(LazyFormDef):
|
|||
|
||||
@property
|
||||
def previous_status(self):
|
||||
if getattr(self._formdata, '_previous_status', None):
|
||||
# for minimal formdata object used during edition.
|
||||
return self._formdata._previous_status
|
||||
if self._formdata.evolution:
|
||||
for evolution in reversed(self._formdata.evolution):
|
||||
if evolution.status and evolution.status != self._formdata.status:
|
||||
|
|
Loading…
Reference in New Issue