masowa edycja kategorii, crop dla usera i poprawki w zapytaniach
This commit is contained in:
31
app.py
31
app.py
@@ -1143,7 +1143,8 @@ def main_page():
|
||||
# ostatnia kwota (w tym przypadku max = suma z ostatniego zapisu)
|
||||
latest_expenses_map = dict(
|
||||
db.session.query(
|
||||
Expense.list_id, func.coalesce(func.max(Expense.amount), 0)
|
||||
Expense.list_id,
|
||||
func.coalesce(func.sum(Expense.amount), 0)
|
||||
)
|
||||
.filter(Expense.list_id.in_(all_ids))
|
||||
.group_by(Expense.list_id)
|
||||
@@ -1907,21 +1908,21 @@ def admin_panel():
|
||||
.group_by(Item.list_id)
|
||||
.all()
|
||||
)
|
||||
|
||||
stats_map = {
|
||||
s.list_id: (s.total_count or 0, s.purchased_count or 0) for s in stats
|
||||
}
|
||||
|
||||
# Pobranie ostatnich kwot dla wszystkich list w jednym zapytaniu
|
||||
latest_expenses_map = dict(
|
||||
db.session.query(
|
||||
Expense.list_id, func.coalesce(func.max(Expense.amount), 0)
|
||||
Expense.list_id,
|
||||
func.coalesce(func.sum(Expense.amount), 0)
|
||||
)
|
||||
.filter(Expense.list_id.in_(all_ids))
|
||||
.group_by(Expense.list_id)
|
||||
.all()
|
||||
)
|
||||
|
||||
|
||||
enriched_lists = []
|
||||
for l in all_lists:
|
||||
total_count, purchased_count = stats_map.get(l.id, (0, 0))
|
||||
@@ -2024,6 +2025,7 @@ def admin_panel():
|
||||
)
|
||||
|
||||
|
||||
|
||||
@app.route("/admin/delete_list/<int:list_id>")
|
||||
@login_required
|
||||
@admin_required
|
||||
@@ -2634,6 +2636,27 @@ def recalculate_filesizes_all():
|
||||
return redirect(url_for("admin_receipts", id="all"))
|
||||
|
||||
|
||||
@app.route("/admin/mass_edit_categories", methods=["GET", "POST"])
|
||||
@login_required
|
||||
@admin_required
|
||||
def admin_mass_edit_categories():
|
||||
lists = ShoppingList.query.options(joinedload(ShoppingList.categories)).order_by(ShoppingList.created_at.desc()).all()
|
||||
categories = Category.query.order_by(Category.name.asc()).all()
|
||||
|
||||
if request.method == "POST":
|
||||
for lst in lists:
|
||||
selected_ids = request.form.getlist(f"categories_{lst.id}")
|
||||
lst.categories.clear()
|
||||
if selected_ids:
|
||||
cats = Category.query.filter(Category.id.in_(selected_ids)).all()
|
||||
lst.categories.extend(cats)
|
||||
db.session.commit()
|
||||
flash("Zaktualizowano kategorie dla wybranych list", "success")
|
||||
return redirect(url_for("admin_mass_edit_categories"))
|
||||
|
||||
return render_template("admin/mass_edit_categories.html", lists=lists, categories=categories)
|
||||
|
||||
|
||||
@app.route("/healthcheck")
|
||||
def healthcheck():
|
||||
header_token = request.headers.get("X-Internal-Check")
|
||||
|
Reference in New Issue
Block a user