fix: AuditLog bei FZA-Stornierung mit korrektem old_status und fza_hours_refunded-Flag

- old_value enthält den tatsächlichen Status vor der Stornierung (pending/approved)
- new_value enthält cancelled_by_name für bessere Lesbarkeit
- fza_hours_refunded: true wird gesetzt wenn ein genehmigter FZA storniert wurde

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 00:22:39 +02:00
parent f70736fbb5
commit 1170e59e49
+4 -1
View File
@@ -300,6 +300,7 @@ class AbsenceService:
raise HTTPException(status_code=404, detail="Abwesenheit nicht gefunden.")
is_admin = current_user.role in (UserRole.HR, UserRole.COMPANY_ADMIN, UserRole.SUPER_ADMIN)
original_status = absence.status # vor Änderung merken
if absence.user_id != current_user.id and not is_admin:
raise HTTPException(status_code=403, detail="Nur eigene Anträge können storniert werden.")
@@ -329,14 +330,16 @@ class AbsenceService:
action="absence_cancelled",
entity_type="absence",
entity_id=absence.id,
old_value={"status": "pending"},
old_value={"status": original_status.value},
new_value={
"status": "cancelled",
"cancelled_by": str(current_user.id),
"cancelled_by_name": current_user.full_name,
"absence_user_id": str(absence.user_id),
"start_date": str(absence.start_date),
"end_date": str(absence.end_date),
"working_days": float(absence.working_days),
**({"fza_hours_refunded": True} if original_status == AbsenceStatus.APPROVED else {}),
},
))