fix: resolve item repair logic and clear mongo damage flags
Release Inventarsystem / release-docker (push) Successful in 2m20s
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:
+44
-21
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user