Artikel-Verwaltung und responsive Tiles
- Admin: Artikel löschen (min. 1 erforderlich) - Admin: Neue Artikel hinzufügen - Admin: Update-Logik für variable Artikelanzahl - Kasse: Dynamische items/Session pro Produkt - Kasse: CSS Grid Layout - alle Artikel fit auf einen Bildschirm - Kasse: Leerzustand wenn keine Artikel Made-with: Cursor
This commit is contained in:
61
app.py
61
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))
|
||||
|
||||
Reference in New Issue
Block a user