paginacja paragonow

This commit is contained in:
Mateusz Gruszczyński
2025-08-12 23:08:07 +02:00
parent 740c02b42b
commit a224ec1c2a
2 changed files with 47 additions and 2 deletions

23
app.py
View File

@@ -2392,14 +2392,24 @@ def delete_user(user_id):
flash("Użytkownik usunięty", "success")
return redirect(url_for("list_users"))
@app.route("/admin/receipts/<id>")
@login_required
@admin_required
def admin_receipts(id):
try:
if id == "all":
receipts = Receipt.query.order_by(Receipt.uploaded_at.desc()).all()
per_page = 24
page = request.args.get("page", 1, type=int)
total_count = Receipt.query.count()
total_pages = (total_count + per_page - 1) // per_page
receipts = (
Receipt.query.order_by(Receipt.uploaded_at.desc())
.offset((page - 1) * per_page)
.limit(per_page)
.all()
)
upload_folder = app.config["UPLOAD_FOLDER"]
all_db_filenames = set(r.filename for r in receipts)
files_on_disk = set(os.listdir(upload_folder))
@@ -2418,15 +2428,24 @@ def admin_receipts(id):
.all()
)
stale_files = []
page = 1
total_pages = 1
except ValueError:
flash("Nieprawidłowe ID listy.", "danger")
return redirect(url_for("admin_panel"))
args_without_page = request.args.to_dict()
args_without_page.pop('page', None)
return render_template(
"admin/receipts.html",
receipts=receipts,
orphan_files=stale_files,
orphan_files_count=len(stale_files),
page=page,
total_pages=total_pages,
id=id,
args_without_page=args_without_page,
)

View File

@@ -66,6 +66,32 @@
</div>
</div>
<nav aria-label="Nawigacja stron">
<ul class="pagination justify-content-center">
{# Link do poprzedniej strony #}
<li class="page-item {% if page <= 1 %}disabled{% endif %}">
<a class="page-link" href="{{ url_for('admin_receipts', id=id, **args_without_page, page=page-1) }}" tabindex="-1">
« Poprzednia
</a>
</li>
{# Linki do numerów stron #}
{% for p in range(1, total_pages + 1) %}
<li class="page-item {% if p == page %}active{% endif %}">
<a class="page-link" href="{{ url_for('admin_receipts', id=id, **args_without_page, page=p) }}">{{ p }}</a>
</li>
{% endfor %}
{# Link do następnej strony #}
<li class="page-item {% if page >= total_pages %}disabled{% endif %}">
<a class="page-link" href="{{ url_for('admin_receipts', id=id, **args_without_page, page=page+1) }}">Następna »</a>
</li>
</ul>
</nav>
{% if orphan_files and request.path.endswith('/all') %}
<hr class="my-4">
<h4 class="mt-3 mb-2 text-warning">Znalezione nieprzypisane pliki ({{ orphan_files_count }})</h4>