fix: trustee options endpoints handle dict records from interface layer
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
d842884ccf
commit
e5b27ea8e5
1 changed files with 28 additions and 11 deletions
|
|
@ -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]
|
||||
|
||||
|
||||
# ============================================================================
|
||||
|
|
|
|||
Loading…
Reference in a new issue