diff --git a/Web/app.py b/Web/app.py index 43a9979..4664415 100755 --- a/Web/app.py +++ b/Web/app.py @@ -8620,34 +8620,41 @@ def admin_create_invoice(borrow_id): flash('Für diese Ausleihe existiert bereits eine Rechnung. Bitte Korrekturbuchung verwenden.', 'warning') return redirect(url_for('admin_borrowings')) - client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT) - db = client[cfg.MONGODB_DB] + # ACHTUNG: Keine neue client-Verbindung aufbauen! + # Wir nutzen einfach die 'db' Variable von ganz oben weiter. student_cards = db['student_cards'] student_id = borrow_doc.get('AusweisId') - - if not student_id: - client.close() - flash('Dieser Ausleihe ist kein Schülerausweis zugeordnet.', 'error') - return redirect(url_for('admin_borrowings')) + borrower = "Unbekannt" - # 2. Mit der korrekten ID in student_cards suchen - card = student_cards.find_one({'_id': ObjectId(student_id)}) - - if not card: - client.close() - flash('Der zugehörige Schülerausweis wurde in der Datenbank nicht gefunden.', 'error') - return redirect(url_for('admin_borrowings')) + # 1. Prüfen: Gibt es eine AusweisId? + if student_id: + try: + card = student_cards.find_one({'_id': ObjectId(student_id)}) + except Exception: + card = student_cards.find_one({'_id': student_id}) + + if not card: + # Wir rufen hier KEIN client.close() mehr auf, das macht der finally-Block am Ende automatisch! + flash('Der zugehörige Schülerausweis wurde in der Datenbank nicht gefunden.', 'error') + return redirect(url_for('admin_borrowings')) + + card = _decrypt_student_card_doc(card) + borrower = card.get('SchülerName', 'Unbekannt') + + # 2. Fallback: Wenn keine AusweisId da ist, schauen wir, ob ein Name unter 'User' gespeichert wurde + else: + fallback_user = borrow_doc.get('User') + if fallback_user: + borrower = str(fallback_user) + else: + # Auch hier: KEIN client.close() manuell aufrufen. + flash('Dieser Ausleihe ist weder eine AusweisId noch ein Benutzername zugeordnet.', 'error') + return redirect(url_for('admin_borrowings')) - card = _decrypt_student_card_doc(card) - client.close() - - # 3. Sicherer Zugriff mit .get() als zusätzliche Schutzmaßnahme - borrower = card.get('SchülerName', 'Unbekannt') invoice_number = existing_invoice.get('invoice_number') or _build_invoice_number(borrow_doc['_id'], now) item_name = item_doc.get('Name', '') - item_code = item_doc.get('Code_4', '') invoice_data = { 'invoice_number': invoice_number,