lingo: add support for filtering transaction list (#11297)
This commit is contained in:
parent
029271b2a6
commit
b4a7305ba9
|
@ -15,8 +15,12 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import csv
|
||||
import datetime
|
||||
from dateutil import parser as date_parser
|
||||
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
from django.db.models import Q
|
||||
from django.utils.timezone import make_aware
|
||||
from django.views.generic import (CreateView, UpdateView, ListView,
|
||||
DeleteView, TemplateView)
|
||||
from django.http import HttpResponse
|
||||
|
@ -55,9 +59,23 @@ class TransactionListView(ListView):
|
|||
model = Transaction
|
||||
paginate_by = 10
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(TransactionListView, self).get_context_data(**kwargs)
|
||||
context['query'] = self.request.GET.get('q') or ''
|
||||
return context
|
||||
|
||||
def get_queryset(self):
|
||||
return Transaction.objects.filter(
|
||||
qs = Transaction.objects.filter(
|
||||
status__in=(eopayment.PAID, eopayment.ACCEPTED)).order_by('-start_date')
|
||||
query = self.request.GET.get('q')
|
||||
if query:
|
||||
try:
|
||||
date = date_parser.parse(query)
|
||||
date = make_aware(date)
|
||||
qs = qs.filter(start_date__gte=date, start_date__lt=date + datetime.timedelta(days=1))
|
||||
except ValueError:
|
||||
qs = qs.filter(Q(order_id=query) | Q(bank_transaction_id=query))
|
||||
return qs
|
||||
|
||||
|
||||
def download_transactions_csv(request):
|
||||
|
|
|
@ -13,6 +13,12 @@
|
|||
|
||||
{% block content %}
|
||||
|
||||
<form>
|
||||
<p><input name="q" type="search" value="{{query}}"> <button>{% trans 'Search' %}</button>
|
||||
<span class="help_text">{% trans "(supports order identifiers, transaction identifiers, and dates)" %}</span>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
{% if object_list %}
|
||||
<table class="main">
|
||||
<thead>
|
||||
|
@ -45,7 +51,7 @@
|
|||
{% if is_paginated %}
|
||||
<p class="paginator">
|
||||
{% if page_obj.has_previous %}
|
||||
<a href="?page={{ page_obj.previous_page_number }}"><<</a>
|
||||
<a href="?page={{ page_obj.previous_page_number }}&q={{ query|iriencode }}"><<</a>
|
||||
{% else %}
|
||||
<span><<</span>
|
||||
{% endif %}
|
||||
|
@ -57,7 +63,7 @@
|
|||
|
||||
|
||||
{% if page_obj.has_next %}
|
||||
<a href="?page={{ page_obj.next_page_number }}">>></a>
|
||||
<a href="?page={{ page_obj.next_page_number }}&q={{ query|iriencode }}">>></a>
|
||||
{% else %}
|
||||
<span>>></span>
|
||||
{% endif %}
|
||||
|
@ -68,9 +74,15 @@
|
|||
</div>
|
||||
{% else %}
|
||||
<div class="big-msg-info">
|
||||
{% if query %}
|
||||
{% blocktrans %}
|
||||
No transactions found matching "{{query}}".
|
||||
{% endblocktrans %}
|
||||
{% else %}
|
||||
{% blocktrans %}
|
||||
This site doesn't have any transaction yet.
|
||||
{% endblocktrans %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import datetime
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
from django.utils.timezone import now
|
||||
from webtest import TestApp
|
||||
import pytest
|
||||
|
||||
|
@ -128,6 +131,30 @@ def test_download_transaction(app, admin_user):
|
|||
assert row[5] == b_item.subject
|
||||
assert Decimal(row[6]) == b_item.amount
|
||||
|
||||
def test_transactions_search(app, admin_user):
|
||||
for i in range(50):
|
||||
Transaction(status=eopayment.PAID,
|
||||
order_id='order id %s' % (i+1),
|
||||
bank_transaction_id='bank id %s' % (i+1),
|
||||
amount=1+i).save()
|
||||
|
||||
app = login(app)
|
||||
resp = app.get('/manage/lingo/transactions/', status=200)
|
||||
assert resp.body.count('<tr') == 11
|
||||
|
||||
resp.form['q'] = 'order id 16'
|
||||
resp = resp.form.submit()
|
||||
assert resp.body.count('<tr') == 2
|
||||
|
||||
resp.form['q'] = now().strftime('%d/%m/%Y')
|
||||
resp = resp.form.submit()
|
||||
assert resp.body.count('<tr') == 11
|
||||
|
||||
resp.form['q'] = (now() + datetime.timedelta(days=2)).strftime('%d/%m%/Y')
|
||||
resp = resp.form.submit()
|
||||
assert resp.body.count('<tr') == 0
|
||||
assert 'No transactions found matching' in resp.body
|
||||
|
||||
def test_configure_invoices_cell(app, admin_user):
|
||||
page = Page(title='xxx', slug='test', template_name='standard')
|
||||
page.save()
|
||||
|
|
Loading…
Reference in New Issue