invoicing: add filters on payer fields and user name (#75054)
gitea/lingo/pipeline/head This commit looks good Details

This commit is contained in:
Lauréline Guérin 2023-03-02 18:25:03 +01:00
parent 5723ed2a2f
commit 054d63bf41
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 184 additions and 0 deletions

View File

@ -61,10 +61,32 @@ class AbstractInvoiceFilterSet(django_filters.FilterSet):
payer_external_id = django_filters.CharFilter(
label=_('Payer (external ID)'),
)
payer_first_name = django_filters.CharFilter(
label=_('Payer first name'),
lookup_expr='icontains',
)
payer_last_name = django_filters.CharFilter(
label=_('Payer last name'),
lookup_expr='icontains',
)
payer_demat = django_filters.BooleanFilter(
label=_('Payer demat'),
)
payer_direct_debit = django_filters.BooleanFilter(
label=_('Payer direct debit'),
)
user_external_id = django_filters.CharFilter(
label=_('User (external ID)'),
method='filter_user_external_id',
)
user_first_name = django_filters.CharFilter(
label=_('User first name'),
method='filter_user_first_name',
)
user_last_name = django_filters.CharFilter(
label=_('User last name'),
method='filter_user_last_name',
)
def __init__(self, *args, **kwargs):
self.pool = kwargs.pop('pool')
@ -84,6 +106,24 @@ class AbstractInvoiceFilterSet(django_filters.FilterSet):
lines = line_model.objects.filter(user_external_id=value).values('invoice')
return queryset.filter(pk__in=lines)
def filter_user_first_name(self, queryset, name, value):
if not value:
return queryset
line_model = InvoiceLine
if self.pool.draft:
line_model = DraftInvoiceLine
lines = line_model.objects.filter(user_first_name__icontains=value).values('invoice')
return queryset.filter(pk__in=lines)
def filter_user_last_name(self, queryset, name, value):
if not value:
return queryset
line_model = InvoiceLine
if self.pool.draft:
line_model = DraftInvoiceLine
lines = line_model.objects.filter(user_last_name__icontains=value).values('invoice')
return queryset.filter(pk__in=lines)
class DraftInvoiceFilterSet(AbstractInvoiceFilterSet):
class Meta:
@ -114,9 +154,31 @@ class AbstractLineFilterSet(django_filters.FilterSet):
payer_external_id = django_filters.CharFilter(
label=_('Payer (external ID)'),
)
payer_first_name = django_filters.CharFilter(
label=_('Payer first name'),
lookup_expr='icontains',
)
payer_last_name = django_filters.CharFilter(
label=_('Payer last name'),
lookup_expr='icontains',
)
payer_demat = django_filters.BooleanFilter(
label=_('Payer demat'),
)
payer_direct_debit = django_filters.BooleanFilter(
label=_('Payer direct debit'),
)
user_external_id = django_filters.CharFilter(
label=_('User (external ID)'),
)
user_first_name = django_filters.CharFilter(
label=_('User first name'),
lookup_expr='icontains',
)
user_last_name = django_filters.CharFilter(
label=_('User last name'),
lookup_expr='icontains',
)
status = django_filters.ChoiceFilter(
label=_('Status'),
widget=forms.RadioSelect,

View File

@ -811,6 +811,36 @@ def test_detail_pool_invoices(app, admin_user, draft):
params={'payer_external_id': 'payer:2'},
)
assert len(resp.pyquery('li.invoice')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_first_name': 'first'},
)
assert len(resp.pyquery('li.invoice')) == 2
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_first_name': 'first1'},
)
assert len(resp.pyquery('li.invoice')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_last_name': 'name'},
)
assert len(resp.pyquery('li.invoice')) == 2
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_last_name': 'name1'},
)
assert len(resp.pyquery('li.invoice')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_demat': True},
)
assert len(resp.pyquery('li.invoice')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_direct_debit': True},
)
assert len(resp.pyquery('li.invoice')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'user_external_id': 'user:1'},
@ -821,6 +851,26 @@ def test_detail_pool_invoices(app, admin_user, draft):
params={'user_external_id': 'user:2'},
)
assert len(resp.pyquery('li.invoice')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'user_first_name': 'user'},
)
assert len(resp.pyquery('li.invoice')) == 2
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'user_first_name': 'user2'},
)
assert len(resp.pyquery('li.invoice')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'user_last_name': 'name'},
)
assert len(resp.pyquery('li.invoice')) == 2
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
params={'user_last_name': 'name1'},
)
assert len(resp.pyquery('li.invoice')) == 2
def test_journal_pool(app, admin_user):
@ -1027,7 +1077,13 @@ def test_journal_pool_lines(app, admin_user, draft):
pricing_data={'foo': 'bar'},
event={'event': 'foobar'},
user_external_id='user:1',
user_first_name='First1',
user_last_name='Last1',
payer_external_id='payer:1',
payer_first_name='First1',
payer_last_name='Last1',
payer_demat=True,
payer_direct_debit=False,
),
]
errors = [
@ -1078,7 +1134,13 @@ def test_journal_pool_lines(app, admin_user, draft):
},
event={'event': 'foobar'},
user_external_id='user:1',
user_first_name='First1',
user_last_name='Last1',
payer_external_id='payer:2',
payer_first_name='First2',
payer_last_name='Last2',
payer_demat=False,
payer_direct_debit=True,
)
)
if not draft:
@ -1094,6 +1156,10 @@ def test_journal_pool_lines(app, admin_user, draft):
total_amount=1,
user_external_id='user:2',
payer_external_id='payer:2',
payer_first_name='First2',
payer_last_name='Last2',
payer_demat=False,
payer_direct_debit=True,
regie=regie,
)
lines.append(
@ -1108,7 +1174,13 @@ def test_journal_pool_lines(app, admin_user, draft):
pricing_data={'foo': 'bar'},
event={'event': 'foobar2'},
user_external_id='user:2',
user_first_name='First2',
user_last_name='Last2',
payer_external_id='payer:2',
payer_first_name='First2',
payer_last_name='Last2',
payer_demat=False,
payer_direct_debit=True,
from_injected_line=injected_line,
),
)
@ -1356,6 +1428,36 @@ def test_journal_pool_lines(app, admin_user, draft):
params={'payer_external_id': 'payer:2'},
)
assert len(resp.pyquery('tr td.status')) == 22
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_first_name': 'first'},
)
assert len(resp.pyquery('tr td.status')) == 23
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_first_name': 'first1'},
)
assert len(resp.pyquery('tr td.status')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_last_name': 'last'},
)
assert len(resp.pyquery('tr td.status')) == 23
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_last_name': 'last1'},
)
assert len(resp.pyquery('tr td.status')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_demat': True},
)
assert len(resp.pyquery('tr td.status')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'payer_direct_debit': True},
)
assert len(resp.pyquery('tr td.status')) == 22
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'user_external_id': 'user:1'},
@ -1366,6 +1468,26 @@ def test_journal_pool_lines(app, admin_user, draft):
params={'user_external_id': 'user:2'},
)
assert len(resp.pyquery('tr td.status')) == 1
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'user_first_name': 'first'},
)
assert len(resp.pyquery('tr td.status')) == 23
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'user_first_name': 'first1'},
)
assert len(resp.pyquery('tr td.status')) == 22
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'user_last_name': 'last'},
)
assert len(resp.pyquery('tr td.status')) == 23
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'user_last_name': 'last1'},
)
assert len(resp.pyquery('tr td.status')) == 22
resp = app.get(
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
params={'status': 'success'},