fix: resolve item repair logic and clear mongo damage flags
Release Inventarsystem / release-docker (push) Successful in 2m20s

- 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.
This commit is contained in:
2026-08-21 11:59:50 +02:00
parent e4b27c2d62
commit a51c4c4cbe
+44 -21
View File
@@ -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: