Integración Shopify → SAP Business One (snobbycl y on-chile)
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>
This commit is contained in:
commit
901dd8763d
47 files changed
+4709
No files matched your search
@@ -0,0 +1,38 @@
|
||||
from typing import Any, Dict
|
||||
|
||||
INVOICE_BASE_TYPE = 13 # ObjType clásico de Sales Invoice (oInvoices) en SAP B1
|
||||
|
||||
|
||||
def construir_delivery(invoice: Dict[str, Any], stock_transfer: Dict[str, Any], store_config: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""
|
||||
Arma el JSON para POST DeliveryNotes con la Invoice de reserva como base
|
||||
(BaseType/BaseEntry/BaseLine). Solo se entregan los ítems que
|
||||
efectivamente se transfirieron en este fulfillment (StockTransferLines),
|
||||
emparejados con la línea correspondiente de la Invoice por ItemCode.
|
||||
"""
|
||||
invoice_lines_por_sku = {line["ItemCode"]: line for line in invoice["DocumentLines"]}
|
||||
|
||||
document_lines = []
|
||||
for st_line in stock_transfer["StockTransferLines"]:
|
||||
inv_line = invoice_lines_por_sku[st_line["ItemCode"]]
|
||||
document_lines.append(
|
||||
{
|
||||
"ItemCode": st_line["ItemCode"],
|
||||
"Quantity": st_line["Quantity"],
|
||||
"WarehouseCode": inv_line["WarehouseCode"],
|
||||
"BaseType": INVOICE_BASE_TYPE,
|
||||
"BaseEntry": invoice["DocEntry"],
|
||||
"BaseLine": inv_line["LineNum"],
|
||||
}
|
||||
)
|
||||
|
||||
return {
|
||||
"CardCode": invoice.get("CardCode"),
|
||||
"CardName": invoice.get("CardName"),
|
||||
"Comments": invoice.get("NumAtCard"),
|
||||
"DocDate": invoice["DocDate"][:10],
|
||||
"Series": store_config["sap"]["numbering_series"]["DELIVERY"],
|
||||
"U_ShopifyOrderId": invoice.get("U_ShopifyOrderId"),
|
||||
"U_ShopifyStore": invoice.get("U_ShopifyStore"),
|
||||
"DocumentLines": document_lines,
|
||||
}
|
||||
Reference in new issue
Block a user