zmiany ux i nowe funckje

This commit is contained in:
Mateusz Gruszczyński
2025-07-10 13:03:33 +02:00
parent 40fa601bbe
commit f36739aa40
11 changed files with 317 additions and 77 deletions

79
app.py
View File

@@ -35,20 +35,6 @@ UPLOAD_FOLDER = app.config.get('UPLOAD_FOLDER', 'uploads')
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp'}
AUTHORIZED_COOKIE_VALUE = app.config.get('AUTHORIZED_COOKIE_VALUE', '80d31cdfe63539c9')
PROTECTED_JS_FILES = {
"live.js",
"notes.js",
"sockets.js",
"product_suggestion.js",
"expenses.js",
"toggle_button.js",
"user_management.js",
"mass_add.js",
"functions.js",
"clickable_row.js",
"receipt_section.js"
}
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
failed_login_attempts = defaultdict(deque)
@@ -273,7 +259,7 @@ def require_system_password():
if request.endpoint == 'static_bp.serve_js':
requested_file = request.view_args.get("filename", "")
if requested_file in PROTECTED_JS_FILES:
if requested_file.endswith(".js"):
return redirect(url_for('system_auth', next=request.url))
else:
return
@@ -596,7 +582,7 @@ def all_products():
return {'allproducts': all_names}
@app.route('/upload_receipt/<int:list_id>', methods=['POST'])
""" @app.route('/upload_receipt/<int:list_id>', methods=['POST'])
def upload_receipt(list_id):
if 'receipt' not in request.files:
flash('Brak pliku', 'danger')
@@ -618,6 +604,41 @@ def upload_receipt(list_id):
return redirect(request.referrer)
flash('Niedozwolony format pliku', 'danger')
return redirect(request.referrer) """
@app.route('/upload_receipt/<int:list_id>', methods=['POST'])
def upload_receipt(list_id):
if 'receipt' not in request.files:
if request.is_json or request.headers.get('X-Requested-With') == 'XMLHttpRequest':
return jsonify({'success': False, 'message': 'Brak pliku'}), 400
flash('Brak pliku', 'danger')
return redirect(request.referrer)
file = request.files['receipt']
if file.filename == '':
if request.is_json or request.headers.get('X-Requested-With') == 'XMLHttpRequest':
return jsonify({'success': False, 'message': 'Nie wybrano pliku'}), 400
flash('Nie wybrano pliku', 'danger')
return redirect(request.referrer)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
full_filename = f"list_{list_id}_{filename}"
file_path = os.path.join(app.config['UPLOAD_FOLDER'], full_filename)
save_resized_image(file, file_path)
if request.is_json or request.headers.get('X-Requested-With') == 'XMLHttpRequest':
url = url_for('uploaded_file', filename=full_filename)
return jsonify({'success': True, 'url': url})
flash('Wgrano paragon', 'success')
return redirect(request.referrer)
if request.is_json or request.headers.get('X-Requested-With') == 'XMLHttpRequest':
return jsonify({'success': False, 'message': 'Niedozwolony format pliku'}), 400
flash('Niedozwolony format pliku', 'danger')
return redirect(request.referrer)
@app.route('/uploads/<filename>')
@@ -1096,10 +1117,19 @@ def demote_user(user_id):
def handle_delete_item(data):
item = Item.query.get(data['item_id'])
if item:
list_id = item.list_id
db.session.delete(item)
db.session.commit()
emit('item_deleted', {'item_id': item.id}, to=str(item.list_id))
purchased_count, total_count, percent = get_progress(list_id)
emit('progress_updated', {
'purchased_count': purchased_count,
'total_count': total_count,
'percent': percent
}, to=str(list_id))
@socketio.on('edit_item')
def handle_edit_item(data):
item = Item.query.get(data['item_id'])
@@ -1188,6 +1218,14 @@ def handle_add_item(data):
'added_by': current_user.username if current_user.is_authenticated else 'Gość'
}, to=str(list_id), include_self=True)
purchased_count, total_count, percent = get_progress(list_id)
emit('progress_updated', {
'purchased_count': purchased_count,
'total_count': total_count,
'percent': percent
}, to=str(list_id))
@socketio.on('check_item')
def handle_check_item(data):
item = Item.query.get(data['item_id'])
@@ -1265,6 +1303,15 @@ def handle_add_expense(data):
'total': total
}, to=str(list_id))
@socketio.on('receipt_uploaded')
def handle_receipt_uploaded(data):
list_id = data['list_id']
url = data['url']
emit('receipt_added', {
'url': url
}, to=str(list_id), include_self=False)
@app.cli.command('create_db')
def create_db():
db.create_all()