From f301e22c6bcb8c88ee9ea81af6adcd9b91ad34b9 Mon Sep 17 00:00:00 2001 From: claude-dev Date: Sat, 25 Jul 2026 15:46:51 +0000 Subject: [PATCH] feat(org-detail): Max Nutzer inline editierbar, Org-Status in die Kopfzeile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zwei Verbesserungen auf Nutzer-Rückmeldung. - Max Nutzer war nach dem Anlegen einer Lizenz nirgends mehr änderbar. In der aktiven Lizenz-Zeile ist es jetzt ein Zahlenfeld mit Sofort-Speicherung (der generische Lizenz-Updater akzeptiert max_users mit Prüfung 1 bis 1000), die Limit-Anzeige über der Nutzerliste zieht mit. - "Status" (Lizenz) direkt neben "Org-Status" war verwirrend. Der Org-Status sitzt jetzt als Umschalter in der Kopfzeile der Organisation (an der Stelle des bisherigen Abzeichens), die Tabelle behält nur noch Lizenz-Status und Pipeline-Sprache. Co-Authored-By: Claude Fable 5 --- src/routers/token_usage.py | 10 ++++++++- src/static/dashboard.html | 3 +-- src/static/js/app.js | 46 +++++++++++++++++++++++++++++--------- 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/routers/token_usage.py b/src/routers/token_usage.py index e14faf2..7996fca 100644 --- a/src/routers/token_usage.py +++ b/src/routers/token_usage.py @@ -199,10 +199,18 @@ async def update_budget(license_id: int, data: dict, request: Request, admin=Dep if not 1 <= pct <= 100: raise HTTPException(status_code=400, detail="budget_warning_percent muss zwischen 1 und 100 liegen") data["budget_warning_percent"] = pct + if "max_users" in data: + try: + mu = int(data["max_users"]) + except (TypeError, ValueError): + raise HTTPException(status_code=400, detail="max_users muss eine Zahl sein") + if not 1 <= mu <= 1000: + raise HTTPException(status_code=400, detail="max_users muss zwischen 1 und 1000 liegen") + data["max_users"] = mu fields = [] values = [] - for key in ("token_budget_usd", "credits_total", "cost_per_credit", "budget_warning_percent", "credits_period"): + for key in ("token_budget_usd", "credits_total", "cost_per_credit", "budget_warning_percent", "credits_period", "max_users"): if key in data: fields.append(f"{key} = ?") values.append(data[key]) diff --git a/src/static/dashboard.html b/src/static/dashboard.html index a2f418a..3ddffac 100644 --- a/src/static/dashboard.html +++ b/src/static/dashboard.html @@ -230,7 +230,6 @@ Gültig ab Gültig bis Status - Org-Status Pipeline-Sprache Aktionen @@ -1163,7 +1162,7 @@ - + diff --git a/src/static/js/app.js b/src/static/js/app.js index 3dae1e3..4a34294 100644 --- a/src/static/js/app.js +++ b/src/static/js/app.js @@ -314,7 +314,13 @@ function renderOrgHeader(org) { document.getElementById("orgDetailHeader").innerHTML = `
-

${esc(org.name)} ${org.is_active ? "Aktiv" : "Inaktiv"}

+

${esc(org.name)} + +

Slug: ${esc(org.slug)} | Nutzer: ${org.user_count} | Lizenz: ${org.license_type || "Keine"} | Kontingent: ${esc(kpiText)}