Shop update
This commit is contained in:
@@ -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"""
|
||||
|
||||
Reference in New Issue
Block a user