Projet

Général

Profil

0001-backoffice-add-a-new-Include-in-default-filters-opti.patch

Frédéric Péters, 07 novembre 2015 18:23

Télécharger (5,59 ko)

Voir les différences:

Subject: [PATCH] backoffice: add a new "Include in default filters" option for
 lists (#8908)

 tests/test_backoffice_pages.py | 26 ++++++++++++++++++++++++++
 wcs/backoffice/management.py   |  5 +++++
 wcs/fields.py                  |  8 ++++++--
 3 files changed, 37 insertions(+), 2 deletions(-)
tests/test_backoffice_pages.py
270 270
    resp = resp.forms[0].submit()
271 271
    assert resp.body.count('<td>baz</td>') == 8
272 272

  
273
def test_backoffice_default_filter(pub):
274
    create_superuser(pub)
275
    create_environment(pub)
276
    app = login(get_app(pub))
277
    resp = app.get('/backoffice/management/form-title/')
278
    assert not 'filter-2-value' in resp.form.fields
279

  
280
    formdef = FormDef.get_by_urlname('form-title')
281
    formdef.fields[1].in_filters = True
282
    formdef.store()
283
    resp = app.get('/backoffice/management/form-title/')
284
    assert 'filter-2-value' in resp.form.fields
285

  
273 286
def test_backoffice_csv(pub):
274 287
    create_superuser(pub)
275 288
    create_environment(pub)
......
349 362
    app = login(get_app(pub))
350 363
    resp = app.get('/backoffice/management/form-title/')
351 364
    resp = resp.click('Statistics')
365
    assert not 'filter-2-value' in resp.form.fields
352 366

  
353 367
    resp.forms[0]['filter-2'].checked = True
354 368
    resp = resp.forms[0].submit()
......
364 378
    resp = resp.forms[0].submit()
365 379
    assert 'Total number of records: 13' in resp.body
366 380

  
381
    # check it's also possible to get back to the complete list
382
    resp.forms[0]['filter-2-value'].value = ''
383
    resp = resp.forms[0].submit()
384
    assert 'Total number of records: 50' in resp.body
385

  
367 386
    # check it also works with item fields with a data source
368 387
    resp = app.get('/backoffice/management/form-title/')
369 388
    resp = resp.click('Statistics')
......
373 392
    resp = resp.forms[0].submit()
374 393
    assert 'Total number of records: 13' in resp.body
375 394

  
395
    # set field to be displayed by default in filters
396
    formdef = FormDef.get_by_urlname('form-title')
397
    formdef.fields[1].in_filters = True
398
    formdef.store()
399
    resp = app.get('/backoffice/management/form-title/')
400
    resp = resp.click('Statistics')
401
    assert 'filter-2-value' in resp.form.fields
376 402

  
377 403
def test_backoffice_handling(pub):
378 404
    create_user(pub)
wcs/backoffice/management.py
465 465
                elif mode == 'stats':
466 466
                    # enable period filters by default
467 467
                    field.enabled = (field.id in ('start', 'end'))
468
                if field.type == 'item':
469
                    field.enabled = field.in_filters
468 470

  
469 471
        r += htmltext('<h3><span>%s</span> <span class="change">(<a id="filter-settings">%s</a>)</span></h3>' % (
470 472
            _('Filters'), _('change')))
......
513 515
                    if type(options[0]) in (tuple, list):
514 516
                        if len(options[0]) == 2:
515 517
                            options = [(x[0], x[1], x[0]) for x in options]
518
                        options.insert(0, (None, '', None))
519
                    else:
520
                        options.insert(0, '')
516 521
                    r += SingleSelectWidget(filter_field_key, title=filter_field.label,
517 522
                            options=options, value=filter_field_value,
518 523
                            render_br=False).render()
wcs/fields.py
147 147
        else:
148 148
            extra_fields = []
149 149
        for attribute in self.get_admin_attributes() + extra_fields:
150
            if attribute in ('in_listing', ):
150
            if attribute in ('in_listing', 'in_filters'):
151 151
                continue
152 152
            if hasattr(self, attribute) and getattr(self, attribute) is not None:
153 153
                val = getattr(self, attribute)
......
851 851
    anonymise = False
852 852
    widget_class = SingleSelectHintWidget
853 853
    data_source = {}
854
    in_filters = False
854 855

  
855 856
    def __init__(self, **kwargs):
856 857
        self.items = []
......
961 962

  
962 963
    def fill_admin_form(self, form):
963 964
        WidgetField.fill_admin_form(self, form)
965
        form.add(CheckboxWidget, 'in_filters', title=_('Include in default filters'),
966
                value=self.in_filters, advanced=True)
964 967
        form.add(CheckboxWidget, 'show_as_radio', title = _('Show as radio buttons'),
965 968
                value = self.show_as_radio)
966 969
        form.add(WidgetList, 'items', title = _('Items'), element_type = StringWidget,
......
975 978
                 advanced=is_datasource_advanced(self.data_source))
976 979

  
977 980
    def get_admin_attributes(self):
978
        return WidgetField.get_admin_attributes(self) + ['items', 'show_as_radio', 'data_source']
981
        return WidgetField.get_admin_attributes(self) + ['items',
982
                'show_as_radio', 'data_source', 'in_filters']
979 983

  
980 984
    def check_admin_form(self, form):
981 985
        items = form.get_widget('items').parse()
982
-