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)
|
item_id_str = str(item_id_obj)
|
||||||
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# 1. RECHNUNGSHISTORIE (Bestehender Code)
|
# 1. RECHNUNGSHISTORIE (Aus Ausleihen)
|
||||||
# ==========================================
|
# ==========================================
|
||||||
borrow_docs = list(ausleihungen.find(
|
borrow_docs = list(ausleihungen.find(
|
||||||
{
|
{
|
||||||
@@ -9455,7 +9455,9 @@ def library_item_invoices(item_id):
|
|||||||
entries.append({
|
entries.append({
|
||||||
'borrow_id': str(borrow_doc.get('_id')),
|
'borrow_id': str(borrow_doc.get('_id')),
|
||||||
'borrow_status': borrow_doc.get('Status', ''),
|
'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_start': borrow_doc.get('Start').strftime('%d.%m.%Y %H:%M') if isinstance(
|
||||||
borrow_doc.get('Start'), datetime.datetime) else '',
|
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'),
|
'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 = []
|
raw_damages = []
|
||||||
|
|
||||||
# A: Schäden, die manuell am Element (Item-Dokument) hinterlegt wurden
|
# A: Aktive / gemeldete Schäden aus 'DamageReports'
|
||||||
item_damages = item_doc.get('Damages', [])
|
damage_reports = item_doc.get('DamageReports', [])
|
||||||
if not isinstance(item_damages, list): item_damages = []
|
if not isinstance(damage_reports, list):
|
||||||
# Fallback falls sie klein geschrieben wurden
|
damage_reports = []
|
||||||
if isinstance(item_doc.get('damages', []), list):
|
|
||||||
item_damages.extend(item_doc.get('damages', []))
|
|
||||||
|
|
||||||
for d in item_damages:
|
for d in damage_reports:
|
||||||
if not isinstance(d, dict): continue
|
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_damages.append({
|
||||||
'raw_date': d.get('date') or d.get('created_at'),
|
'raw_date': d.get('reported_at'),
|
||||||
'source': 'Manuell / Element',
|
'source': str(d.get('source', 'Meldung')).capitalize(),
|
||||||
'user': d.get('reported_by') or d.get('user') or 'System/Admin',
|
'user': d.get('reported_by', 'System/Admin'),
|
||||||
'description': d.get('description') or d.get('reason') or 'Keine Beschreibung',
|
'description': d.get('description', 'Keine Beschreibung') + extra_info,
|
||||||
'status': d.get('status', 'Unbekannt'),
|
'status': 'Offen',
|
||||||
'borrow_id': None
|
'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(
|
damage_borrow_docs = list(ausleihungen.find(
|
||||||
{
|
{
|
||||||
'Item': {'$in': [item_id_str, item_id_obj]},
|
'Item': {'$in': [item_id_str, item_id_obj]},
|
||||||
'$or': [
|
'$or': [
|
||||||
{'Damage': {'$exists': True, '$ne': ''}},
|
{'Damage': {'$exists': True, '$ne': ''}},
|
||||||
{'DamageData': {'$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():
|
if desc and str(desc).strip():
|
||||||
raw_damages.append({
|
raw_damages.append({
|
||||||
'raw_date': d_data.get('reported_at') or b.get('End') or b.get('Start'),
|
'raw_date': d_data.get('reported_at') or b.get('End') or b.get('Start'),
|
||||||
'source': f"Ausleihe",
|
'source': "Ausleihe",
|
||||||
'user': borrow_user,
|
'user': borrow_user,
|
||||||
'description': desc,
|
'description': desc,
|
||||||
'status': d_data.get('status', 'Gemeldet'),
|
'status': d_data.get('status', 'Gemeldet'),
|
||||||
@@ -9549,7 +9598,7 @@ def library_item_invoices(item_id):
|
|||||||
'isbn': item_doc.get('ISBN', ''),
|
'isbn': item_doc.get('ISBN', ''),
|
||||||
},
|
},
|
||||||
invoices=entries,
|
invoices=entries,
|
||||||
damages=damage_entries, # << NEU
|
damages=damage_entries,
|
||||||
library_module_enabled=cfg.MODULES.is_enabled('library'),
|
library_module_enabled=cfg.MODULES.is_enabled('library'),
|
||||||
student_cards_module_enabled=cfg.MODULES.is_enabled('student_cards'),
|
student_cards_module_enabled=cfg.MODULES.is_enabled('student_cards'),
|
||||||
mail_module_enabled=cfg.MODULES.is_enabled('mail')
|
mail_module_enabled=cfg.MODULES.is_enabled('mail')
|
||||||
|
|||||||
Reference in New Issue
Block a user