Implementation for the Damage history for the library items
Release Inventarsystem / release-docker (push) Successful in 2m15s
Release Inventarsystem / release-docker (push) Successful in 2m15s
This commit is contained in:
+68
-19
@@ -9423,7 +9423,7 @@ def library_item_invoices(item_id):
|
||||
item_id_str = str(item_id_obj)
|
||||
|
||||
# ==========================================
|
||||
# 1. RECHNUNGSHISTORIE (Bestehender Code)
|
||||
# 1. RECHNUNGSHISTORIE (Aus Ausleihen)
|
||||
# ==========================================
|
||||
borrow_docs = list(ausleihungen.find(
|
||||
{
|
||||
@@ -9455,7 +9455,9 @@ def library_item_invoices(item_id):
|
||||
entries.append({
|
||||
'borrow_id': str(borrow_doc.get('_id')),
|
||||
'borrow_status': borrow_doc.get('Status', ''),
|
||||
'borrow_user': decrypt_text(borrow_doc.get('User', '')),
|
||||
'borrow_user': decrypt_text(borrow_doc.get('User', '')) if hasattr(borrow_doc,
|
||||
'get') and borrow_doc.get(
|
||||
'User') else '',
|
||||
'borrow_start': borrow_doc.get('Start').strftime('%d.%m.%Y %H:%M') if isinstance(
|
||||
borrow_doc.get('Start'), datetime.datetime) else '',
|
||||
'borrow_end': borrow_doc.get('End').strftime('%d.%m.%Y %H:%M') if isinstance(borrow_doc.get('End'),
|
||||
@@ -9472,36 +9474,83 @@ def library_item_invoices(item_id):
|
||||
})
|
||||
|
||||
# ==========================================
|
||||
# 2. SCHADENSHISTORIE (Neuer Code)
|
||||
# 2. SCHADENSHISTORIE (Neues Format + Fallback)
|
||||
# ==========================================
|
||||
raw_damages = []
|
||||
|
||||
# A: Schäden, die manuell am Element (Item-Dokument) hinterlegt wurden
|
||||
item_damages = item_doc.get('Damages', [])
|
||||
if not isinstance(item_damages, list): item_damages = []
|
||||
# Fallback falls sie klein geschrieben wurden
|
||||
if isinstance(item_doc.get('damages', []), list):
|
||||
item_damages.extend(item_doc.get('damages', []))
|
||||
# A: Aktive / gemeldete Schäden aus 'DamageReports'
|
||||
damage_reports = item_doc.get('DamageReports', [])
|
||||
if not isinstance(damage_reports, list):
|
||||
damage_reports = []
|
||||
|
||||
for d in item_damages:
|
||||
for d in damage_reports:
|
||||
if not isinstance(d, dict): continue
|
||||
|
||||
# Rechnungs-Metadaten anhängen, falls vorhanden
|
||||
extra_info = ""
|
||||
if d.get('invoice_number'):
|
||||
amount = d.get('invoice_amount', '')
|
||||
extra_info = f"\n(Mit Rechnung: {d['invoice_number']} - {amount}€)"
|
||||
|
||||
raw_damages.append({
|
||||
'raw_date': d.get('date') or d.get('created_at'),
|
||||
'source': 'Manuell / Element',
|
||||
'user': d.get('reported_by') or d.get('user') or 'System/Admin',
|
||||
'description': d.get('description') or d.get('reason') or 'Keine Beschreibung',
|
||||
'status': d.get('status', 'Unbekannt'),
|
||||
'raw_date': d.get('reported_at'),
|
||||
'source': str(d.get('source', 'Meldung')).capitalize(),
|
||||
'user': d.get('reported_by', 'System/Admin'),
|
||||
'description': d.get('description', 'Keine Beschreibung') + extra_info,
|
||||
'status': 'Offen',
|
||||
'borrow_id': None
|
||||
})
|
||||
|
||||
# B: Schäden, die in Ausleih-Dokumenten vermerkt sind
|
||||
# B: Behobene Schäden aus 'DamageRepairs'
|
||||
damage_repairs = item_doc.get('DamageRepairs', [])
|
||||
if not isinstance(damage_repairs, list):
|
||||
damage_repairs = []
|
||||
|
||||
for r in damage_repairs:
|
||||
if not isinstance(r, dict): continue
|
||||
resolved_list = r.get('resolved_reports', [])
|
||||
repaired_at = r.get('repaired_at')
|
||||
repaired_by = r.get('repaired_by', 'Admin')
|
||||
action_taken = r.get('action_taken', 'repair')
|
||||
|
||||
# Status anhand der Aktion bestimmen
|
||||
status_text = 'Repariert' if action_taken == 'repair' else 'Erledigt'
|
||||
|
||||
if resolved_list and isinstance(resolved_list, list):
|
||||
for res in resolved_list:
|
||||
# Rechnungs-Metadaten aus dem ehemals offenen Report
|
||||
extra_info = ""
|
||||
if res.get('invoice_number'):
|
||||
amount = res.get('invoice_amount', '')
|
||||
extra_info = f"\n(Mit Rechnung: {res['invoice_number']} - {amount}€)"
|
||||
|
||||
raw_damages.append({
|
||||
'raw_date': res.get('reported_at') or repaired_at,
|
||||
'source': f"{status_text} von {repaired_by}",
|
||||
'user': res.get('reported_by', 'System/Admin'),
|
||||
'description': res.get('description', 'Keine Beschreibung') + extra_info,
|
||||
'status': status_text,
|
||||
'borrow_id': None
|
||||
})
|
||||
else:
|
||||
# Fallback, falls keine genauen Reports hinterlegt sind
|
||||
raw_damages.append({
|
||||
'raw_date': repaired_at,
|
||||
'source': 'Reparatur',
|
||||
'user': repaired_by,
|
||||
'description': 'Schaden behoben',
|
||||
'status': status_text,
|
||||
'borrow_id': None
|
||||
})
|
||||
|
||||
# C: Legacy-Fallback: Schäden, die evtl. nur in alten Ausleih-Dokumenten vermerkt sind
|
||||
damage_borrow_docs = list(ausleihungen.find(
|
||||
{
|
||||
'Item': {'$in': [item_id_str, item_id_obj]},
|
||||
'$or': [
|
||||
{'Damage': {'$exists': True, '$ne': ''}},
|
||||
{'DamageData': {'$exists': True, '$ne': {}}},
|
||||
{'Condition': {'$exists': True, '$ne': ''}} # Falls Zustand gemeldet wurde
|
||||
{'Condition': {'$exists': True, '$ne': ''}}
|
||||
]
|
||||
}
|
||||
))
|
||||
@@ -9517,7 +9566,7 @@ def library_item_invoices(item_id):
|
||||
if desc and str(desc).strip():
|
||||
raw_damages.append({
|
||||
'raw_date': d_data.get('reported_at') or b.get('End') or b.get('Start'),
|
||||
'source': f"Ausleihe",
|
||||
'source': "Ausleihe",
|
||||
'user': borrow_user,
|
||||
'description': desc,
|
||||
'status': d_data.get('status', 'Gemeldet'),
|
||||
@@ -9549,7 +9598,7 @@ def library_item_invoices(item_id):
|
||||
'isbn': item_doc.get('ISBN', ''),
|
||||
},
|
||||
invoices=entries,
|
||||
damages=damage_entries, # << NEU
|
||||
damages=damage_entries,
|
||||
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')
|
||||
|
||||
Reference in New Issue
Block a user