diff --git a/combo/apps/lingo/forms.py b/combo/apps/lingo/forms.py index 51d6f17d..ec2af936 100644 --- a/combo/apps/lingo/forms.py +++ b/combo/apps/lingo/forms.py @@ -152,3 +152,12 @@ class TransactionExportForm(forms.Form): today = datetime.date.today() self.initial['start_date'] = today - datetime.timedelta(days=30) self.initial['end_date'] = today + + +class TransactionSearchForm(forms.Form): + regie = forms.ModelChoiceField(queryset=Regie.objects.none(), empty_label=_('All regies'), required=False) + q = forms.CharField(required=False) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['regie'].queryset = Regie.objects.all() diff --git a/combo/apps/lingo/manager_views.py b/combo/apps/lingo/manager_views.py index 586f60ae..5381e590 100644 --- a/combo/apps/lingo/manager_views.py +++ b/combo/apps/lingo/manager_views.py @@ -30,7 +30,7 @@ from django.utils.timezone import make_aware, now from django.utils.translation import ugettext_lazy as _ from django.views.generic import CreateView, DeleteView, ListView, UpdateView, View -from .forms import PaymentBackendForm, RegieForm, TransactionExportForm +from .forms import PaymentBackendForm, RegieForm, TransactionExportForm, TransactionSearchForm from .models import BasketItem, PaymentBackend, Regie, Transaction @@ -97,16 +97,23 @@ class TransactionListView(ListView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['query'] = self.request.GET.get('q') or '' + context['form'] = self.form return context def get_queryset(self): + self.form = TransactionSearchForm(data=self.request.GET) qs = ( Transaction.objects.select_related('user') .prefetch_related(Prefetch('items', to_attr='prefetched_items')) .filter(status__in=(eopayment.PAID, eopayment.ACCEPTED)) .order_by('-start_date') ) - query = self.request.GET.get('q') + query, regie = None, None + if self.form.is_valid(): + query = self.form.cleaned_data['q'] + regie = self.form.cleaned_data['regie'] + if regie: + qs = qs.filter(regie=regie) if query: try: date = date_parser.parse(query, dayfirst=True) diff --git a/combo/apps/lingo/templates/lingo/transaction_list.html b/combo/apps/lingo/templates/lingo/transaction_list.html index e4eeaa5c..f614d236 100644 --- a/combo/apps/lingo/templates/lingo/transaction_list.html +++ b/combo/apps/lingo/templates/lingo/transaction_list.html @@ -14,7 +14,8 @@ {% block content %}
-

+

+ {{ form.regie }} {% trans "(supports order identifiers, transaction identifiers, and dates)" %}

@@ -55,14 +56,10 @@ {% else %}
- {% if query %} - {% blocktrans %} - No transactions found matching "{{query}}". - {% endblocktrans %} + {% if form.cleaned_data.q or form.cleaned_data.regie %} + {% trans "No transactions found matching the current search." %} {% else %} - {% blocktrans %} - This site doesn't have any transaction yet. - {% endblocktrans %} + {% trans "This site doesn't have any transaction yet." %} {% endif %}
{% endif %} diff --git a/tests/test_lingo_manager.py b/tests/test_lingo_manager.py index 682df5ed..d825da9a 100644 --- a/tests/test_lingo_manager.py +++ b/tests/test_lingo_manager.py @@ -233,20 +233,26 @@ def test_download_transaction(app, admin_user, regie): assert Decimal(row[6]) == b_item.amount -def test_transactions_search(app, admin_user): +def test_transactions_search(app, admin_user, payment_backend, regie): + regie2 = Regie.objects.create(label='Test-2', slug='regie-2', payment_backend=payment_backend) for i in range(50): - Transaction( + transaction = Transaction( status=eopayment.PAID, order_id='order id %s' % (i + 1), bank_transaction_id='bank id %s' % (i + 1), amount=1 + i, - ).save() + ) + if i % 3 == 0: + transaction.regie = regie + elif i % 3 == 1: + transaction.regie = regie2 + transaction.save() app = login(app) with CaptureQueriesContext(connection) as ctx: resp = app.get('/manage/lingo/', status=200) assert resp.text.count('