Kunden & Lizenzen - Part1
Dieser Commit ist enthalten in:
266
JOURNAL.md
266
JOURNAL.md
@@ -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
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren