"Demandes de l'usager", pouvoir filtrer les demandes de la cellule "Demande de l'usager" selon la fiche liée à la page (#58854) #120
|
@ -31,7 +31,7 @@ from .models import (
|
|||
WcsFormCell,
|
||||
WcsFormsOfCategoryCell,
|
||||
)
|
||||
from .utils import get_wcs_options, get_wcs_services
|
||||
from .utils import get_wcs_matching_card_model, get_wcs_options, get_wcs_services
|
||||
|
||||
|
||||
class WcsFormCellForm(forms.ModelForm):
|
||||
|
@ -289,6 +289,7 @@ class WcsCurrentFormsCellForm(WcsFormsMixin, forms.ModelForm):
|
|||
'done_forms',
|
||||
'include_drafts',
|
||||
'include_forms_user_can_access',
|
||||
'filter_by_card',
|
||||
]
|
||||
|
||||
class Meta:
|
||||
|
@ -299,12 +300,19 @@ class WcsCurrentFormsCellForm(WcsFormsMixin, forms.ModelForm):
|
|||
'done_forms',
|
||||
'include_drafts',
|
||||
'include_forms_user_can_access',
|
||||
'filter_by_card',
|
||||
]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self._init_wcs_site()
|
||||
self._init_categories()
|
||||
if self.instance.page.sub_slug:
|
||||
result = get_wcs_matching_card_model(self.instance.page.sub_slug)
|
||||
if not result:
|
||||
del self.fields['filter_by_card']
|
||||
else:
|
||||
del self.fields['filter_by_card']
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import django.contrib.postgres.fields.jsonb
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
@ -72,7 +71,7 @@ class Migration(migrations.Migration):
|
|||
blank=True, null=True, verbose_name='Number of cards per page (default 10)'
|
||||
),
|
||||
),
|
||||
('custom_schema', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict)),
|
||||
('custom_schema', models.JSONField(blank=True, default=dict)),
|
||||
(
|
||||
'display_mode',
|
||||
models.CharField(
|
||||
|
@ -97,7 +96,7 @@ class Migration(migrations.Migration):
|
|||
),
|
||||
('custom_title', models.CharField(blank=True, max_length=150, verbose_name='Custom Title')),
|
||||
('cached_title', models.CharField(max_length=150, verbose_name='Title')),
|
||||
('cached_json', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict)),
|
||||
('cached_json', models.JSONField(blank=True, default=dict)),
|
||||
('groups', models.ManyToManyField(blank=True, to='auth.Group', verbose_name='Roles')),
|
||||
('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='data.Page')),
|
||||
],
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('wcs', '0056_wcscardcell_inline_filters'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='wcscurrentformscell',
|
||||
name='filter_by_card',
|
||||
field=models.BooleanField(
|
||||
default=False, verbose_name='Only display forms related to the card linked to this page'
|
||||
),
|
||||
),
|
||||
]
|
|
@ -40,7 +40,13 @@ from combo.data.models import CellBase, Page
|
|||
from combo.utils import NothingInCacheException, is_bot, requests
|
||||
from combo.utils.misc import is_portal_agent
|
||||
|
||||
from .utils import get_matching_pages_from_card_slug, get_wcs_json, get_wcs_services, is_wcs_enabled
|
||||
from .utils import (
|
||||
get_matching_pages_from_card_slug,
|
||||
get_wcs_json,
|
||||
get_wcs_matching_card_model,
|
||||
get_wcs_services,
|
||||
is_wcs_enabled,
|
||||
)
|
||||
|
||||
invalid_reason_codes = {
|
||||
'wcs_form_not_defined': _('No form set'),
|
||||
|
@ -486,6 +492,9 @@ class WcsCurrentFormsCell(CategoriesAndWcsSiteValidityMixin, CategoriesFiltering
|
|||
include_forms_user_can_access = models.BooleanField(
|
||||
_('Include forms to which the user can access'), default=False
|
||||
)
|
||||
filter_by_card = models.BooleanField(
|
||||
_('Only display forms related to the card linked to this page'), default=False
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('User Forms')
|
||||
|
@ -512,6 +521,14 @@ class WcsCurrentFormsCell(CategoriesAndWcsSiteValidityMixin, CategoriesFiltering
|
|||
url += '&include-accessible=on'
|
||||
if self.include_drafts:
|
||||
url += '&include-drafts=on'
|
||||
if self.filter_by_card:
|
||||
if self.page.sub_slug:
|
||||
result = get_wcs_matching_card_model(self.page.sub_slug)
|
||||
if result:
|
||||
card_slug = result[0].split(':')[1]
|
||||
card_id = context.get('%s_id' % card_slug)
|
||||
if card_id:
|
||||
url += '&related=carddef:%s:%s' % (card_slug, card_id)
|
||||
url += '&limit=%s&sort=desc' % settings.WCS_USER_FORMS_LIMIT
|
||||
return url
|
||||
|
||||
|
|
|
@ -266,15 +266,17 @@ def test_form_cell_render(mock_send):
|
|||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_current_forms_cell_setup(mock_send):
|
||||
cell = WcsCurrentFormsCell()
|
||||
page = Page.objects.create(title='xxx', slug='test_form_cell_render', template_name='standard')
|
||||
cell = WcsCurrentFormsCell(page=page)
|
||||
form_class = cell.get_default_form_class()
|
||||
form = form_class()
|
||||
form = form_class(instance=cell)
|
||||
assert form.fields['wcs_site'].widget.choices == [
|
||||
('', 'All'),
|
||||
('default', 'test'),
|
||||
('other', 'test2'),
|
||||
]
|
||||
assert 'current_forms' in form.fields
|
||||
assert 'filter_by_card' not in form.fields
|
||||
assert cell.get_additional_label() == 'All Sites - Current Forms'
|
||||
cell.wcs_site = 'default'
|
||||
assert cell.get_additional_label() == 'test - Current Forms'
|
||||
|
@ -288,6 +290,16 @@ def test_current_forms_cell_setup(mock_send):
|
|||
cell.done_forms = True
|
||||
assert cell.get_additional_label() == 'All Sites - Done Forms'
|
||||
|
||||
page.sub_slug = 'foobar'
|
||||
page.save()
|
||||
form = form_class(instance=cell)
|
||||
assert 'filter_by_card' not in form.fields
|
||||
|
||||
page.sub_slug = 'card_model_1_id'
|
||||
page.save()
|
||||
form = form_class(instance=cell)
|
||||
assert 'filter_by_card' in form.fields
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_current_forms_cell_render(mock_send, context):
|
||||
|
@ -458,6 +470,24 @@ def test_current_forms_cell_render(mock_send, context):
|
|||
result = cell.render(context)
|
||||
assert '<h2>Foo bar</h2>' in result
|
||||
|
||||
# check card filtering
|
||||
cell.include_forms_user_can_access = False
|
||||
cell.filter_by_card = True
|
||||
cell.save()
|
||||
url = cell.get_api_url(context)
|
||||
assert url == '/api/user/forms/?status=done&limit=100&sort=desc'
|
||||
page.sub_slug = 'unknown'
|
||||
page.save()
|
||||
url = cell.get_api_url(context)
|
||||
assert url == '/api/user/forms/?status=done&limit=100&sort=desc'
|
||||
page.sub_slug = 'card_model_1_id'
|
||||
page.save()
|
||||
url = cell.get_api_url(context)
|
||||
assert url == '/api/user/forms/?status=done&limit=100&sort=desc'
|
||||
context['card_model_1_id'] = '42'
|
||||
url = cell.get_api_url(context)
|
||||
assert url == '/api/user/forms/?status=done&related=carddef:card_model_1:42&limit=100&sort=desc'
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_current_forms_cell_validity(mock_send, context):
|
||||
|
|
Loading…
Reference in New Issue