Dieser Commit ist enthalten in:
2025-06-16 00:37:14 +02:00
Ursprung ff935204d5
Commit 262de2839e
26 geänderte Dateien mit 2128 neuen und 28 gelöschten Zeilen

Datei anzeigen

@@ -2743,6 +2743,7 @@ def export_licenses():
# Alle Lizenzen mit Kundeninformationen abrufen (ohne Testdaten, außer explizit gewünscht)
include_test = request.args.get('include_test', 'false').lower() == 'true'
customer_id = request.args.get('customer_id', type=int)
query = """
SELECT l.id, l.license_key, c.name as customer_name, c.email as customer_email,
@@ -2757,12 +2758,23 @@ def export_licenses():
JOIN customers c ON l.customer_id = c.id
"""
# Build WHERE clause
where_conditions = []
params = []
if not include_test:
query += " WHERE l.is_test = FALSE"
where_conditions.append("l.is_test = FALSE")
if customer_id:
where_conditions.append("l.customer_id = %s")
params.append(customer_id)
if where_conditions:
query += " WHERE " + " AND ".join(where_conditions)
query += " ORDER BY l.id"
cur.execute(query)
cur.execute(query, params)
# Spaltennamen
columns = ['ID', 'Lizenzschlüssel', 'Kunde', 'E-Mail', 'Typ',
@@ -2963,20 +2975,40 @@ def export_customers():
conn = get_connection()
cur = conn.cursor()
# Alle Kunden mit Lizenzstatistiken (ohne Testdaten)
cur.execute("""
SELECT c.id, c.name, c.email, c.created_at,
COUNT(CASE WHEN l.is_test = FALSE THEN 1 END) as total_licenses,
COUNT(CASE WHEN l.is_active = TRUE AND l.valid_until >= CURRENT_DATE AND l.is_test = FALSE THEN 1 END) as active_licenses,
COUNT(CASE WHEN l.valid_until < CURRENT_DATE AND l.is_test = FALSE THEN 1 END) as expired_licenses
FROM customers c
LEFT JOIN licenses l ON c.id = l.customer_id
GROUP BY c.id, c.name, c.email, c.created_at
ORDER BY c.id
""")
# Check if test data should be included
include_test = request.args.get('include_test', 'false').lower() == 'true'
# Build query based on test data filter
if include_test:
# Include all customers
query = """
SELECT c.id, c.name, c.email, c.created_at, c.is_test,
COUNT(l.id) as total_licenses,
COUNT(CASE WHEN l.is_active = TRUE AND l.valid_until >= CURRENT_DATE THEN 1 END) as active_licenses,
COUNT(CASE WHEN l.valid_until < CURRENT_DATE THEN 1 END) as expired_licenses
FROM customers c
LEFT JOIN licenses l ON c.id = l.customer_id
GROUP BY c.id, c.name, c.email, c.created_at, c.is_test
ORDER BY c.id
"""
else:
# Exclude test customers and test licenses
query = """
SELECT c.id, c.name, c.email, c.created_at, c.is_test,
COUNT(CASE WHEN l.is_test = FALSE THEN 1 END) as total_licenses,
COUNT(CASE WHEN l.is_active = TRUE AND l.valid_until >= CURRENT_DATE AND l.is_test = FALSE THEN 1 END) as active_licenses,
COUNT(CASE WHEN l.valid_until < CURRENT_DATE AND l.is_test = FALSE THEN 1 END) as expired_licenses
FROM customers c
LEFT JOIN licenses l ON c.id = l.customer_id
WHERE c.is_test = FALSE
GROUP BY c.id, c.name, c.email, c.created_at, c.is_test
ORDER BY c.id
"""
cur.execute(query)
# Spaltennamen
columns = ['ID', 'Name', 'E-Mail', 'Erstellt am',
columns = ['ID', 'Name', 'E-Mail', 'Erstellt am', 'Testdaten',
'Lizenzen gesamt', 'Aktive Lizenzen', 'Abgelaufene Lizenzen']
# Daten in DataFrame
@@ -2986,6 +3018,9 @@ def export_customers():
# Datumsformatierung
df['Erstellt am'] = pd.to_datetime(df['Erstellt am']).dt.strftime('%d.%m.%Y %H:%M')
# Testdaten formatting
df['Testdaten'] = df['Testdaten'].replace({True: 'Ja', False: 'Nein'})
cur.close()
conn.close()