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
@@ -58,6 +58,49 @@ async def get_sunat_businesspartners_document_type():
|
||||
extra_headers=base_headers
|
||||
).json()
|
||||
|
||||
@router.get("/api/Catalogs/UdfValidValues")
|
||||
async def get_udf_valid_values(table_name: str, field_name: str):
|
||||
"""
|
||||
Genérico para cualquier campo de usuario (UDF) con lista de valores
|
||||
válidos: recibe la tabla SAP (ej. 'OWTQ') y el nombre del campo sin el
|
||||
prefijo 'U_' (ej. 'SIS_TIPDESP'), y devuelve sus valores válidos vía
|
||||
Service Layer (UserFieldsMD.ValidValuesMD), normalizados a {Code, Name}
|
||||
para poder usarse con useSapCatalog igual que las tablas de usuario.
|
||||
Equivale a lo que en HANA sería CUFD (por AliasID/TableID) + UFD1
|
||||
(por FieldID), pero sin necesidad de acceso directo a HANA.
|
||||
"""
|
||||
|
||||
def _escape(value: str) -> str:
|
||||
return value.replace("'", "''")
|
||||
|
||||
sap_params = {
|
||||
"$skip": 0,
|
||||
"$top": 200,
|
||||
"$inlinecount": "allpages",
|
||||
}
|
||||
sap_params["$filter"] = (
|
||||
f"TableName eq '{_escape(table_name)}' and Name eq '{_escape(field_name)}'"
|
||||
)
|
||||
|
||||
base_headers = {"B1S-PageSize": "200"}
|
||||
|
||||
response = forward_to_sapb1(
|
||||
method="GET",
|
||||
endpoint_path="UserFieldsMD",
|
||||
params=sap_params,
|
||||
extra_headers=base_headers,
|
||||
).json()
|
||||
|
||||
fields = response.get("value", [])
|
||||
valid_values = fields[0].get("ValidValuesMD", []) if fields else []
|
||||
|
||||
return {
|
||||
"value": [
|
||||
{"Code": v["Value"], "Name": v["Description"]} for v in valid_values
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@router.get("/api/ItemGroups")
|
||||
async def get_item_groups():
|
||||
|
||||
|
||||
Reference in new issue
Block a user