diff --git a/app.py b/app.py index e9ee88b..d58aa47 100644 --- a/app.py +++ b/app.py @@ -1,3 +1,4 @@ +import math import os import time import logging @@ -110,7 +111,7 @@ def index(instance_id): gesamtwert = session.get(f'{session_prefix}gesamtwert', 0.0) change = session.get(f'{session_prefix}change', "0.00") givenfloat = session.get(f'{session_prefix}given', 0.0) - items = {i: session.get(f'{session_prefix}item{i}', 0) for i in range(1, 7)} + items = {p: session.get(f'{session_prefix}item{p}', 0) for p in products} background = "bg-white" @@ -122,7 +123,7 @@ def index(instance_id): gesamtwert = 0.0 change = "0.00" givenfloat = 0.0 - items = {i: 0 for i in range(1, 7)} + items = {p: 0 for p in products} background = "bg-white" elif action == "calculate_change": given = request.form.get('given', "0", type=float) @@ -138,15 +139,21 @@ def index(instance_id): session[f'{session_prefix}gesamtwert'] = round(gesamtwert, 2) session[f'{session_prefix}change'] = change session[f'{session_prefix}given'] = round(givenfloat, 2) - for i in range(1, 7): - session[f'{session_prefix}item{i}'] = items[i] + for p in products: + session[f'{session_prefix}item{p}'] = items[p] # Update our local variables after processing so they reflect what is rendered gesamtwert = round(gesamtwert, 2) + n = len(products) + grid_cols = math.ceil(math.sqrt(n)) if n else 1 + grid_rows = math.ceil(n / grid_cols) if n else 1 + return render_template("index.html", instance_id=instance_id, products=products, + grid_cols=grid_cols, + grid_rows=grid_rows, gesamtwert=f"{gesamtwert:.2f}", change=change, given=f"{givenfloat:.2f}" if givenfloat > 0 else "0", @@ -202,19 +209,49 @@ def admin(instance_id): conn.close() session.pop(auth_key, None) return redirect(url_for('landing')) + + for key in request.form: + if key.startswith('delete_') and request.form[key]: + pos = int(key.split('_')[1]) + conn.execute('DELETE FROM products WHERE instance_id = ? AND position = ?', + (instance_id, pos)) + conn.commit() + conn.close() + return redirect(url_for('admin', instance_id=instance_id)) + + if action == "add_product": + name = request.form.get('add_name', '').strip() + price = request.form.get('add_price', type=float) + icon = request.form.get('add_icon', '🛒').strip() or '🛒' + color = request.form.get('add_color', 'btn-primary') + if name and price is not None: + max_pos = conn.execute( + 'SELECT COALESCE(MAX(position), 0) FROM products WHERE instance_id = ?', + (instance_id,) + ).fetchone()[0] + conn.execute( + 'INSERT INTO products (instance_id, position, name, price, icon, color_class) VALUES (?, ?, ?, ?, ?, ?)', + (instance_id, max_pos + 1, name, price, icon, color) + ) + conn.commit() + conn.close() + return redirect(url_for('admin', instance_id=instance_id)) - # Additional safety: Ensure that the post request isn't processed if not authenticated - # (Though we checked above, this is for the product update form submission) - for i in range(1, 7): - name = request.form.get(f'name_{i}') - price = request.form.get(f'price_{i}', type=float) - icon = request.form.get(f'icon_{i}') - color = request.form.get(f'color_{i}') + # Update existing products + products_rows = conn.execute( + 'SELECT position FROM products WHERE instance_id = ?', (instance_id,) + ).fetchall() + for row in products_rows: + pos = row['position'] + name = request.form.get(f'name_{pos}') + price = request.form.get(f'price_{pos}', type=float) + icon = request.form.get(f'icon_{pos}') + color = request.form.get(f'color_{pos}') if name is not None and price is not None: conn.execute(''' UPDATE products SET name = ?, price = ?, icon = ?, color_class = ? WHERE instance_id = ? AND position = ? - ''', (name, price, icon, color, instance_id, i)) + ''', (name, price, icon, color, instance_id, pos)) conn.commit() conn.close() return redirect(url_for('index', instance_id=instance_id)) diff --git a/templates/admin.html b/templates/admin.html index 349080c..edbe133 100644 --- a/templates/admin.html +++ b/templates/admin.html @@ -31,21 +31,26 @@ Preis (€) Icon/Emoji Farbe (Bootstrap Klasse) + - {% for i in range(1, 7) %} - {% set prod = products[i] %} + {% if not products %} - {{ i }} - Keine Artikel. Füge unten einen neuen hinzu. + + {% endif %} + {% for pos, prod in products|dictsort %} + + {{ pos }} + - - -