Pipeline de integración de órdenes de Shopify a SAP Service Layer:
Invoice de reserva, pago con tarjeta o transferencia por transacción,
solicitud de traslado, traslado de stock y entrega.
- Invoice igual a lo cobrado; fulfillments limitados a lo facturado
- Estados terminales integrated, timeout, ignored y cancelled
- Idempotencia contra SAP: adopta documentos existentes en vez de duplicar
- Reintentos de red en el cliente de Shopify
- Secretos fuera de los JSON de tienda (${VARIABLE} resuelta desde .env)
- Herramientas de consulta, integración puntual y carga de pruebas
- Documentación en docs/ (flujo, casos especiales, mapeo, configuración)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
from typing import Any, Dict
|
|
|
|
ITR_BASE_TYPE = 1250000001 # DocObjectCode de InventoryTransferRequests
|
|
|
|
|
|
def construir_stock_transfer(itr: Dict[str, Any], store_config: Dict[str, Any]) -> Dict[str, Any]:
|
|
"""
|
|
Arma el JSON para POST StockTransfers a partir de una
|
|
InventoryTransferRequest ya creada en SAP (itr = el documento completo
|
|
leído de SAP, con LineNum reales). Copia CardCode/CardName/Comments/
|
|
almacenes/UDFs de la ITR, y cada línea referencia su línea base vía
|
|
BaseType/BaseEntry/BaseLine.
|
|
"""
|
|
document_lines = [
|
|
{
|
|
"ItemCode": line["ItemCode"],
|
|
"Quantity": line["Quantity"],
|
|
"FromWarehouseCode": line["FromWarehouseCode"],
|
|
"WarehouseCode": line["WarehouseCode"],
|
|
"BaseType": ITR_BASE_TYPE,
|
|
"BaseEntry": itr["DocEntry"],
|
|
"BaseLine": line["LineNum"],
|
|
}
|
|
for line in itr["StockTransferLines"]
|
|
]
|
|
|
|
return {
|
|
"CardCode": itr.get("CardCode"),
|
|
"CardName": itr.get("CardName"),
|
|
"Comments": itr.get("Comments"),
|
|
"DocDate": itr["DocDate"][:10],
|
|
"FromWarehouse": itr["FromWarehouse"],
|
|
"ToWarehouse": itr["ToWarehouse"],
|
|
"Series": store_config["sap"]["numbering_series"]["STOCK_TRANSFER"],
|
|
"U_ShopifyOrderId": itr.get("U_ShopifyOrderId"),
|
|
"U_ShopifyStore": itr.get("U_ShopifyStore"),
|
|
"StockTransferLines": document_lines,
|
|
}
|