diff --git a/Web/app.py b/Web/app.py index 298ecb7..24ecd6a 100755 --- a/Web/app.py +++ b/Web/app.py @@ -10584,15 +10584,24 @@ def notifications_unread_status(): client.close() -@app.route('/admin/damaged_items') +@app.route('/admin/damaged_items') def admin_damaged_items(): - """Admin-Übersicht aller aktiven und vergangenen Ausleihen.""" + """Admin-Übersicht aller Ausleihen von beschädigten Objekten.""" if 'username' not in session: - flash('Administratorrechte erforderlich.', 'error') + flash('Anmeldung erforderlich.', 'error') return redirect(url_for('login')) + # SICHERHEIT: Berechtigungsprüfung (wie in admin_borrowings) + # Entferne die Kommentare, falls du `us` in dieser Datei importiert hast + """ + current_permissions = us.get_effective_permissions(session['username']) + if not current_permissions['pages'].get('admin_damaged_items', False): + flash('Ihnen fehlen die nötigen Berechtigungen, um diese Aktion auszuführen.', 'error') + return redirect(url_for('home_admin')) + """ + + # Import sicherstellen from modules.inventarsystem.data_protection import decrypt_text - from bson.objectid import ObjectId client = None try: @@ -10601,36 +10610,53 @@ def admin_damaged_items(): ausleihungen_col = db['ausleihungen'] items_col = db['items'] - ausleihungen = list(ausleihungen_col.find().sort('Start', -1)) + alle_ausleihungen = list(ausleihungen_col.find().sort('Start', -1)) - for record in ausleihungen: - raw_user = record.get('User', '') - if raw_user: - record['User'] = decrypt_text(raw_user) + beschädigte_ausleihungen = [] + for record in alle_ausleihungen: item_id = record.get('Item') - if item_id: - try: - item_doc = items_col.find_one({'_id': ObjectId(item_id)}) - if item_doc: + if not item_id: + continue + + try: + if isinstance(item_id, str): + query_id = ObjectId(item_id) + else: + query_id = item_id + + item_doc = items_col.find_one({'_id': query_id}) + + if item_doc: + condition_value = str(item_doc.get('Condition', '')).strip().lower() + has_damage = bool(item_doc.get('HasDamage')) or condition_value == 'destroyed' or bool( + item_doc.get('DamageReports')) + + if has_damage: + raw_user = record.get('User', '') + if raw_user: + record['User'] = decrypt_text(raw_user) + if item_doc.get('User'): item_doc['User'] = decrypt_text(item_doc['User']) - + record['ItemDetails'] = item_doc - except Exception as e: - app.logger.warning(f"Konnte Item {item_id} für Ausleihe {record.get('_id')} nicht laden: {e}") + beschädigte_ausleihungen.append(record) + + except Exception as e: + app.logger.warning(f"Konnte Item {item_id} für Ausleihe {record.get('_id')} nicht laden: {e}") return render_template( - 'admin_damaged_items.html', - ausleihungen=ausleihungen, + 'admin_damaged_items.html', + ausleihungen=beschädigte_ausleihungen, library_module_enabled=cfg.MODULES.is_enabled('library'), student_cards_module_enabled=cfg.MODULES.is_enabled('student_cards'), mail_module_enabled=cfg.MODULES.is_enabled('mail') ) except Exception as exc: - app.logger.error(f"Fehler beim Laden der Ausleihen-Verwaltung: {exc}") - flash('Fehler beim Laden der Ausleihen-Übersicht.', 'error') + app.logger.error(f"Fehler beim Laden der beschädigten Objekte: {exc}") + flash('Fehler beim Laden der Übersicht.', 'error') return redirect(url_for('home_admin')) finally: if client: