Backport de mejoras genéricas de backend (desde cliente/tagumedica) + limpieza de datos de cliente en main
Mejoras genéricas traídas: - core/crud_router.py: el PATCH genérico reenvía cualquier header B1S-* recibido del caller en vez de decidirlo el backend. - routers/catalogs.py: nuevo endpoint /api/Catalogs/UdfValidValues (valores válidos de cualquier UDF vía Service Layer). - routers/batch.py: /api/batch/stock (stock de un lote por almacén) y /api/batch/lot-source-warehouse (resuelve contra HANA de qué almacén salió un lote, repartiendo por origen). - routers/inventory_transfer_requests.py + core/inventory_transfer_requests.py: CRUD genérico de Solicitudes de Transferencia de Inventario. - routers/series.py + core/series.py: series activas de un tipo de documento. - routers/user_tables.py: catálogo Code/Name genérico de tablas de usuario (mapeo USER_TABLES vacío, cada cliente completa el suyo). - routers/reports.py / templates/reports/stickers.html: fix de márgenes/alto de página del reporte de etiquetas. - mini-backend/test/ -> mini-backend/tools/ (rename organizativo). Limpieza de datos de Tagumedica que ya estaban en el commit base de main (anteriores a la branch cliente/tagumedica, no relacionados con el backport): - tools/sap-tagumedica/sl.http: eliminado (tenía CompanyDB y password reales). - tools/ApiGateway/Login.yml: CompanyDB/host/password reemplazados por placeholders. - templates/reports/stickers.html: título hardcodeado "TAGUMEDICA" reemplazado por "EMPRESA". - menu_permissions.json: reemplazado por un ejemplo demo (usuarios/módulos ficticios) en vez de emails reales. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b2fb4e2d0a
commit
fef21898f9
30 files changed
+462
-112
No files matched your search
@@ -0,0 +1,38 @@
|
||||
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()
|
||||
Reference in new issue
Block a user