From 5eff674c6b762b829359c65ff661afbd13f3fcd0 Mon Sep 17 00:00:00 2001 From: Thomas NOEL Date: Wed, 18 Oct 2017 12:31:16 +0200 Subject: [PATCH] workflows: allow attach a generated document without showing it in history (#14085) --- tests/test_form_pages.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++ wcs/formdata.py | 5 ++++- wcs/wf/export_to_model.py | 5 +++-- wcs/workflows.py | 7 +++++-- 4 files changed, 61 insertions(+), 5 deletions(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 304a0eff..d688b648 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -2552,6 +2552,55 @@ def test_formdata_generated_document_non_interactive(pub): assert formdef.data_class().count() == 1 assert formdef.data_class().select()[0].status == 'wf-st2' +def test_formdata_generated_document_visibility(pub): + create_user(pub) + wf = Workflow(name='status') + st1 = wf.add_status('Status1', 'st1') + export_to = ExportToModel() + export_to.method = 'non-interactive' + template_filename = os.path.join(os.path.dirname(__file__), 'template.odt') + template = open(template_filename).read() + upload = QuixoteUpload('/foo/template.odt', content_type='application/octet-stream') + upload.fp = StringIO.StringIO() + upload.fp.write(template) + upload.fp.seek(0) + export_to.model_file = UploadedFile(pub.app_dir, None, upload) + export_to.id = '_export_to' + export_to.attach_to_history = False + export_to.varname = 'barfoo' + st1.items.append(export_to) + export_to.parent = st1 + + jump = JumpWorkflowStatusItem() + jump.status = 'st2' + st1.items.append(jump) + jump.parent = st1 + wf.add_status('Status2', 'st2') + wf.store() + + formdef = create_formdef() + formdef.workflow_id = wf.id + formdef.fields = [fields.TextField(id='0', label='comment', type='text', varname='comment')] + formdef.store() + formdef.data_class().wipe() + + resp = login(get_app(pub), username='foo', password='foo').get('/test/') + resp.form['f0'] = 'Hello\n\nWorld.' + 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 + resp = resp.follow() + assert 'The form has been recorded' in resp.body + + # not visible in history + assert 'template.odt' not in resp.body + # accessible with attachment substitution variables + variables = formdef.data_class().select()[0].get_substitution_variables() + assert 'form_attachments' in variables + assert variables['form_attachments'] is not None + assert hasattr(variables['form_attachments'], 'barfoo') + def test_formdata_generated_document_to_backoffice_field(pub): create_user_and_admin(pub) wf = Workflow(name='status') diff --git a/wcs/formdata.py b/wcs/formdata.py index 03697f89..42768a42 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -173,7 +173,10 @@ class Evolution(object): for p in self.parts: if not hasattr(p, 'view'): continue - l.append(p.view()) + display_part = p.view() + if display_part is None: + continue + l.append(display_part) self._display_parts = l return self._display_parts diff --git a/wcs/wf/export_to_model.py b/wcs/wf/export_to_model.py index 4250038b..7c11e884 100644 --- a/wcs/wf/export_to_model.py +++ b/wcs/wf/export_to_model.py @@ -549,12 +549,13 @@ class ExportToModel(WorkflowStatusItem): content_type = 'application/pdf' if self.push_to_portfolio: push_document(formdata.get_user(), filename, outstream) - if self.attach_to_history: + if self.attach_to_history or self.varname: evo.add_part(AttachmentEvolutionPart( filename, outstream, content_type=content_type, - varname=self.varname)) + varname=self.varname, + is_visible=bool(self.attach_to_history))) formdata.store() if self.backoffice_filefield_id: outstream.seek(0) diff --git a/wcs/workflows.py b/wcs/workflows.py index 0197a2c2..5ea19d88 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -162,15 +162,17 @@ class AttachmentEvolutionPart: #pylint: disable=C1001 content_type = None charset = None varname = None + is_visible = None def __init__(self, base_filename, fp, orig_filename=None, content_type=None, - charset=None, varname=None): + charset=None, varname=None, is_visible=None): self.base_filename = base_filename self.orig_filename = orig_filename or base_filename self.content_type = content_type self.charset = charset self.fp = fp self.varname = varname + self.is_visible = is_visible @classmethod def from_upload(cls, upload, varname=None): @@ -204,7 +206,8 @@ class AttachmentEvolutionPart: #pylint: disable=C1001 return odict def view(self): - return htmltext('

%s' % ( + if self.is_visible is not False: + return htmltext('

%s' % ( os.path.basename(self.filename), self.orig_filename)) @classmethod -- 2.14.2