{ "name": "Gheeraert Workflow 2 - OrderID ophalen", "nodes": [ { "parameters": { "method": "POST", "url": "https://my-uat.gheeraert.be/token", "sendBody": true, "contentType": "form-urlencoded", "bodyParameters": { "parameters": [ { "name": "grant_type", "value": "password" }, { "name": "username", "value": "api@dewittransport.nl" }, { "name": "password", "value": "my.gheeraert" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.4, "position": [ -368, -96 ], "id": "f5b22505-d130-43e6-9600-85e55051d7cb", "name": "Get Gheeraert Token" }, { "parameters": { "operation": "executeQuery", "query": "SELECT\n id,\n purchase_order_number,\n transpas_legnr,\n transpas_reference,\n file_name\nFROM public.ghe_order_log\nWHERE file_upload_status = 'sent'\n AND gheeraert_order_id IS NULL\n AND is_closed = false\n AND (\n next_status_poll_at IS NULL\n OR next_status_poll_at <= CURRENT_TIMESTAMP\n )\nORDER BY\n COALESCE(last_order_lookup_at, created_at),\n id\nLIMIT 25;", "options": {} }, "type": "n8n-nodes-base.postgres", "typeVersion": 2.6, "position": [ -144, -96 ], "id": "1c71fb93-6d01-4187-aa56-b5816f37ab6b", "name": "Get Orders Without Gheeraert ID", "credentials": { "postgres": { "id": "pxziuCOuNpsUFKrm", "name": "transpas_n8n_gheeraert" } } }, { "parameters": { "jsCode": "return $input.all().map(item => {\n const purchaseOrderNumber = String(item.json.purchase_order_number || '').trim();\n\n return {\n json: {\n ...item.json,\n encodedPurchaseOrderNumber: encodeURIComponent(purchaseOrderNumber),\n },\n };\n});" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 80, -96 ], "id": "5fb9dc99-37cb-4a46-bde7-e43bc94bbf34", "name": "Prepare PurchaseOrder Lookup" }, { "parameters": { "jsCode": "return $input.all().map(item => {\n const j = item.json;\n\n let response = j.gheeraertOrder;\n\n // In jouw output is gheeraertOrder een JSON-string.\n if (typeof response === 'string') {\n try {\n response = JSON.parse(response);\n } catch (e) {\n response = null;\n }\n }\n\n // Fallback als response direct op json staat.\n if (!response && (j.OrderID || j.ID || j.orderID)) {\n response = j;\n }\n\n // Soms komt API als array terug.\n const order = Array.isArray(response) ? response[0] : response;\n\n const rawOrderId =\n order?.OrderID ??\n order?.orderID ??\n order?.ID ??\n order?.id ??\n null;\n\n const gheeraertOrderId = rawOrderId !== null ? Number(rawOrderId) : null;\n const found = Number.isFinite(gheeraertOrderId) && gheeraertOrderId > 0;\n\n let errorMessage = '';\n\n if (j.error?.message) {\n errorMessage = j.error.message;\n }\n\n let apiMessage = '';\n\n if (errorMessage.includes('Order not found')) {\n apiMessage = 'Gheeraert OrderID nog niet gevonden';\n } else if (errorMessage) {\n apiMessage = errorMessage.slice(0, 500);\n }\n\n return {\n json: {\n ...j,\n\n found,\n gheeraertOrderId: found ? Math.trunc(gheeraertOrderId) : null,\n\n gheeraertTrackingId: order?.TrackingID ?? null,\n gheeraertPurchaseOrderNumber: order?.PurchaseOrderNumber ?? null,\n gheeraertExtOrderNumber: order?.ExtOrderNumber ?? null,\n gheeraertExtDelNoteNumber: order?.ExtDelNoteNumber ?? null,\n\n lookupMessage: found\n ? `Gheeraert OrderID gevonden: ${Math.trunc(gheeraertOrderId)}`\n : (apiMessage || 'Gheeraert OrderID nog niet gevonden'),\n },\n };\n});" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 752, -96 ], "id": "5011b72f-6521-49a6-8d6b-30447bd9e2b5", "name": "Normalize Gheeraert Lookup" }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 3 }, "conditions": [ { "id": "7da7e84c-8efd-459f-987a-7b3676b19c06", "leftValue": "={{ $json.found }}", "rightValue": "true", "operator": { "type": "boolean", "operation": "true", "singleValue": true } } ], "combinator": "and" }, "options": {} }, "type": "n8n-nodes-base.if", "typeVersion": 2.3, "position": [ 976, -96 ], "id": "168fc7f2-8447-4b76-a8cf-24c5be91604e", "name": "OrderID Found?" }, { "parameters": { "operation": "executeQuery", "query": "UPDATE public.ghe_order_log\nSET\n gheeraert_order_id = $1::integer,\n last_order_lookup_at = CURRENT_TIMESTAMP,\n next_status_poll_at = CURRENT_TIMESTAMP,\n file_upload_error = NULL\nWHERE id = $2::bigint;", "options": { "queryReplacement": "=$1 = {{ $json.gheeraertOrderId }}\n$2 = {{ $json.id }}" } }, "type": "n8n-nodes-base.postgres", "typeVersion": 2.6, "position": [ 1200, -192 ], "id": "3503f64e-1483-4401-825e-22cac20fab82", "name": "Update Gheeraert OrderID", "credentials": { "postgres": { "id": "pxziuCOuNpsUFKrm", "name": "transpas_n8n_gheeraert" } } }, { "parameters": { "operation": "executeQuery", "query": "UPDATE public.ghe_order_log\nSET\n last_order_lookup_at = CURRENT_TIMESTAMP,\n next_status_poll_at = CURRENT_TIMESTAMP + INTERVAL '10 minutes',\n file_upload_error = $1::text\nWHERE id = $2::bigint\n AND gheeraert_order_id IS NULL;", "options": { "queryReplacement": "=$1 = {{ $json.lookupMessage }}\n$2 = {{ $json.id }}" } }, "type": "n8n-nodes-base.postgres", "typeVersion": 2.6, "position": [ 1200, 0 ], "id": "994d3fcc-4926-40de-a8fa-fe64f5aabbee", "name": "OrderID Not Found Retry Later", "credentials": { "postgres": { "id": "pxziuCOuNpsUFKrm", "name": "transpas_n8n_gheeraert" } } }, { "parameters": { "url": "=https://my-uat.gheeraert.be/api/Order/ByPurchaseOrderNumber/{{$json.encodedPurchaseOrderNumber}}", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "Authorization", "value": "=Bearer {{ $('Get Gheeraert Token').first().json.access_token }}" }, { "name": "Accept", "value": "application/json" } ] }, "options": { "response": { "response": { "responseFormat": "text", "outputPropertyName": "gheeraertOrder" } } } }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.4, "position": [ 304, -32 ], "id": "f8874799-dbed-4a32-86ee-ae56fcafebf3", "name": "Lookup Gheeraert OrderID", "notesInFlow": false, "onError": "continueRegularOutput" }, { "parameters": { "mode": "combine", "combineBy": "combineByPosition", "options": {} }, "type": "n8n-nodes-base.merge", "typeVersion": 3.2, "position": [ 528, -96 ], "id": "a4c3324a-8ad3-40dd-8267-33c91af7740a", "name": "Merge" }, { "parameters": { "rule": { "interval": [ { "field": "cronExpression", "expression": "*/20 6-22 * * 1-5" } ] } }, "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.3, "position": [ -592, -96 ], "id": "61885d7b-a67f-477a-a772-5063858bc108", "name": "Schedule Trigger" } ], "pinData": {}, "connections": { "Get Gheeraert Token": { "main": [ [ { "node": "Get Orders Without Gheeraert ID", "type": "main", "index": 0 } ] ] }, "Get Orders Without Gheeraert ID": { "main": [ [ { "node": "Prepare PurchaseOrder Lookup", "type": "main", "index": 0 } ] ] }, "Prepare PurchaseOrder Lookup": { "main": [ [ { "node": "Merge", "type": "main", "index": 0 }, { "node": "Lookup Gheeraert OrderID", "type": "main", "index": 0 } ] ] }, "Normalize Gheeraert Lookup": { "main": [ [ { "node": "OrderID Found?", "type": "main", "index": 0 } ] ] }, "OrderID Found?": { "main": [ [ { "node": "Update Gheeraert OrderID", "type": "main", "index": 0 } ], [ { "node": "OrderID Not Found Retry Later", "type": "main", "index": 0 } ] ] }, "Update Gheeraert OrderID": { "main": [ [] ] }, "Lookup Gheeraert OrderID": { "main": [ [ { "node": "Merge", "type": "main", "index": 1 } ] ] }, "Merge": { "main": [ [ { "node": "Normalize Gheeraert Lookup", "type": "main", "index": 0 } ] ] }, "Schedule Trigger": { "main": [ [ { "node": "Get Gheeraert Token", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1", "binaryMode": "separate" }, "versionId": "1d9a70a4-7abe-4927-a8ca-ababafe107e6", "meta": { "templateCredsSetupCompleted": true, "instanceId": "bef8d409866a58c0777dfe7cca1b9c2400fd051c056d361501393ab423006b5f" }, "nodeGroups": [], "id": "BHfu3wTZCa8C9Gwr", "tags": [] }