Kunden & Lizenzen - Part1

Dieser Commit ist enthalten in:
2025-06-09 19:13:44 +02:00
Ursprung dbd50bdde6
Commit 97b87465e4
12 geänderte Dateien mit 1625 neuen und 227 gelöschten Zeilen

Datei anzeigen

@@ -2188,6 +2188,88 @@ docker-compose up -d
**Status:** ✅ Alle Lizenzschlüssel erfolgreich migriert
### 2025-06-09: Kombinierte Kunden-Lizenz-Ansicht implementiert
**Problem:**
- Umständliche Navigation zwischen Kunden- und Lizenzseiten
- Viel Hin-und-Her-Springen bei der Verwaltung
- Kontext-Verlust beim Wechseln zwischen Ansichten
**Lösung:**
Master-Detail View mit 2-Spalten Layout implementiert
**Phase 1-3 abgeschlossen:**
1. **Backend-Implementierung:**
- Neue Route `/customers-licenses` für kombinierte Ansicht
- API-Endpoints für AJAX: `/api/customer/<id>/licenses`, `/api/customer/<id>/quick-stats`
- API-Endpoint `/api/license/<id>/quick-edit` für Inline-Bearbeitung
- Optimierte SQL-Queries mit JOIN für Performance
2. **Template-Erstellung:**
- Neues Template `customers_licenses.html` mit Master-Detail Layout
- Links: Kundenliste (30%) mit Suchfeld
- Rechts: Lizenzen des ausgewählten Kunden (70%)
- Responsive Design (Mobile: untereinander)
- JavaScript für dynamisches Laden ohne Seitenreload
- Keyboard-Navigation (↑↓ für Kundenwechsel)
3. **Integration:**
- Dashboard: Neuer Button "Kunden & Lizenzen"
- Customers-Seite: Link zur kombinierten Ansicht
- Licenses-Seite: Link zur kombinierten Ansicht
- Lizenz-Erstellung: Unterstützung für vorausgewählten Kunden
- API /api/customers erweitert für Einzelabruf per ID
**Features:**
- Live-Suche in Kundenliste
- Quick-Actions: Copy License Key, Toggle Status
- Modal für neue Lizenz direkt aus Kundenansicht
- URL-Update ohne Reload für Bookmarking
- Loading-States während AJAX-Calls
- Visuelles Feedback (aktiver Kunde hervorgehoben)
**Noch ausstehend:**
- Phase 4: Inline-Edit für Lizenzdetails
- Phase 5: Erweiterte Error-Handling und Polish
**Geänderte Dateien:**
- `v2_adminpanel/app.py` - Neue Routen und API-Endpoints
- `v2_adminpanel/templates/customers_licenses.html` - Neues Template
- `v2_adminpanel/templates/dashboard.html` - Neuer Button
- `v2_adminpanel/templates/customers.html` - Link zur kombinierten Ansicht
- `v2_adminpanel/templates/licenses.html` - Link zur kombinierten Ansicht
- `v2_adminpanel/templates/index.html` - Unterstützung für preselected_customer_id
**Status:** ✅ Grundfunktionalität implementiert und funktionsfähig
### 2025-06-09: Kombinierte Ansicht - Fertigstellung und TODOs aktualisiert
**Abgeschlossen:**
- Phase 1-3 der kombinierten Kunden-Lizenz-Ansicht vollständig implementiert
- Master-Detail Layout funktioniert einwandfrei
- AJAX-basiertes Laden ohne Seitenreload
- Keyboard-Navigation mit Pfeiltasten
- Quick-Actions für Copy und Toggle Status
- Integration in alle relevanten Seiten
**THE_ROAD_SO_FAR.md aktualisiert:**
- Kombinierte Ansicht als "Erledigt" markiert
- Von "In Arbeit" zu "Abgeschlossen" verschoben
- Status dokumentiert
**Verbesserung gegenüber vorher:**
- Kein Hin-und-Her-Springen mehr zwischen Seiten
- Kontext bleibt erhalten beim Arbeiten mit Kunden
- Schnellere Navigation und bessere Übersicht
- Deutlich verbesserte User Experience
**Optional für später (Phase 4-5):**
- Inline-Edit für weitere Felder
- Erweiterte Quick-Actions
- Session-basierte Filter-Persistenz
Die Hauptproblematik der umständlichen Navigation ist damit gelöst!
### 2025-06-09: Test-Flag für Lizenzen implementiert
**Ziel:**
@@ -2277,4 +2359,188 @@ UPDATE resource_pools SET is_test = TRUE; -- 20 Ressourcen
- Test-Ressourcen werden nur Test-Lizenzen zugewiesen
- Alle bestehenden Daten sind jetzt als Test markiert
**Status:** ✅ Vollständig implementiert
### 2025-06-09 (17:20 - 18:13): Kunden-Lizenz-Verwaltung konsolidiert
**Problem:**
- Kombinierte Ansicht `/customers-licenses` hatte Formatierungs- und Funktionsprobleme
- Kunden wurden nicht angezeigt
- Bootstrap Icons fehlten
- JavaScript-Fehler beim Modal
- Inkonsistentes Design im Vergleich zu anderen Seiten
- Testkunden-Filter wurde beim Navigieren nicht beibehalten
**Durchgeführte Änderungen:**
1. **Frontend-Fixes (base.html):**
- Bootstrap Icons CSS hinzugefügt: `bootstrap-icons@1.11.3/font/bootstrap-icons.min.css`
- Bootstrap JavaScript Bundle bereits vorhanden, Reihenfolge optimiert
2. **customers_licenses.html komplett überarbeitet:**
- Container-Klasse von `container-fluid` auf `container py-5` geändert
- Emojis und Button-Styling vereinheitlicht (👥 Kunden & Lizenzen)
- Export-Dropdown wie in anderen Ansichten implementiert
- Card-Styling mit Schatten für einheitliches Design
- Checkbox "Testkunden anzeigen" mit Status-Beibehaltung
- JavaScript-Funktionen korrigiert:
- copyToClipboard mit event.currentTarget
- showNewLicenseModal mit Bootstrap Modal
- Header-Update beim AJAX-Kundenwechsel
- URL-Parameter `show_test` wird überall beibehalten
3. **Backend-Anpassungen (app.py):**
- customers_licenses Route: Optional Testkunden anzeigen mit `show_test` Parameter
- Redirects von `/customers` und `/licenses` auf `/customers-licenses` implementiert
- Alte Route-Funktionen entfernt (kein toter Code mehr)
- edit_license und edit_customer: Redirects behalten show_test Parameter bei
- Dashboard-Links zeigen jetzt auf kombinierte Ansicht
4. **Navigation optimiert:**
- Dashboard: Klick auf Kunden/Lizenzen-Statistik führt zur kombinierten Ansicht
- Alle Edit-Links behalten den show_test Parameter bei
- Konsistente User Experience beim Navigieren
**Technische Details:**
- AJAX-Loading für dynamisches Laden der Lizenzen
- Keyboard-Navigation (↑↓) für Kundenliste
- Responsive Design mit Bootstrap Grid
- Modal-Dialoge für Bestätigungen
- Live-Suche in der Kundenliste
**Resultat:**
- ✅ Einheitliches Design mit anderen Admin-Panel-Seiten
- ✅ Alle Funktionen arbeiten korrekt
- ✅ Testkunden-Filter bleibt erhalten
- ✅ Keine redundanten Views mehr
- ✅ Zentrale Verwaltung für Kunden und Lizenzen
**Status:** ✅ Vollständig implementiert
### 2025-06-09: Test-Daten Checkbox Persistenz implementiert
**Problem:**
- Die "Testkunden anzeigen" Checkbox in `/customers-licenses` verlor ihren Status beim Navigieren zwischen Seiten
- Wenn Benutzer zu anderen Seiten (Resources, Audit Log, etc.) wechselten und zurückkehrten, war die Checkbox wieder deaktiviert
- Benutzer mussten die Checkbox jedes Mal neu aktivieren, was umständlich war
**Lösung:**
- Globale JavaScript-Funktion `preserveShowTestParameter()` in base.html implementiert
- Die Funktion prüft beim Laden jeder Seite, ob `show_test=true` in der URL ist
- Wenn ja, wird dieser Parameter automatisch an alle internen Links angehängt
- Backend-Route `/create` wurde angepasst, um den Parameter bei Redirects beizubehalten
**Technische Details:**
1. **base.html** - JavaScript-Funktion hinzugefügt:
- Läuft beim `DOMContentLoaded` Event
- Findet alle Links die mit "/" beginnen
- Fügt `show_test=true` Parameter hinzu wenn nicht bereits vorhanden
- Überspringt Fragment-Links (#) und Links die bereits den Parameter haben
2. **app.py** - Route-Anpassung:
- `/create` Route behält jetzt `show_test` Parameter bei Redirects bei
- Andere Routen (edit_license, edit_customer) behalten Parameter bereits bei
**Vorteile:**
- ✅ Konsistente User Experience beim Navigieren
- ✅ Keine manuelle Anpassung aller Links nötig
- ✅ Funktioniert automatisch für alle zukünftigen Links
- ✅ Minimaler Code-Overhead
**Geänderte Dateien:**
- `v2_adminpanel/templates/base.html`
- `v2_adminpanel/app.py`
**Status:** ✅ Vollständig implementiert
### 2025-06-09: Bearbeiten-Button Fehler behoben
**Problem:**
- Der "Bearbeiten" Button neben dem Kundennamen in der `/customers-licenses` Ansicht verursachte einen Internal Server Error
- Die URL-Konstruktion war fehlerhaft wenn kein `show_test` Parameter vorhanden war
- Die edit_customer.html Template hatte falsche Array-Indizes und veraltete Links
**Ursache:**
1. Die href-Attribute wurden falsch konstruiert:
- Alt: `/customer/edit/ID{% if show_test %}?ref=customers-licenses&show_test=true{% endif %}`
- Problem: Ohne show_test fehlte das `?ref=customers-licenses` komplett
2. Die SQL-Abfrage in edit_customer() holte nur 4 Felder, aber das Template erwartete 5:
- Query: `SELECT id, name, email, is_test`
- Template erwartete: `customer[3]` = created_at und `customer[4]` = is_test
3. Veraltete Links zu `/customers` statt `/customers-licenses`
**Lösung:**
1. URL-Konstruktion korrigiert in beiden Fällen:
- Neu: `/customer/edit/ID?ref=customers-licenses{% if show_test %}&show_test=true{% endif %}`
2. SQL-Query erweitert um created_at:
- Neu: `SELECT id, name, email, created_at, is_test`
3. Template-Indizes korrigiert:
- is_test Checkbox nutzt jetzt `customer[4]`
4. Navigation-Links aktualisiert:
- Alle Links zeigen jetzt auf `/customers-licenses` mit show_test Parameter
**Geänderte Dateien:**
- `v2_adminpanel/templates/customers_licenses.html` (Zeilen 103 und 295)
- `v2_adminpanel/app.py` (edit_customer Route)
- `v2_adminpanel/templates/edit_customer.html`
**Status:** ✅ Behoben
### 2025-06-09: Unnötigen Lizenz-Erstellungs-Popup entfernt
**Änderung:**
- Der Bestätigungs-Popup "Möchten Sie eine neue Lizenz für KUNDENNAME erstellen?" wurde entfernt
- Klick auf "Neue Lizenz" Button führt jetzt direkt zur Lizenzerstellung
**Technische Details:**
- Modal-HTML komplett entfernt
- `showNewLicenseModal()` Funktion vereinfacht - navigiert jetzt direkt zu `/create?customer_id=X`
- URL-Parameter (wie `show_test`) werden dabei beibehalten
**Vorteile:**
- ✅ Ein Klick weniger für Benutzer
- ✅ Schnellerer Workflow
- ✅ Weniger Code zu warten
**Geänderte Dateien:**
- `v2_adminpanel/templates/customers_licenses.html`
**Status:** ✅ Implementiert
### 2025-06-09: Testkunden-Checkbox bleibt jetzt bei Lizenz/Kunden-Bearbeitung erhalten
**Problem:**
- Bei "Lizenz bearbeiten" ging der "Testkunden anzeigen" Haken verloren beim Zurückkehren
- Die Navigation-Links in edit_license.html zeigten auf `/licenses` statt `/customers-licenses`
- Der show_test Parameter wurde nur über den unsicheren Referrer übertragen
**Lösung:**
1. **Navigation-Links korrigiert**:
- Alle Links zeigen jetzt auf `/customers-licenses` mit show_test Parameter
- Betrifft: "Zurück zur Übersicht" und "Abbrechen" Buttons
2. **Hidden Form Field hinzugefügt**:
- Sowohl in edit_license.html als auch edit_customer.html
- Überträgt den show_test Parameter sicher beim POST
3. **Route-Logik verbessert**:
- Parameter wird aus Form-Daten ODER GET-Parametern gelesen
- Nicht mehr auf unsicheren Referrer angewiesen
- Funktioniert sowohl bei Speichern als auch Abbrechen
**Technische Details:**
- Templates prüfen `request.args.get('show_test')` für Navigation
- Hidden Input: `<input type="hidden" name="show_test" value="true">`
- Routes: `show_test = request.form.get('show_test') or request.args.get('show_test')`
**Geänderte Dateien:**
- `v2_adminpanel/templates/edit_license.html`
- `v2_adminpanel/templates/edit_customer.html`
- `v2_adminpanel/app.py` (edit_license und edit_customer Routen)
**Status:** ✅ Vollständig implementiert