formdata: hide intermediary evolutions based on correct status (#20273)
This commit is contained in:
parent
345f3a5dff
commit
d58f7e4fb2
|
@ -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')
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue