cards: filter on status if relevant in custom view as datasource (#47764)

This commit is contained in:
Lauréline Guérin 2020-10-16 09:59:33 +02:00
parent b52e8c5e72
commit f54343327d
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 35 additions and 28 deletions

View File

@ -157,27 +157,25 @@ def test_card_custom_view_data_source(pub, studio):
carddef.store()
carddef.data_class().wipe()
for i in range(2):
for i in range(3):
carddata = carddef.data_class()()
carddata.data = {'1': 'FOO %s' % i}
carddata.just_created()
if i == 0:
carddata.data = {'1': 'BAR'}
else:
carddata.data = {'1': 'FOO'}
if i == 1:
carddata.jump_status('deleted')
carddata.store()
app = login(get_app(pub))
resp = app.get('/backoffice/data/foo/')
resp = resp.forms['listing-settings'].submit()
resp.forms['save-custom-view']['title'] = 'card view'
resp = resp.forms['save-custom-view'].submit()
resp = app.get('/backoffice/data/foo/user-card-view/')
resp.forms['listing-settings']['filter-1'].checked = True
resp = resp.forms['listing-settings'].submit()
resp.forms['listing-settings']['filter-1-value'] = 'FOO 0'
resp = resp.forms['listing-settings'].submit()
resp.forms['save-custom-view']['visibility'] = 'datasource'
resp = resp.forms['save-custom-view'].submit()
assert pub.custom_view_class.count() == 1
assert pub.custom_view_class.select()[0].visibility == 'datasource'
pub.custom_view_class.wipe()
custom_view = pub.custom_view_class()
custom_view.title = 'card view'
custom_view.formdef = carddef
custom_view.columns = {'list': [{'id': 'id'}]}
custom_view.filters = {'filter-1': True, 'filter-1-value': 'FOO'}
custom_view.visibility = 'datasource'
custom_view.store()
FormDef.wipe()
formdef = FormDef()
@ -187,18 +185,16 @@ def test_card_custom_view_data_source(pub, studio):
]
formdef.store()
formdef = FormDef.get_by_urlname('form-title')
resp = app.get('/backoffice/forms/%s/fields/' % formdef.id)
resp.forms[0]['label'] = 'foobar'
resp.forms[0]['type'] = 'item'
resp = resp.forms[0].submit()
resp = resp.follow()
formdef = FormDef.get_by_urlname('form-title')
resp = resp.click(href='%s/' % formdef.fields[-1].id, index=0)
app = login(get_app(pub))
resp = app.get('/backoffice/forms/%s/fields/1/' % formdef.id)
assert 'carddef:foo' in [x[0] for x in resp.form['data_source$type'].options]
assert 'carddef:foo:card-view' in [x[0] for x in resp.form['data_source$type'].options]
assert len(CardDef.get_data_source_items('carddef:foo')) == 2
assert len(CardDef.get_data_source_items('carddef:foo')) == 3
assert len(CardDef.get_data_source_items('carddef:foo:card-view')) == 2
custom_view.filters = {'filter-1': True, 'filter-1-value': 'FOO', 'filter-status': 'on', 'filter': 'done'}
custom_view.store()
assert len(CardDef.get_data_source_items('carddef:foo:card-view')) == 1

View File

@ -19,7 +19,7 @@ import types
from quixote import get_publisher
from .qommon import _, N_, misc
from .qommon.storage import Equal, NotEqual, ILike
from .qommon.storage import Contains, Equal, NotEqual, ILike
from wcs.carddata import CardData
from wcs.formdef import FormDef
@ -178,6 +178,17 @@ class CardDef(FormDef):
form_page = FormPage(formdef=carddef, view=custom_view, update_breadcrumbs=False)
criterias.extend(form_page.get_view_criterias())
order_by = custom_view.order_by
selected_filter = custom_view.get_filter()
if selected_filter and selected_filter != 'all':
if selected_filter == 'pending':
applied_filters = ['wf-%s' % x.id for x in carddef.workflow.get_not_endpoint_status()]
elif selected_filter == 'done':
applied_filters = ['wf-%s' % x.id for x in carddef.workflow.get_endpoint_status()]
else:
applied_filters = ['wf-%s' % selected_filter]
if applied_filters:
criterias.append(Contains('status', applied_filters))
if query:
criterias.append(ILike('digest', query))