Projet

Général

Profil

0001-fields-fix-live-prefill-for-date-fields-52064.patch

Lauréline Guérin, 15 octobre 2021 09:20

Télécharger (4,91 ko)

Voir les différences:

Subject: [PATCH] fields: fix live prefill for date fields (#52064)

 tests/form_pages/test_live.py        | 65 ++++++++++++++++++++++++++++
 wcs/forms/common.py                  |  6 +++
 wcs/qommon/static/js/qommon.forms.js |  2 +-
 3 files changed, 72 insertions(+), 1 deletion(-)
tests/form_pages/test_live.py
1
import datetime
1 2
import io
2 3
import json
3 4
from unittest import mock
......
799 800
    live_resp = app.post('/foo/live?modified_field_id=user', params=resp.form.submit_fields(), status=403)
800 801

  
801 802

  
803
def test_field_live_date_prefill(pub, http_requests):
804
    pub.cfg['language'] = {'language': 'fr'}
805
    pub.write_cfg()
806
    CardDef.wipe()
807
    carddef = CardDef()
808
    carddef.name = 'foo'
809
    carddef.digest_templates = {'default': '{{ form_var_foo }}'}
810
    carddef.fields = [
811
        fields.StringField(id='1', type='string', label='string', varname='foo'),
812
        fields.DateField(
813
            type='date',
814
            id='2',
815
            varname='date',
816
        ),
817
    ]
818
    carddef.store()
819
    carddef.data_class().wipe()
820
    carddata1 = carddef.data_class()()
821
    carddata1.data = {
822
        '1': 'bar',
823
        '2': datetime.date(2021, 10, 1).timetuple(),
824
    }
825
    carddata1.just_created()
826
    carddata1.store()
827
    carddata2 = carddef.data_class()()
828
    carddata2.data = {
829
        '1': 'baz',
830
        '2': datetime.date(2021, 10, 30).timetuple(),
831
    }
832
    carddata2.just_created()
833
    carddata2.store()
834
    FormDef.wipe()
835
    formdef = FormDef()
836
    formdef.name = 'Foo'
837
    formdef.fields = [
838
        fields.ItemField(
839
            type='item', id='1', label='foo', varname='foo', data_source={'type': 'carddef:foo'}
840
        ),
841
        fields.DateField(
842
            type='date',
843
            id='2',
844
            label='date',
845
            varname='date',
846
            prefill={'type': 'string', 'value': '{{ form_var_foo_live_var_date }}'},
847
        ),
848
    ]
849
    formdef.store()
850
    formdef.data_class().wipe()
851

  
852
    app = get_app(pub)
853
    resp = app.get('/foo/')
854
    assert resp.html.find('div', {'data-field-id': '1'}).attrs['data-live-source'] == 'true'
855
    assert resp.pyquery('#var_date.widget-prefilled')  # second field is marked as prefilled
856
    assert resp.form['f2'].value == ''
857
    resp.form['f1'] = str(carddata1.id)
858
    live_resp = app.post('/foo/live?modified_field_id=1&prefilled_2=on', params=resp.form.submit_fields())
859
    assert live_resp.json['result']['2'] == {'visible': True, 'content': '2021-10-01'}
860

  
861
    resp.form['f2'] = '2021-10-30'  # manually changed -> widget-prefilled class will be removed
862
    resp.form['f1'] = str(carddata2.id)
863
    live_resp = app.post('/foo/live?modified_field_id=1', params=resp.form.submit_fields())
864
    assert live_resp.json['result']['2'] == {'visible': True}
865

  
866

  
802 867
def test_field_live_block_string_prefill(pub, http_requests):
803 868
    FormDef.wipe()
804 869
    BlockDef.wipe()
wcs/forms/common.py
798 798
                update_prefill = bool('prefilled_%s' % field.id in get_request().form)
799 799
                if update_prefill:
800 800
                    value = field.get_prefill_value()[0]
801
                    if field.key == 'date' and value:
802
                        try:
803
                            value = field.convert_value_from_anything(value)
804
                            value = field.get_json_value(value)
805
                        except ValueError:
806
                            pass
801 807
                    entry['content'] = value
802 808
            elif field.prefill and field.prefill.get('type') == 'user':
803 809
                update_prefill = bool(get_request().form.get('modified_field_id') == 'user')
wcs/qommon/static/js/qommon.forms.js
479 479
              } else {
480 480
                // replace text input value
481 481
                if ($(widget).is('.widget-prefilled') || $(widget).is('.widget-readonly') || data.modified_field == 'user') {
482
                  $(widget).find('input[type=text], input[type=tel], input[type=numeric], input[type=email], textarea').val(value.content);
482
                  $(widget).find('input[type=text], input[type=tel], input[type=numeric], input[type=email], input[type=date], textarea').val(value.content);
483 483
                }
484 484
              }
485 485
            });
486
-