fix: trustee options endpoints handle dict records from interface layer
All checks were successful
Deploy Plattform-Core / test (push) Successful in 43s
Deploy Plattform-Core / deploy (push) Successful in 6s

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ValueOn AG 2026-06-11 15:41:12 +02:00
parent d842884ccf
commit e5b27ea8e5

View file

@ -81,6 +81,13 @@ def _parsePagination(pagination: Optional[str]) -> Optional[PaginationParams]:
return None
def _recordField(record, field: str, default=None):
"""Read a field from a DB record dict or model instance."""
if isinstance(record, dict):
return record.get(field, default)
return getattr(record, field, default)
def _validateInstanceAccess(instanceId: str, context: RequestContext) -> str:
"""
Validate that the user has access to the feature instance.
@ -365,7 +372,7 @@ def get_contract_options(
result = interface.getAllContracts(None)
items = result.items if hasattr(result, 'items') else result
return [{"value": c.id, "label": c.label or c.name or c.id} for c in items]
return [{"value": _recordField(c, "id"), "label": _recordField(c, "label") or _recordField(c, "name") or _recordField(c, "id")} for c in items]
@router.get("/{instanceId}/documents/options", response_model=List[Dict[str, Any]])
@ -381,7 +388,14 @@ def get_document_options(
result = interface.getAllDocuments(None)
items = result.items if hasattr(result, 'items') else result
# Include 'id' for FK resolution in tables
return [{"id": d.id, "value": d.id, "label": d.documentName or d.id} for d in items]
return [
{
"id": _recordField(d, "id"),
"value": _recordField(d, "id"),
"label": _recordField(d, "documentName") or _recordField(d, "id"),
}
for d in items
]
@router.get("/{instanceId}/positions/options", response_model=List[Dict[str, Any]])
@ -397,18 +411,21 @@ def get_position_options(
result = interface.getAllPositions(None)
items = result.items if hasattr(result, 'items') else result
def _makePositionLabel(p: TrusteePosition) -> str:
def _makePositionLabel(p) -> str:
parts = []
if p.valuta:
parts.append(datetime.fromtimestamp(p.valuta, tz=timezone.utc).strftime("%Y-%m-%d"))
if p.company:
parts.append(p.company[:30])
if p.desc:
parts.append(p.desc[:30])
return " - ".join(parts) if parts else p.id
valuta = _recordField(p, "valuta")
if valuta:
parts.append(datetime.fromtimestamp(valuta, tz=timezone.utc).strftime("%Y-%m-%d"))
company = _recordField(p, "company")
if company:
parts.append(str(company)[:30])
desc = _recordField(p, "desc")
if desc:
parts.append(str(desc)[:30])
return " - ".join(parts) if parts else _recordField(p, "id")
# Include 'id' for FK resolution in tables
return [{"id": p.id, "value": p.id, "label": _makePositionLabel(p)} for p in items]
return [{"id": _recordField(p, "id"), "value": _recordField(p, "id"), "label": _makePositionLabel(p)} for p in items]
# ============================================================================