From 5886e1b269a1d7b09b83101bc9fc45d939e59722 Mon Sep 17 00:00:00 2001 From: rene Date: Tue, 26 May 2026 13:50:03 +0200 Subject: [PATCH] =?UTF-8?q?UX:=20Upgrades-Tab=20=E2=80=94=20Button=20zeigt?= =?UTF-8?q?=20vorhandene=20Rechnung=20an,=20SW=20by-v1074?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Backend: /admin/upgrade-requests liefert pro Request die offene Rechnung (id+number+status) per Subquery aus der invoices-Tabelle (status draft|sent → also nicht bezahlt, nicht storniert) - Frontend: Wenn schon eine Rechnung existiert, wird statt 'Rechnung erstellen' (orange) der Button 'Rechnung bearbeiten' (gelb, #eab308) gezeigt. Klick lädt die Rechnung und öffnet das Modal im Edit-Modus — kein doppeltes Anlegen, Nummerierung bleibt sauber. --- backend/main.py | 2 +- backend/routes/admin.py | 11 ++++++++++- backend/static/index.html | 14 ++++++------- backend/static/js/app.js | 2 +- backend/static/js/pages/admin.js | 34 +++++++++++++++++++++++++++++++- backend/static/sw.js | 2 +- 6 files changed, 53 insertions(+), 12 deletions(-) diff --git a/backend/main.py b/backend/main.py index 484f7ae..2010237 100644 --- a/backend/main.py +++ b/backend/main.py @@ -410,7 +410,7 @@ async def serve_media(path: str, request: _Request): raise _HE(404, "Nicht gefunden.") return _media_response(filepath) -APP_VER = "1073" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "1074" # muss mit APP_VER in app.js übereinstimmen @app.get("/.well-known/assetlinks.json") async def assetlinks(): diff --git a/backend/routes/admin.py b/backend/routes/admin.py index a1c33a6..bfd02f8 100644 --- a/backend/routes/admin.py +++ b/backend/routes/admin.py @@ -1139,7 +1139,16 @@ async def list_upgrade_requests(user=Depends(require_admin)): SELECT r.id, r.user_id, r.tier, r.message, r.created_at, r.fulfilled_at, u.name, u.email, u.billing_address, u.is_founder, u.is_founder_pending, u.referred_by, - COALESCE((SELECT COUNT(*) FROM users WHERE referred_by=u.id), 0) AS referral_count + COALESCE((SELECT COUNT(*) FROM users WHERE referred_by=u.id), 0) AS referral_count, + (SELECT id FROM invoices i WHERE i.user_id=r.user_id + AND i.status IN ('draft','sent') + ORDER BY i.created_at DESC LIMIT 1) AS existing_invoice_id, + (SELECT invoice_number FROM invoices i WHERE i.user_id=r.user_id + AND i.status IN ('draft','sent') + ORDER BY i.created_at DESC LIMIT 1) AS existing_invoice_number, + (SELECT status FROM invoices i WHERE i.user_id=r.user_id + AND i.status IN ('draft','sent') + ORDER BY i.created_at DESC LIMIT 1) AS existing_invoice_status FROM upgrade_requests r JOIN users u ON u.id = r.user_id ORDER BY r.fulfilled_at IS NOT NULL, r.created_at DESC diff --git a/backend/static/index.html b/backend/static/index.html index 4c56c46..eabd3e5 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -101,9 +101,9 @@ - - - + + + @@ -616,10 +616,10 @@ - - - - + + + + diff --git a/backend/static/js/app.js b/backend/static/js/app.js index 29c16ff..a288144 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '1073'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '1074'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; // Cache-Bust-Parameter nach Update-Reload sofort entfernen. diff --git a/backend/static/js/pages/admin.js b/backend/static/js/pages/admin.js index 108733a..9f5ee0b 100644 --- a/backend/static/js/pages/admin.js +++ b/backend/static/js/pages/admin.js @@ -3569,6 +3569,15 @@ window.Page_admin = (() => {
+ ${r.existing_invoice_id ? ` + ` : ` + `}