From a51c4c4cbe51d74f77a0e6df3f7f7e2b77421536 Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Fri, 21 Aug 2026 11:59:50 +0200 Subject: [PATCH] fix: resolve item repair logic and clear mongo damage flags - Fixed incorrect form field key (`action_type` -> `action`) in admin route. - Switched to MongoDB `$unset` to completely remove damage fields (`HasDamage`, `DamageText`, etc.) from the items collection instead of just setting them to false. - Added cleanup logic to `$unset` damage flags from related active loans in the `borrowings` collection. - Ensures repaired/replaced items correctly disappear from the damaged items UI. --- Web/app.py | 65 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/Web/app.py b/Web/app.py index 29d30a2..e34c209 100755 --- a/Web/app.py +++ b/Web/app.py @@ -9145,10 +9145,12 @@ def admin_resolve_repair(item_id): return redirect(url_for('library_loans_admin')) + def resolve_repaired_item_funct(item_id, action, new_code_4="", current_user="admin"): """ Verarbeitet Items aus der Reparatur und aktualisiert die Serien-Counts sowie Parent/Child-Abhängigkeiten beim Löschen korrekt. + Entfernt Schadens-Flags komplett aus Items und zugehörigen Ausleihen. """ if not ObjectId.is_valid(item_id): return False, "Ungültige Item-ID." @@ -9158,12 +9160,25 @@ def resolve_repaired_item_funct(item_id, action, new_code_4="", current_user="ad db = client[cfg.MONGODB_DB] items = db['items'] + borrowings = db['borrowings'] if 'borrowings' in db.list_collection_names() else None + item = items.find_one({'_id': ObjectId(item_id)}) if not item: return False, "Item nicht in der Datenbank gefunden." series_group_id = item.get('SeriesGroupId') + damage_unset = { + 'HasDamage': "", + 'has_damage': "", + 'DamageCount': "", + 'damage_count': "", + 'DamageText': "", + 'damage_text': "", + 'is_damaged': "", + 'IsDamaged': "" + } + # --- OPTION 1: DELETE --- if action == 'delete': is_parent = not item.get('IsGroupedSubItem') @@ -9208,35 +9223,43 @@ def resolve_repaired_item_funct(item_id, action, new_code_4="", current_user="ad elif action == 'replace': items.update_one( {'_id': ObjectId(item_id)}, - {'$set': { - 'Code_4': str(new_code_4).strip(), - 'Verfuegbar': True, - 'HasDamage': False, - 'has_damage': False, - 'DamageCount': 0, - 'damage_count': 0, - 'DamageText': '', - 'damage_text': '', - 'LastUpdated': datetime.datetime.now() - }} + { + '$set': { + 'Code_4': str(new_code_4).strip(), + 'Verfuegbar': True, + 'LastUpdated': datetime.datetime.now() + }, + '$unset': damage_unset + } ) + + if borrowings is not None: + borrowings.update_many( + {'$or': [{'item_id': str(item_id)}, {'item_id': ObjectId(item_id)}]}, + {'$unset': damage_unset} + ) + return True, f"Item wurde ersetzt. Neuer Code 4 zugewiesen: {new_code_4}." # --- OPTION 3: JUST REPAIR --- elif action == 'repair': items.update_one( {'_id': ObjectId(item_id)}, - {'$set': { - 'Verfuegbar': True, - 'HasDamage': False, - 'has_damage': False, - 'DamageCount': 0, - 'damage_count': 0, - 'DamageText': '', - 'damage_text': '', - 'LastUpdated': datetime.datetime.now() - }} + { + '$set': { + 'Verfuegbar': True, + 'LastUpdated': datetime.datetime.now() + }, + '$unset': damage_unset + } ) + + if borrowings is not None: + borrowings.update_many( + {'$or': [{'item_id': str(item_id)}, {'item_id': ObjectId(item_id)}]}, + {'$unset': damage_unset} + ) + return True, "Item wurde repariert und ist wieder regulär verfügbar." else: