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
+57 -36
View File
@@ -3312,13 +3312,13 @@ def library_view():
def library_loans_admin():
"""Admin overview for library borrowings and damaged library items."""
if 'username' not in session:
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!', 'error')
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!','error')
return redirect(url_for('login'))
current_permissions = us.get_effective_permissions(session['username'])
if not current_permissions['pages'].get('library_loans_admin', False):
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!', 'error')
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!','error')
return redirect(url_for('library_view'))
if not cfg.MODULES.is_enabled('library'):
@@ -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 ''
)