formdata: hide intermediary evolutions based on correct status (#20273)

This commit is contained in:
Thomas NOËL 2017-11-24 20:10:31 +01:00 committed by Frédéric Péters
parent 345f3a5dff
commit d58f7e4fb2
2 changed files with 91 additions and 8 deletions

View File

@ -20,7 +20,8 @@ from wcs.qommon.form import UploadedFile
from wcs.qommon.ident.password_accounts import PasswordAccount
from wcs.formdef import FormDef
from wcs.workflows import (Workflow, EditableWorkflowStatusItem,
DisplayMessageWorkflowStatusItem, WorkflowBackofficeFieldsFormDef)
DisplayMessageWorkflowStatusItem, WorkflowBackofficeFieldsFormDef,
ChoiceWorkflowStatusItem)
from wcs.wf.export_to_model import ExportToModel, transform_to_pdf
from wcs.wf.jump import JumpWorkflowStatusItem
from wcs.wf.attachment import AddAttachmentWorkflowStatusItem
@ -2627,6 +2628,89 @@ def test_formdata_generated_document_to_backoffice_field(pub):
assert formdef.data_class().count() == 1
assert formdef.data_class().select()[0].status == 'wf-st2'
def test_formdata_generated_document_in_private_history(pub):
user = create_user(pub)
Role.wipe()
role = Role(name='xxx')
role.store()
user.roles = [role.id]
user.store()
wf = Workflow(name='status')
st0 = wf.add_status('Status0', 'st0')
st1 = wf.add_status('Status1', 'st1')
st1.visibility = ['_receiver']
export_to = ExportToModel()
export_to.label = 'create doc'
upload = QuixoteUpload('/foo/test.rtf', content_type='application/rtf')
upload.fp = StringIO.StringIO()
upload.fp.write('HELLO WORLD')
upload.fp.seek(0)
export_to.model_file = UploadedFile(pub.app_dir, None, upload)
export_to.attach_to_history = True
export_to.id = '_export_to'
export_to.by = ['_submitter']
st1.items.append(export_to)
export_to.parent = st1
st2 = wf.add_status('Status2', 'st2')
jump1 = ChoiceWorkflowStatusItem()
jump1.id = '_jump1'
jump1.label = 'Jump 1'
jump1.by = ['_receiver']
jump1.status = st1.id
jump1.parent = st0
st0.items.append(jump1)
jump2 = ChoiceWorkflowStatusItem()
jump2.id = '_jump2'
jump2.label = 'Jump 2'
jump2.by = ['_receiver']
jump2.status = st2.id
jump2.parent = st1
st1.items.append(jump2)
wf.store()
formdef = create_formdef()
formdef.workflow_id = wf.id
formdef.workflow_roles = {'_receiver': role.id}
formdef.fields = []
formdef.store()
formdef.data_class().wipe()
resp = login(get_app(pub), username='foo', password='foo').get('/test/')
resp = resp.forms[0].submit('submit')
assert 'Check values then click submit.' in resp.body
resp = resp.forms[0].submit('submit')
assert resp.status_int == 302
form_location = resp.location
resp = resp.follow()
assert 'The form has been recorded' in resp.body
resp = resp.form.submit('button_jump1')
resp = resp.follow()
resp = resp.form.submit('button_export_to')
resp = resp.follow()
assert 'Form exported in a model' in resp.body
resp = resp.form.submit('button_jump2')
resp = resp.follow()
# change formdef receiver so the hidden status should not longer be visible
role2 = Role(name='yyy')
role2.store()
formdef.workflow_roles = {'_receiver': role2.id}
formdef.store()
resp = login(get_app(pub), username='foo', password='foo').get(resp.request.url)
assert not 'Form exported in a model' in resp.body
def test_formdata_form_file_download(pub):
create_user(pub)
wf = Workflow(name='status')

View File

@ -214,13 +214,6 @@ class Evolution(object):
def datetime(self):
return datetime.datetime(*self.time[:6])
def is_hidden(self):
if self.status:
wf_status = self.formdata.get_status(self.status)
if wf_status and not wf_status.is_visible(self.formdata, get_request().user):
return True
return False
def get_status(self):
status = self.status
if not self.status:
@ -235,6 +228,12 @@ class Evolution(object):
status = self.get_status()
return status.name if status else _('Unknown')
def is_hidden(self):
status = self.get_status()
if status:
return not status.is_visible(self.formdata, get_request().user)
return True
class FormData(StorableObject):
_names = 'XX'