diff --git a/modules/features/trustee/routeFeatureTrustee.py b/modules/features/trustee/routeFeatureTrustee.py index 8b5ba94a..dbc96013 100644 --- a/modules/features/trustee/routeFeatureTrustee.py +++ b/modules/features/trustee/routeFeatureTrustee.py @@ -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] # ============================================================================