Files
mini-erp/mini-backend/routers/user_tables.py
T

41 lines
1.6 KiB
Python
Raw Normal View History

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 (confirmado contra el SAP real de tagumedica: @SIS_MOVINV se expone
# como "U_SIS_MOVINV", pero @EXX_TIPOOPER se expone como "EXX_TIPOOPER", sin
# prefijo "U_"), así que se centraliza acá en vez de que cada módulo tenga
# que adivinar o repetir el nombre de endpoint real.
USER_TABLES: Dict[str, str] = {
"MovimientoInventario": "U_SIS_MOVINV",
"TipoOperacion": "EXX_TIPOOPER",
}
@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()