updates
This commit is contained in:
@@ -12,6 +12,8 @@ from ..services.invoice_service import InvoiceService
|
||||
from ...shared.utils.role_helpers import can_access_all_invoices, can_create_invoices
|
||||
from ...shared.utils.response_helpers import success_response
|
||||
from ...shared.utils.request_helpers import get_request_id
|
||||
from ..services.financial_audit_service import financial_audit_service
|
||||
from ..models.financial_audit_trail import FinancialActionType
|
||||
from ..schemas.invoice import (
|
||||
CreateInvoiceRequest,
|
||||
UpdateInvoiceRequest,
|
||||
@@ -96,6 +98,25 @@ async def create_invoice(request: Request, invoice_data: CreateInvoiceRequest, c
|
||||
request_id=request_id,
|
||||
**invoice_kwargs
|
||||
)
|
||||
# Financial audit: invoice created
|
||||
try:
|
||||
financial_audit_service.log_financial_action(
|
||||
db=db,
|
||||
action_type=FinancialActionType.invoice_created,
|
||||
performed_by=current_user.id,
|
||||
action_description=f'Invoice {invoice.get("invoice_number")} created from booking {booking_id}',
|
||||
invoice_id=invoice.get('id'),
|
||||
booking_id=booking_id,
|
||||
amount=invoice.get('total_amount'),
|
||||
currency=None,
|
||||
metadata={
|
||||
'request_id': request_id,
|
||||
'role': getattr(current_user.role, 'name', None),
|
||||
},
|
||||
)
|
||||
except Exception:
|
||||
# Do not block main flow on audit logging failure
|
||||
logger.warning('Failed to log financial audit for invoice creation', exc_info=True)
|
||||
return success_response(data={'invoice': invoice}, message='Invoice created successfully')
|
||||
except HTTPException:
|
||||
raise
|
||||
@@ -117,6 +138,26 @@ async def update_invoice(request: Request, id: int, invoice_data: UpdateInvoiceR
|
||||
request_id = get_request_id(request)
|
||||
invoice_dict = invoice_data.model_dump(exclude_unset=True)
|
||||
updated_invoice = InvoiceService.update_invoice(invoice_id=id, db=db, updated_by_id=current_user.id, request_id=request_id, **invoice_dict)
|
||||
# Financial audit: invoice updated
|
||||
try:
|
||||
financial_audit_service.log_financial_action(
|
||||
db=db,
|
||||
action_type=FinancialActionType.invoice_updated,
|
||||
performed_by=current_user.id,
|
||||
action_description=f'Invoice {updated_invoice.get("invoice_number")} updated',
|
||||
invoice_id=id,
|
||||
booking_id=updated_invoice.get('booking_id'),
|
||||
amount=updated_invoice.get('total_amount'),
|
||||
previous_amount=float(invoice.total_amount) if getattr(invoice, 'total_amount', None) is not None else None,
|
||||
currency=None,
|
||||
metadata={
|
||||
'request_id': request_id,
|
||||
'updated_fields': list(invoice_dict.keys()),
|
||||
'role': getattr(current_user.role, 'name', None),
|
||||
},
|
||||
)
|
||||
except Exception:
|
||||
logger.warning('Failed to log financial audit for invoice update', exc_info=True)
|
||||
return success_response(data={'invoice': updated_invoice}, message='Invoice updated successfully')
|
||||
except HTTPException:
|
||||
raise
|
||||
@@ -135,6 +176,24 @@ async def mark_invoice_as_paid(request: Request, id: int, payment_data: MarkInvo
|
||||
request_id = get_request_id(request)
|
||||
amount = payment_data.amount
|
||||
updated_invoice = InvoiceService.mark_invoice_as_paid(invoice_id=id, db=db, amount=amount, updated_by_id=current_user.id, request_id=request_id)
|
||||
# Financial audit: invoice marked as paid
|
||||
try:
|
||||
financial_audit_service.log_financial_action(
|
||||
db=db,
|
||||
action_type=FinancialActionType.invoice_paid,
|
||||
performed_by=current_user.id,
|
||||
action_description=f'Invoice {updated_invoice.get("invoice_number")} marked as paid',
|
||||
invoice_id=id,
|
||||
booking_id=updated_invoice.get('booking_id'),
|
||||
amount=amount if amount is not None else updated_invoice.get('total_amount'),
|
||||
currency=None,
|
||||
metadata={
|
||||
'request_id': request_id,
|
||||
'role': getattr(current_user.role, 'name', None),
|
||||
},
|
||||
)
|
||||
except Exception:
|
||||
logger.warning('Failed to log financial audit for mark-as-paid', exc_info=True)
|
||||
return success_response(data={'invoice': updated_invoice}, message='Invoice marked as paid successfully')
|
||||
except HTTPException:
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user