diff options
| -rw-r--r-- | ihatemoney/static/css/main.css | 9 | ||||
| -rw-r--r-- | ihatemoney/templates/list_bills.html | 28 | ||||
| -rw-r--r-- | ihatemoney/web.py | 6 |
3 files changed, 40 insertions, 3 deletions
diff --git a/ihatemoney/static/css/main.css b/ihatemoney/static/css/main.css index 1a7dc1f..9c02b28 100644 --- a/ihatemoney/static/css/main.css +++ b/ihatemoney/static/css/main.css @@ -272,6 +272,15 @@ footer .footer-left { margin-top: 30px; } +#previous-page { + margin-top: 30px; +} + +#next-page { + margin-top: 30px; + padding-left: 2em; +} + /* Avoid text color flickering when it loose focus as the modal appears */ .btn-primary[data-toggle="modal"] { color: #fff; diff --git a/ihatemoney/templates/list_bills.html b/ihatemoney/templates/list_bills.html index 84f7299..0f2a68a 100644 --- a/ihatemoney/templates/list_bills.html +++ b/ihatemoney/templates/list_bills.html @@ -97,13 +97,23 @@ </div> </div> - {% if bills.count() > 0 %} +{% if bills.pages > 1 %} + <span id="previous-page" class="float-left"> + <a class="btn btn-outline-secondary float-left {% if bills.page == 1 %}disabled{% endif %}" href="{{ url_for('main.list_bills', page=bills.prev_num) }}">« {{ _("Newer bills") }}</a> + </span> + + <span id="next-page" class="float-left"> + <a class="btn btn-outline-secondary float-left {% if bills.page == bills.pages %}disabled{% endif %}" href="{{ url_for('main.list_bills', page=bills.next_num) }}">{{ _("Older bills") }} »</a> + </span> +{% endif %} + + {% if bills.total > 0 %} <div class="clearfix"></div> <table id="bill_table" class="col table table-striped table-hover table-responsive-sm"> <thead><tr><th>{{ _("When?") }}</th><th>{{ _("Who paid?") }}</<th><th>{{ _("For what?") }}</th><th>{{ _("For whom?") }}</th><th>{{ _("How much?") }}</th><th>{{ _("Actions") }}</th></tr></thead> <tbody> - {% for bill in bills %} + {% for bill in bills.items %} <tr owers="{{bill.owers|join(',','id')}}" payer="{{bill.payer.id}}"> <td> <span data-toggle="tooltip" data-placement="top" @@ -133,6 +143,20 @@ </tbody> </table> +{% if bills.pages > 1 %} +<ul class="pagination"> + <li class="page-item {% if bills.page == 1 %}disabled{% endif %}"><a class="page-link" href="{{ url_for('main.list_bills', page=bills.prev_num) }}">« Newer bills</a></li> + {%- for page in bills.iter_pages() %} + {% if page %} + <li class="page-item {% if page == bills.page %}active{% endif %}"><a class="page-link" href="{{ url_for('main.list_bills', page=page) }}">{{ page }}</a></li> + {% else %} + <li class="page-item disabled"><span class="ellipsis page-link">…</span></li> + {% endif %} + {%- endfor %} + <li class="page-item {% if bills.page == bills.pages %}disabled{% endif %}"><a class="page-link" href="{{ url_for('main.list_bills', page=bills.next_num) }}">Older bills »</a></li> +</ul> +{% endif %} + {% else %} <div class="py-3 d-flex justify-content-center empty-bill"> <div class="card d-inline-flex p-2"> diff --git a/ihatemoney/web.py b/ihatemoney/web.py index d45190c..1b80ab6 100644 --- a/ihatemoney/web.py +++ b/ihatemoney/web.py @@ -586,7 +586,11 @@ def list_bills(): if "last_selected_payer" in session: bill_form.payer.data = session["last_selected_payer"] # Preload the "owers" relationship for all bills - bills = g.project.get_bills().options(orm.subqueryload(Bill.owers)) + bills = ( + g.project.get_bills() + .options(orm.subqueryload(Bill.owers)) + .paginate(per_page=100, error_out=True) + ) return render_template( "list_bills.html", |
