38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
from typing import Dict
|
|||
|
|
|
||
|
|
from fastapi import APIRouter, HTTPException
|
||
|
|
|
||
|
|
from core.sap import forward_to_sapb1
|
||
|
|
|
||
|
|
router = APIRouter(tags=["Tablas de Usuario"])
|
||
|
|
|
||
|
|
# Mapea un nombre amigable de tabla de usuario (@...) a su nombre real de
|
||
|
|
# entidad en Service Layer. La convención de nombre no es uniforme entre
|
||
|
|
# tablas de un mismo cliente (una tabla de usuario puede exponerse con
|
||
|
|
# prefijo "U_" y otra sin él), así que se centraliza acá en vez de que cada
|
||
|
|
# módulo tenga que adivinar o repetir el nombre de endpoint real. Cada
|
||
|
|
# cliente completa este mapeo según sus propias tablas de usuario en SAP.
|
||
|
|
USER_TABLES: Dict[str, str] = {}
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/api/UserTables/{name}")
|
||
|
|
async def get_user_table(name: str):
|
||
|
|
"""
|
||
|
|
Catálogo Code/Name de una tabla de usuario de SAP B1, identificada por un
|
||
|
|
nombre amigable (ver USER_TABLES) en vez del nombre real de tabla/entidad.
|
||
|
|
Pensado para reutilizarse en cualquier formulario que necesite un select
|
||
|
|
cargado desde una tabla de usuario de este tipo.
|
||
|
|
"""
|
||
|
|
entity = USER_TABLES.get(name)
|
||
|
|
if not entity:
|
||
|
|
raise HTTPException(status_code=404, detail=f"Tabla de usuario '{name}' no está registrada")
|
||
|
|
|
||
|
|
# Service Layer limita el tamaño de página por defecto (server-side, no
|
||
|
|
# depende solo de "$top") salvo que se indique explícitamente el header
|
||
|
|
# B1S-PageSize; sin él, catálogos con más de ~20 filas quedaban truncados.
|
||
|
|
return forward_to_sapb1(
|
||
|
|
method="GET",
|
||
|
|
endpoint_path=entity,
|
||
|
|
params={"$select": "Code,Name", "$top": 200},
|
||
|
|
extra_headers={"B1S-PageSize": "200"},
|
||
|
|
).json()
|