Shop update

This commit is contained in:
2026-05-30 18:46:43 +02:00
parent c2797ee401
commit 44c45f5410
8 changed files with 1428 additions and 17 deletions
+107
View File
@@ -369,6 +369,113 @@ def export_logs():
except Exception as e:
return jsonify({'success': False, 'message': str(e)}), 500
# ===== STORE ROUTES =====
@app.route('/api/store/items', methods=['GET'])
def get_store_items():
return jsonify(data_manager.get_store_items())
@app.route('/api/store/items', methods=['POST'])
@require_admin
def add_store_item():
try:
data = request.json
name = (data.get('name') or '').strip()
price = float(data.get('price', 0))
stock = int(data.get('stock', 0))
image = data.get('image') or None
if not name:
return jsonify({'success': False, 'message': 'Name required'}), 400
if price < 0:
return jsonify({'success': False, 'message': 'Price cannot be negative'}), 400
if stock < 0:
return jsonify({'success': False, 'message': 'Stock cannot be negative'}), 400
if data_manager.add_store_item(name, price, stock, image):
return jsonify({'success': True})
return jsonify({'success': False, 'message': 'Error adding item'}), 400
except Exception as e:
return jsonify({'success': False, 'message': str(e)}), 400
@app.route('/api/store/items/<int:item_id>', methods=['PUT'])
@require_admin
def update_store_item(item_id):
try:
data = request.json
name = (data.get('name') or '').strip()
price = float(data.get('price', 0))
stock = int(data.get('stock', 0))
image = data.get('image') or None
if not name:
return jsonify({'success': False, 'message': 'Name required'}), 400
if data_manager.update_store_item(item_id, name, price, stock, image):
return jsonify({'success': True})
return jsonify({'success': False, 'message': 'Item not found'}), 404
except Exception as e:
return jsonify({'success': False, 'message': str(e)}), 400
@app.route('/api/store/items/<int:item_id>', methods=['DELETE'])
@require_admin
def delete_store_item(item_id):
if data_manager.delete_store_item(item_id):
return jsonify({'success': True})
return jsonify({'success': False, 'message': 'Item not found'}), 404
@app.route('/api/store/payments', methods=['GET'])
def get_payments():
return jsonify(data_manager.get_payments())
@app.route('/api/store/payments', methods=['POST'])
def log_payment():
try:
data = request.json
items = data.get('items', [])
total = float(data.get('total', 0))
balance_before = float(data.get('balance_before', 0))
balance_after = float(data.get('balance_after', 0))
cart_items = data.get('cart_items', []) # [{id, name, price, qty, image}]
# Deduct stock for each sold item
for ci in cart_items:
item_id = ci.get('id')
new_stock = ci.get('new_stock')
name = ci.get('name', '')
price = ci.get('price', 0)
image = ci.get('image')
if item_id is not None and new_stock is not None:
data_manager.update_store_item(item_id, name, float(price), int(new_stock), image)
# Update balance atomically with payment log
data_manager.set_balance(balance_after)
if data_manager.log_payment(items, total, balance_before, balance_after):
return jsonify({'success': True})
return jsonify({'success': False, 'message': 'Error logging payment'}), 400
except Exception as e:
return jsonify({'success': False, 'message': str(e)}), 400
@app.route('/api/store/payments', methods=['DELETE'])
@require_admin
def clear_payments():
if data_manager.clear_payments():
return jsonify({'success': True})
return jsonify({'success': False, 'message': 'Error clearing payments'}), 400
@app.route('/api/store/balance', methods=['GET'])
def get_balance():
return jsonify({'balance': data_manager.get_balance()})
@app.route('/api/store/balance', methods=['PUT'])
@require_admin
def set_balance():
try:
data = request.json
amount = float(data.get('balance', 0))
if data_manager.set_balance(amount):
return jsonify({'success': True, 'balance': round(amount, 2)})
return jsonify({'success': False, 'message': 'Error setting balance'}), 400
except Exception as e:
return jsonify({'success': False, 'message': str(e)}), 400
@app.route('/api/stats', methods=['GET'])
def get_stats():
"""Get statistics"""