From 4b093fa3a9b1c3f082614d42db48a105140ae69a Mon Sep 17 00:00:00 2001 From: UserIsMH Date: Sun, 22 Jun 2025 19:52:03 +0200 Subject: [PATCH] log Benutzer Fix --- JOURNAL.md | 37 ++++++ v2_adminpanel/routes/admin_routes.py | 9 +- v2_adminpanel/templates/audit_log.html | 159 ++++++++++++------------- 3 files changed, 123 insertions(+), 82 deletions(-) diff --git a/JOURNAL.md b/JOURNAL.md index 187a38c..36d3091 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -1,5 +1,42 @@ # v2-Docker Projekt Journal +## Letzte Änderungen (22.06.2025 - 18:30 Uhr) + +### Export-Funktionen komplett repariert ✅ + +**Probleme gefunden und behoben:** + +1. **Parameter-Mismatch**: Templates übergaben `include_test`, Routes erwarteten `show_fake` +2. **Bootstrap Dropdowns funktionierten nicht**: JavaScript-Konflikt verhinderte Dropdown-Öffnung +3. **Excel Timezone-Fehler**: "Excel does not support datetimes with timezones" + +**Implementierte Lösungen:** + +1. **Nur echte Daten beim Export:** + - Alle Export-Queries filtern jetzt mit `WHERE is_fake = false` + - Keine Test/Fake-Daten mehr in Exporten + +2. **Dropdown durch direkte Buttons ersetzt:** + - Statt problematischer Dropdowns: Einzelne Export-Buttons + - Funktioniert ohne JavaScript, zuverlässiger + - Übersichtlicher: alle Optionen sofort sichtbar + +3. **Datetime-Formatierung für Excel-Kompatibilität:** + - `format_datetime_for_export()` entfernt Zeitzonen-Info + - Alle Datetime-Felder werden vor Export formatiert + - Einheitliches Format: `YYYY-MM-DD HH:MM:SS` + +**Geänderte Dateien:** +- `templates/customers_licenses.html` - Export-Buttons statt Dropdown +- `templates/audit_log.html` - Export-Buttons statt Dropdown +- `templates/sessions.html` - Export-Buttons statt Dropdown +- `routes/export_routes.py` - Datetime-Formatierung für alle Exports +- `utils/export.py` - Timezone-Entfernung in format_datetime_for_export() + +**Status:** Alle Export-Funktionen (Excel & CSV) funktionieren einwandfrei! ✅ + +--- + ## Letzte Änderungen (22.06.2025 - 16:49 Uhr) ### Export-Funktionen Analyse und Lösungsplan ✅ diff --git a/v2_adminpanel/routes/admin_routes.py b/v2_adminpanel/routes/admin_routes.py index 89ea86b..b52a5dc 100644 --- a/v2_adminpanel/routes/admin_routes.py +++ b/v2_adminpanel/routes/admin_routes.py @@ -366,6 +366,7 @@ def audit_log(): page = request.args.get('page', 1, type=int) per_page = 50 search = request.args.get('search', '') + filter_user = request.args.get('user', '') action_filter = request.args.get('action', '') entity_filter = request.args.get('entity', '') @@ -414,6 +415,11 @@ def audit_log(): query += " AND entity_type = %s" params.append(entity_filter) + # User Filter + if filter_user: + query += " AND username = %s" + params.append(filter_user) + # Count total count_query = f"SELECT COUNT(*) FROM ({query}) as filtered" cur.execute(count_query, params) @@ -473,8 +479,9 @@ def audit_log(): logs=audit_logs, page=page, total_pages=total_pages, - total_count=total_count, + total=total_count, search=search, + filter_user=filter_user, action_filter=action_filter, entity_filter=entity_filter, actions=actions, diff --git a/v2_adminpanel/templates/audit_log.html b/v2_adminpanel/templates/audit_log.html index 9e5800f..91fcfba 100644 --- a/v2_adminpanel/templates/audit_log.html +++ b/v2_adminpanel/templates/audit_log.html @@ -5,10 +5,10 @@ {% macro sortable_header(label, field, current_sort, current_order) %} {% if current_sort == field %} - {% else %} - {% endif %} {{ label }} @@ -111,83 +111,83 @@
- +
@@ -195,10 +195,10 @@ Zurücksetzen @@ -324,31 +324,31 @@

@@ -373,12 +373,9 @@ document.addEventListener('DOMContentLoaded', function() { // Debounce timer für Textfelder let searchTimeout; - // Live-Filter für Benutzer-Textfeld (mit 300ms Verzögerung) - userInput.addEventListener('input', function() { - clearTimeout(searchTimeout); - searchTimeout = setTimeout(() => { - filterForm.submit(); - }, 300); + // Live-Filter für Benutzer-Dropdown (sofort) + userInput.addEventListener('change', function() { + filterForm.submit(); }); // Live-Filter für Dropdowns (sofort)