zmiany w panelu

This commit is contained in:
Mateusz Gruszczyński
2025-07-12 23:06:55 +02:00
parent b590ebc6b6
commit 95c11589e2
5 changed files with 272 additions and 86 deletions

161
app.py
View File

@@ -839,15 +839,27 @@ def delete_user(user_id):
flash('Użytkownik usunięty', 'success')
return redirect(url_for('list_users'))
@app.route('/admin/receipts')
@app.route('/admin/receipts/<id>')
@login_required
@admin_required
def admin_receipts():
def admin_receipts(id):
all_files = os.listdir(app.config['UPLOAD_FOLDER'])
image_files = [f for f in all_files if allowed_file(f)]
if id == "all":
filtered_files = image_files
else:
try:
list_id = int(id)
receipt_prefix = f"list_{list_id}_"
filtered_files = [f for f in image_files if f.startswith(receipt_prefix)]
except ValueError:
flash("Nieprawidłowe ID listy.", "danger")
return redirect(url_for('admin_panel'))
return render_template(
'admin/receipts.html',
image_files=image_files,
image_files=filtered_files,
upload_folder=app.config['UPLOAD_FOLDER']
)
@@ -861,6 +873,10 @@ def delete_receipt(filename):
flash('Plik usunięty', 'success')
else:
flash('Plik nie istnieje', 'danger')
next_url = request.args.get('next')
if next_url:
return redirect(next_url)
return redirect(url_for('admin_receipts'))
@app.route('/admin/delete_selected_lists', methods=['POST'])
@@ -879,16 +895,6 @@ def delete_selected_lists():
flash('Usunięto wybrane listy', 'success')
return redirect(url_for('admin_panel'))
@app.route('/admin/archive_list/<int:list_id>')
@login_required
@admin_required
def archive_list(list_id):
l = ShoppingList.query.get_or_404(list_id)
l.is_archived = True
db.session.commit()
flash('Lista oznaczona jako archiwalna', 'success')
return redirect(url_for('admin_panel'))
@app.route('/admin/delete_all_items')
@login_required
@admin_required
@@ -905,55 +911,115 @@ def edit_list(list_id):
l = ShoppingList.query.get_or_404(list_id)
expenses = Expense.query.filter_by(list_id=list_id).all()
total_expense = sum(e.amount for e in expenses)
users = User.query.all()
items = Item.query.filter_by(list_id=list_id).order_by(Item.id.desc()).all()
# Pobranie listy plików paragonów
receipt_pattern = f"list_{list_id}_"
all_files = os.listdir(app.config['UPLOAD_FOLDER'])
receipts = [f for f in all_files if f.startswith(receipt_pattern)]
if request.method == 'POST':
new_title = request.form.get('title')
new_amount_str = request.form.get('amount')
is_archived = 'archived' in request.form
new_owner_id = request.form.get('owner_id')
action = request.form.get('action')
if new_title and new_title.strip():
l.title = new_title.strip()
if action == 'save':
new_title = request.form.get('title', '').strip()
new_amount_str = request.form.get('amount')
is_archived = 'archived' in request.form
is_public = 'public' in request.form
new_owner_id = request.form.get('owner_id')
l.is_archived = is_archived
if new_title:
l.title = new_title
if new_owner_id:
try:
new_owner_id_int = int(new_owner_id)
if User.query.get(new_owner_id_int):
l.owner_id = new_owner_id_int
else:
flash('Wybrany użytkownik nie istnieje', 'danger')
l.is_archived = is_archived
l.is_public = is_public
if new_owner_id:
try:
new_owner_id_int = int(new_owner_id)
if User.query.get(new_owner_id_int):
l.owner_id = new_owner_id_int
else:
flash('Wybrany użytkownik nie istnieje', 'danger')
return redirect(url_for('edit_list', list_id=list_id))
except ValueError:
flash('Niepoprawny ID użytkownika', 'danger')
return redirect(url_for('edit_list', list_id=list_id))
except ValueError:
flash('Niepoprawny ID użytkownika', 'danger')
return redirect(url_for('edit_list', list_id=list_id))
if new_amount_str:
try:
new_amount = float(new_amount_str)
if expenses:
if new_amount_str:
try:
new_amount = float(new_amount_str)
for expense in expenses:
db.session.delete(expense)
db.session.commit()
new_expense = Expense(list_id=list_id, amount=new_amount)
db.session.add(new_expense)
db.session.commit()
except ValueError:
flash('Niepoprawna kwota', 'danger')
return redirect(url_for('edit_list', list_id=list_id))
new_expense = Expense(list_id=list_id, amount=new_amount)
db.session.add(new_expense)
db.session.commit()
flash('Zaktualizowano tytuł, właściciela, archiwizację i/lub kwotę wydatku', 'success')
except ValueError:
flash('Niepoprawna kwota', 'danger')
return redirect(url_for('edit_list', list_id=list_id))
else:
db.session.commit()
flash('Zaktualizowano tytuł, właściciela i/lub archiwizację', 'success')
flash('Zapisano zmiany listy', 'success')
return redirect(url_for('edit_list', list_id=list_id))
return redirect(url_for('admin_panel'))
elif action == 'add_item':
item_name = request.form.get('item_name', '').strip()
quantity_str = request.form.get('quantity', '1')
if not item_name:
flash('Podaj nazwę produktu', 'danger')
return redirect(url_for('edit_list', list_id=list_id))
return render_template('admin/edit_list.html', list=l, total_expense=total_expense, users=users)
try:
quantity = int(quantity_str)
if quantity < 1:
quantity = 1
except ValueError:
quantity = 1
new_item = Item(list_id=list_id, name=item_name, quantity=quantity, added_by=current_user.id)
db.session.add(new_item)
if not SuggestedProduct.query.filter(func.lower(SuggestedProduct.name) == item_name.lower()).first():
db.session.add(SuggestedProduct(name=item_name))
db.session.commit()
flash('Dodano produkt', 'success')
return redirect(url_for('edit_list', list_id=list_id))
elif action == 'delete_item':
item_id = request.form.get('item_id')
item = Item.query.get(item_id)
if item and item.list_id == list_id:
db.session.delete(item)
db.session.commit()
flash('Usunięto produkt', 'success')
else:
flash('Nie znaleziono produktu', 'danger')
return redirect(url_for('edit_list', list_id=list_id))
elif action == 'toggle_purchased':
item_id = request.form.get('item_id')
item = Item.query.get(item_id)
if item and item.list_id == list_id:
item.purchased = not item.purchased
db.session.commit()
flash('Zmieniono status oznaczenia produktu', 'success')
else:
flash('Nie znaleziono produktu', 'danger')
return redirect(url_for('edit_list', list_id=list_id))
# Przekazanie receipts do szablonu
return render_template(
'admin/edit_list.html',
list=l,
total_expense=total_expense,
users=users,
items=items,
receipts=receipts,
upload_folder=app.config['UPLOAD_FOLDER']
)
@app.route('/admin/products')
@login_required
@@ -974,7 +1040,6 @@ def list_products():
suggestions_dict=suggestions_dict
)
@app.route('/admin/sync_suggestion/<int:item_id>', methods=['POST'])
@login_required
def sync_suggestion_ajax(item_id):