Klass implementation
Release Inventarsystem / release-docker (push) Successful in 2m19s

This commit is contained in:
2026-08-21 13:20:34 +02:00
parent 01637c31ee
commit f0b112b34c
+55 -34
View File
@@ -3336,6 +3336,15 @@ def library_loans_admin():
def fmt_money(value):
return _format_money_value(value)
def safe_decrypt(val):
"""Helper to decrypt strings that start with enc:: or standard encrypted strings."""
if not val or not isinstance(val, str):
return val or ''
try:
return decrypt_text(val)
except Exception:
return val
client = None
try:
client = MongoClient(MONGODB_HOST, MONGODB_PORT)
@@ -3343,6 +3352,7 @@ def library_loans_admin():
items_col = db['items']
ausleihungen_col = db['ausleihungen']
users_col = db['users']
student_cards_col = db['student_cards']
library_items = list(items_col.find(
{'ItemType': {'$in': LIBRARY_ITEM_TYPES}, 'Deleted': {'$ne': True}},
@@ -3357,37 +3367,42 @@ def library_loans_admin():
active_records = list(ausleihungen_col.find(
{'Item': {'$in': item_ids}, 'Status': {'$in': ['active', 'planned', 'completed']}},
{'User': 1, 'Item': 1, 'Status': 1, 'Start': 1, 'End': 1, 'Period': 1, 'Notes': 1, 'InvoiceData': 1,
'Klasse': 1, 'Class': 1, 'school_class': 1}
'Klasse': 1, 'klasse': 1, 'Class': 1, 'school_class': 1}
).sort('Start', -1))
user_map = {}
if active_records:
raw_users = list({r.get('User') for r in active_records if r.get('User')})
decrypted_users = []
for ru in raw_users:
try:
du = decrypt_text(ru) if ru else ''
if du:
decrypted_users.append(du)
except Exception:
pass
class_map = {}
student_cards = list(student_cards_col.find({}, {'SchülerName': 1, 'Klasse': 1, 'AusweisId': 1}))
for sc in student_cards:
dec_cls = safe_decrypt(sc.get('Klasse'))
if not dec_cls:
continue
query_identifiers = list(set(raw_users + decrypted_users))
if query_identifiers:
user_docs = list(users_col.find(
{'$or': [
{'Username': {'$in': query_identifiers}},
{'Name': {'$in': query_identifiers}},
{'User': {'$in': query_identifiers}}
]},
{'Username': 1, 'Name': 1, 'User': 1, 'Klasse': 1, 'Class': 1, 'school_class': 1}
))
for u in user_docs:
cls = u.get('Klasse') or u.get('Class') or u.get('school_class') or ''
if cls:
if u.get('Username'): user_map[u['Username']] = cls
if u.get('Name'): user_map[u['Name']] = cls
if u.get('User'): user_map[u['User']] = cls
dec_name = safe_decrypt(sc.get('SchülerName'))
raw_name = sc.get('SchülerName')
ausweis_id = sc.get('AusweisId')
if dec_name:
class_map[dec_name.strip().lower()] = dec_cls
class_map[dec_name] = dec_cls
if raw_name:
class_map[raw_name] = dec_cls
if ausweis_id:
class_map[str(ausweis_id).strip().lower()] = dec_cls
users = list(users_col.find({}, {'Username': 1, 'Name': 1, 'User': 1, 'Klasse': 1, 'klasse': 1, 'Class': 1,
'school_class': 1}))
for u in users:
raw_cls = u.get('Klasse') or u.get('klasse') or u.get('Class') or u.get('school_class') or ''
dec_cls = safe_decrypt(raw_cls)
if not dec_cls:
continue
for key in [u.get('Username'), u.get('Name'), u.get('User')]:
if key:
dec_key = safe_decrypt(key)
class_map[key] = dec_cls
class_map[dec_key] = dec_cls
class_map[dec_key.strip().lower()] = dec_cls
active_item_ids = set()
loan_entries = []
@@ -3407,14 +3422,20 @@ def library_loans_admin():
damage_reports = item_doc.get('DamageReports', []) or []
raw_user = record.get('User', '')
decrypted_user = decrypt_text(raw_user) if raw_user else ''
decrypted_user = safe_decrypt(raw_user)
direct_class = (
safe_decrypt(record.get('Klasse'))
or safe_decrypt(record.get('klasse'))
or safe_decrypt(record.get('Class'))
or safe_decrypt(record.get('school_class'))
)
user_class = (
record.get('Klasse')
or record.get('Class')
or record.get('school_class')
or user_map.get(raw_user, '')
or user_map.get(decrypted_user, '')
direct_class
or class_map.get(decrypted_user)
or class_map.get(decrypted_user.strip().lower())
or class_map.get(raw_user)
or ''
)