Projet

Général

Profil

0001-workflows-add-jump-button-option-to-ignore-form-erro.patch

Frédéric Péters, 03 novembre 2019 09:28

Télécharger (6,19 ko)

Voir les différences:

Subject: [PATCH] workflows: add jump button option to ignore form errors
 (#24182)

 tests/test_form_pages.py | 71 +++++++++++++++++++++++++++++++++++++++-
 wcs/forms/common.py      |  9 ++++-
 wcs/workflows.py         | 10 +++++-
 3 files changed, 87 insertions(+), 3 deletions(-)
tests/test_form_pages.py
28 28
from wcs.workflows import (Workflow, EditableWorkflowStatusItem,
29 29
        DisplayMessageWorkflowStatusItem, WorkflowBackofficeFieldsFormDef,
30 30
        ChoiceWorkflowStatusItem, JumpOnSubmitWorkflowStatusItem,
31
        SendmailWorkflowStatusItem)
31
        SendmailWorkflowStatusItem, CommentableWorkflowStatusItem)
32 32
from wcs.wf.backoffice_fields import SetBackofficeFieldsWorkflowStatusItem
33 33
from wcs.wf.export_to_model import ExportToModel, transform_to_pdf
34 34
from wcs.wf.jump import JumpWorkflowStatusItem
......
7025 7025
    resp = app.get(formdata.get_url(backoffice=False))
7026 7026
    assert 'f1' not in resp.form.fields
7027 7027
    assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none'
7028

  
7029
def test_choice_button_ignore_form_errors(pub):
7030
    user = create_user(pub)
7031

  
7032
    formdef = create_formdef()
7033
    formdef.roles = [logged_users_role().id]
7034
    formdef.store()
7035

  
7036
    wf = Workflow(name='status')
7037
    st1 = wf.add_status('Status1', 'st1')
7038
    st2 = wf.add_status('Status2', 'st2')
7039

  
7040
    commentable = CommentableWorkflowStatusItem()
7041
    commentable.id = '_commentable'
7042
    commentable.by = [logged_users_role().id]
7043
    commentable.required = True
7044
    st1.items.append(commentable)
7045
    commentable.parent = st1
7046

  
7047
    choice = ChoiceWorkflowStatusItem()
7048
    choice.label = 'Submit'
7049
    choice.by = [logged_users_role().id]
7050
    choice.id = '_x1'
7051
    choice.status = st2.id
7052
    st1.items.append(choice)
7053
    choice.parent = st1
7054

  
7055
    choice2 = ChoiceWorkflowStatusItem()
7056
    choice2.label = 'Submit no check'
7057
    choice2.by = [logged_users_role().id]
7058
    choice2.id = '_x2'
7059
    choice2.status = st2.id
7060
    choice2.ignore_form_errors = True
7061
    st1.items.append(choice2)
7062
    choice2.parent = st1
7063

  
7064
    wf.store()
7065

  
7066
    formdef.workflow = wf
7067
    formdef.store()
7068

  
7069
    # no comment
7070
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
7071
    resp = resp.form.submit('submit')  # -> validation page
7072
    resp = resp.form.submit('submit')  # -> submission
7073
    resp = resp.follow()
7074

  
7075
    resp = resp.form.submit('button_x1')
7076
    assert 'There were errors processing your form.' in resp.body
7077

  
7078
    # comment
7079
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
7080
    resp = resp.form.submit('submit')  # -> validation page
7081
    resp = resp.form.submit('submit')  # -> submission
7082
    resp = resp.follow()
7083

  
7084
    resp.form['comment'] = 'plop'
7085
    resp = resp.form.submit('button_x1').follow()
7086
    assert '<p>plop</p>' in resp.body
7087
    assert '<span class="status">Status2' in resp.body
7088

  
7089
    # no comment but no check
7090
    resp = login(get_app(pub), username='foo', password='foo').get('/test/')
7091
    resp = resp.form.submit('submit')  # -> validation page
7092
    resp = resp.form.submit('submit')  # -> submission
7093
    resp = resp.follow()
7094

  
7095
    resp = resp.form.submit('button_x2').follow()
7096
    assert '<span class="status">Status2' in resp.body
wcs/forms/common.py
280 280

  
281 281

  
282 282
    def check_submitted_form(self, form):
283
        if form and form.is_submitted() and not form.has_errors():
283
        if form and form.is_submitted():
284
            submit_button_name = form.get_submit()
285
            if submit_button_name:
286
                submit_button = form.get_widget(submit_button_name)
287
                if getattr(submit_button, 'ignore_form_errors', False):
288
                    form.clear_errors()
289
            if form.has_errors():
290
                return
284 291
            url = self.submit(form)
285 292
            if url is None:
286 293
                url = get_request().get_frontoffice_url()
wcs/workflows.py
2319 2319
    by = []
2320 2320
    backoffice_info_text = None
2321 2321
    require_confirmation = False
2322
    ignore_form_errors = False
2322 2323

  
2323 2324
    def get_label(self):
2324 2325
        expression = self.get_expression(self.label)
......
2355 2356
        if self.require_confirmation:
2356 2357
            get_response().add_javascript(['jquery.js', '../../i18n.js', 'qommon.js'])
2357 2358
            widget.attrs = {'data-ask-for-confirmation': 'true'}
2358
        form.get_widget('button%s' % self.id).backoffice_info_text = self.backoffice_info_text
2359
        widget.backoffice_info_text = self.backoffice_info_text
2360
        widget.ignore_form_errors = self.ignore_form_errors
2359 2361

  
2360 2362
    def submit_form(self, form, formdata, user, evo):
2361 2363
        if form.get_submit() == 'button%s' % self.id:
......
2390 2392
            form.add(VarnameWidget, '%sidentifier' % prefix,
2391 2393
                     title=_('Identifier'), value=self.identifier,
2392 2394
                     advanced=True)
2395
        if 'ignore_form_errors' in parameters:
2396
            form.add(CheckboxWidget, '%signore_form_errors' % prefix,
2397
                title=_('Ignore form errors'),
2398
                value=self.ignore_form_errors,
2399
                advanced=True)
2393 2400

  
2394 2401
    def get_parameters(self):
2395 2402
        return ('label', 'by', 'status',
2396 2403
                'require_confirmation',
2397 2404
                'backoffice_info_text',
2405
                'ignore_form_errors',
2398 2406
                'set_marker_on_status',
2399 2407
                'condition', 'identifier',)
2400 2408

  
2401
-