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): def fmt_money(value):
return _format_money_value(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 client = None
try: try:
client = MongoClient(MONGODB_HOST, MONGODB_PORT) client = MongoClient(MONGODB_HOST, MONGODB_PORT)
@@ -3343,6 +3352,7 @@ def library_loans_admin():
items_col = db['items'] items_col = db['items']
ausleihungen_col = db['ausleihungen'] ausleihungen_col = db['ausleihungen']
users_col = db['users'] users_col = db['users']
student_cards_col = db['student_cards']
library_items = list(items_col.find( library_items = list(items_col.find(
{'ItemType': {'$in': LIBRARY_ITEM_TYPES}, 'Deleted': {'$ne': True}}, {'ItemType': {'$in': LIBRARY_ITEM_TYPES}, 'Deleted': {'$ne': True}},
@@ -3357,37 +3367,42 @@ def library_loans_admin():
active_records = list(ausleihungen_col.find( active_records = list(ausleihungen_col.find(
{'Item': {'$in': item_ids}, 'Status': {'$in': ['active', 'planned', 'completed']}}, {'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, {'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)) ).sort('Start', -1))
user_map = {} class_map = {}
if active_records: student_cards = list(student_cards_col.find({}, {'SchülerName': 1, 'Klasse': 1, 'AusweisId': 1}))
raw_users = list({r.get('User') for r in active_records if r.get('User')}) for sc in student_cards:
decrypted_users = [] dec_cls = safe_decrypt(sc.get('Klasse'))
for ru in raw_users: if not dec_cls:
try: continue
du = decrypt_text(ru) if ru else ''
if du:
decrypted_users.append(du)
except Exception:
pass
query_identifiers = list(set(raw_users + decrypted_users)) dec_name = safe_decrypt(sc.get('SchülerName'))
if query_identifiers: raw_name = sc.get('SchülerName')
user_docs = list(users_col.find( ausweis_id = sc.get('AusweisId')
{'$or': [
{'Username': {'$in': query_identifiers}}, if dec_name:
{'Name': {'$in': query_identifiers}}, class_map[dec_name.strip().lower()] = dec_cls
{'User': {'$in': query_identifiers}} class_map[dec_name] = dec_cls
]}, if raw_name:
{'Username': 1, 'Name': 1, 'User': 1, 'Klasse': 1, 'Class': 1, 'school_class': 1} class_map[raw_name] = dec_cls
)) if ausweis_id:
for u in user_docs: class_map[str(ausweis_id).strip().lower()] = dec_cls
cls = u.get('Klasse') or u.get('Class') or u.get('school_class') or ''
if cls: users = list(users_col.find({}, {'Username': 1, 'Name': 1, 'User': 1, 'Klasse': 1, 'klasse': 1, 'Class': 1,
if u.get('Username'): user_map[u['Username']] = cls 'school_class': 1}))
if u.get('Name'): user_map[u['Name']] = cls for u in users:
if u.get('User'): user_map[u['User']] = cls 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() active_item_ids = set()
loan_entries = [] loan_entries = []
@@ -3407,14 +3422,20 @@ def library_loans_admin():
damage_reports = item_doc.get('DamageReports', []) or [] damage_reports = item_doc.get('DamageReports', []) or []
raw_user = record.get('User', '') 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 = ( user_class = (
record.get('Klasse') direct_class
or record.get('Class') or class_map.get(decrypted_user)
or record.get('school_class') or class_map.get(decrypted_user.strip().lower())
or user_map.get(raw_user, '') or class_map.get(raw_user)
or user_map.get(decrypted_user, '')
or '' or ''
) )