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
|
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:
|
def _validateInstanceAccess(instanceId: str, context: RequestContext) -> str:
|
||||||
"""
|
"""
|
||||||
Validate that the user has access to the feature instance.
|
Validate that the user has access to the feature instance.
|
||||||
|
|
@ -365,7 +372,7 @@ def get_contract_options(
|
||||||
result = interface.getAllContracts(None)
|
result = interface.getAllContracts(None)
|
||||||
items = result.items if hasattr(result, 'items') else result
|
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]])
|
@router.get("/{instanceId}/documents/options", response_model=List[Dict[str, Any]])
|
||||||
|
|
@ -381,7 +388,14 @@ def get_document_options(
|
||||||
result = interface.getAllDocuments(None)
|
result = interface.getAllDocuments(None)
|
||||||
items = result.items if hasattr(result, 'items') else result
|
items = result.items if hasattr(result, 'items') else result
|
||||||
# Include 'id' for FK resolution in tables
|
# 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]])
|
@router.get("/{instanceId}/positions/options", response_model=List[Dict[str, Any]])
|
||||||
|
|
@ -397,18 +411,21 @@ def get_position_options(
|
||||||
result = interface.getAllPositions(None)
|
result = interface.getAllPositions(None)
|
||||||
items = result.items if hasattr(result, 'items') else result
|
items = result.items if hasattr(result, 'items') else result
|
||||||
|
|
||||||
def _makePositionLabel(p: TrusteePosition) -> str:
|
def _makePositionLabel(p) -> str:
|
||||||
parts = []
|
parts = []
|
||||||
if p.valuta:
|
valuta = _recordField(p, "valuta")
|
||||||
parts.append(datetime.fromtimestamp(p.valuta, tz=timezone.utc).strftime("%Y-%m-%d"))
|
if valuta:
|
||||||
if p.company:
|
parts.append(datetime.fromtimestamp(valuta, tz=timezone.utc).strftime("%Y-%m-%d"))
|
||||||
parts.append(p.company[:30])
|
company = _recordField(p, "company")
|
||||||
if p.desc:
|
if company:
|
||||||
parts.append(p.desc[:30])
|
parts.append(str(company)[:30])
|
||||||
return " - ".join(parts) if parts else p.id
|
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
|
# 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