From 74ae7642e548bb270c8f5d566b095cf32a070a58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Wed, 23 Jul 2025 13:46:57 +0200 Subject: [PATCH] usprawnienia w panelu --- app.py | 48 +++++++++++++++++++++++++++++++- config.py | 3 +- templates/admin/admin_panel.html | 5 +++- templates/admin/edit_list.html | 27 ++++++++++++++++-- 4 files changed, 77 insertions(+), 6 deletions(-) diff --git a/app.py b/app.py index bf98b69..dd8d573 100644 --- a/app.py +++ b/app.py @@ -45,7 +45,7 @@ from config import Config from PIL import Image, ExifTags, ImageFilter, ImageOps from werkzeug.utils import secure_filename from werkzeug.middleware.proxy_fix import ProxyFix -from sqlalchemy import func, extract +from sqlalchemy import func, extract, inspect from collections import defaultdict, deque from functools import wraps @@ -99,6 +99,7 @@ active_users = {} def utcnow(): return datetime.now(timezone.utc) +app_start_time = utcnow() class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) @@ -1386,6 +1387,30 @@ def admin_panel(): process = psutil.Process(os.getpid()) app_mem = process.memory_info().rss // (1024 * 1024) # MB + # Engine info + db_engine = db.engine + db_info = { + "engine": db_engine.name, + "version": getattr(db_engine.dialect, "server_version_info", None), + "url": str(db_engine.url).split("?")[0], + } + + # Tabele + inspector = inspect(db_engine) + table_count = len(inspector.get_table_names()) + + # Rekordy (szybkie zliczenie) + record_total = ( + db.session.query(func.count(User.id)).scalar() + + db.session.query(func.count(ShoppingList.id)).scalar() + + db.session.query(func.count(Item.id)).scalar() + + db.session.query(func.count(Receipt.id)).scalar() + + db.session.query(func.count(Expense.id)).scalar() + ) + + # Uptime + uptime_minutes = int((datetime.now(timezone.utc) - app_start_time).total_seconds() // 60) + return render_template( "admin/admin_panel.html", user_count=user_count, @@ -1401,6 +1426,11 @@ def admin_panel(): python_version=sys.version, system_info=platform.platform(), app_memory=f"{app_mem} MB", + + db_info=db_info, + table_count=table_count, + record_total=record_total, + uptime_minutes=uptime_minutes, ) @@ -1778,6 +1808,22 @@ def edit_list(list_id): flash("Nie znaleziono produktu", "danger") return redirect(url_for("edit_list", list_id=list_id)) + elif action == "edit_quantity": + item = db.session.get(Item, request.form.get("item_id")) + if item and item.list_id == list_id: + try: + new_quantity = int(request.form.get("quantity")) + if new_quantity > 0: + item.quantity = new_quantity + db.session.commit() + flash("Zmieniono ilość produktu", "success") + except ValueError: + flash("Nieprawidłowa ilość", "danger") + else: + flash("Nie znaleziono produktu", "danger") + return redirect(url_for("edit_list", list_id=list_id)) + + return render_template( "admin/edit_list.html", list=l, diff --git a/config.py b/config.py index 5c74d03..82f6a43 100644 --- a/config.py +++ b/config.py @@ -1,11 +1,12 @@ import os +basedir = os.path.abspath(os.path.dirname(__file__)) class Config: SECRET_KEY = os.environ.get("SECRET_KEY", "D8pceNZ8q%YR7^7F&9wAC2") DB_ENGINE = os.environ.get("DB_ENGINE", "sqlite").lower() if DB_ENGINE == "sqlite": - SQLALCHEMY_DATABASE_URI = "sqlite:///instance/shopping.db" + SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(basedir, 'instance', 'shopping.db')}" elif DB_ENGINE == "pgsql": SQLALCHEMY_DATABASE_URI = f"postgresql://{os.environ['DB_USER']}:{os.environ['DB_PASSWORD']}@{os.environ['DB_HOST']}:{os.environ.get('DB_PORT', 5432)}/{os.environ['DB_NAME']}" elif DB_ENGINE == "mysql": diff --git a/templates/admin/admin_panel.html b/templates/admin/admin_panel.html index 6c3d3f6..18c1065 100644 --- a/templates/admin/admin_panel.html +++ b/templates/admin/admin_panel.html @@ -198,6 +198,9 @@ {% endblock %}
- Python: {{ python_version.split()[0] }} | {{ system_info }} | RAM app: {{ app_memory }} + Python: {{ python_version.split()[0] }} | {{ system_info }} | RAM app: {{ app_memory }} | + DB: {{ db_info.engine|upper }}{% if db_info.version %} v{{ db_info.version[0] }}{% endif %} | + Tabele: {{ table_count }} | Rekordy: {{ record_total }} | + Uptime: {{ uptime_minutes }} min
{% endblock %} \ No newline at end of file diff --git a/templates/admin/edit_list.html b/templates/admin/edit_list.html index c8c9b85..76743fc 100644 --- a/templates/admin/edit_list.html +++ b/templates/admin/edit_list.html @@ -65,8 +65,6 @@ - -
{{ item.name }} - (x{{ item.quantity }}) + (x{{ item.quantity }}) + + {% if item.note %} +
+ Notatka: {{ item.note }} +
+ {% endif %} + + {% if item.not_purchased_reason %} +
+ Powód: {{ item.not_purchased_reason }} +
+ {% endif %} + +
+ + +
+ + +
+
{% if item.purchased %}