implementation of the export for users
Release Inventarsystem / release-docker (push) Successful in 3m8s
Release Inventarsystem / release-docker (push) Successful in 3m8s
This commit is contained in:
+66
@@ -8628,6 +8628,72 @@ def register_csv():
|
||||
mimetype='application/pdf'
|
||||
)
|
||||
|
||||
@app.route('/export_users_csv', methods=['POST'])
|
||||
def export_users_csv():
|
||||
"""
|
||||
Exports a filtered list of users to a CSV file.
|
||||
Receives a JSON array of usernames from the frontend.
|
||||
"""
|
||||
if 'username' not in session:
|
||||
flash('Ihnen ist es nicht gestattet, diese Aktion auszuführen.', 'error')
|
||||
return redirect(url_for('login'))
|
||||
|
||||
usernames_json = request.form.get('usernames')
|
||||
if not usernames_json:
|
||||
flash('Keine Benutzer zum Exportieren ausgewählt.', 'error')
|
||||
return redirect(url_for('user_del'))
|
||||
|
||||
try:
|
||||
target_usernames = json.loads(usernames_json)
|
||||
except json.JSONDecodeError:
|
||||
flash('Ungültige Daten beim Export übermittelt.', 'error')
|
||||
return redirect(url_for('user_del'))
|
||||
|
||||
# Fetch all users
|
||||
all_users = us.get_all_users()
|
||||
|
||||
# Create CSV in memory
|
||||
si = io.StringIO()
|
||||
# Delimiter set to semicolon (standard for Excel in German locales)
|
||||
cw = csv.writer(si, delimiter=';')
|
||||
|
||||
# Write headers
|
||||
cw.writerow(['Benutzername', 'Vorname', 'Nachname', 'Administrator', 'Rechte-Preset'])
|
||||
|
||||
for user in all_users:
|
||||
encrypted_username = user.get('Username')
|
||||
if not encrypted_username:
|
||||
continue
|
||||
|
||||
uname = decrypt_text(encrypted_username)
|
||||
|
||||
# Only process users that were present in the frontend's filtered view
|
||||
if uname in target_usernames:
|
||||
try:
|
||||
permissions_payload = us.get_effective_permissions(uname)
|
||||
preset = permissions_payload.get('preset', 'standard_user')
|
||||
except Exception:
|
||||
preset = 'standard_user'
|
||||
|
||||
try:
|
||||
name = us.get_name(uname) or ""
|
||||
last_name = us.get_last_name(uname) or ""
|
||||
except Exception:
|
||||
name = ""
|
||||
last_name = ""
|
||||
|
||||
admin_status = "Ja" if user.get('Admin', False) else "Nein"
|
||||
|
||||
cw.writerow([uname, name, last_name, admin_status, preset])
|
||||
|
||||
# Prefix with BOM (Byte Order Mark) to ensure Excel reads UTF-8 (Umlauts) correctly
|
||||
output = '\ufeff' + si.getvalue()
|
||||
|
||||
return Response(
|
||||
output,
|
||||
mimetype="text/csv",
|
||||
headers={"Content-disposition": "attachment; filename=benutzer_export.csv"}
|
||||
)
|
||||
|
||||
@app.route('/user_del', methods=['GET'])
|
||||
def user_del():
|
||||
|
||||
Reference in New Issue
Block a user