Upload files to "Gheeraert"

This commit is contained in:
2026-07-03 07:29:55 +02:00
parent b140307141
commit 560b30b2b9
4 changed files with 1322 additions and 0 deletions
@@ -0,0 +1,337 @@
{
"name": "Gheeraert workflow 3 — statussen ophalen",
"nodes": [
{
"parameters": {
"operation": "executeQuery",
"query": "SELECT\n id,\n purchase_order_number,\n transpas_legnr,\n transpas_reference,\n gheeraert_order_id,\n last_status_poll_at,\n next_status_poll_at,\n delivered_at,\n pod_online_at,\n pod_downloaded_at\nFROM public.ghe_order_log\nWHERE file_upload_status = 'sent'\n AND gheeraert_order_id IS NOT 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_status_poll_at, created_at),\n id\nLIMIT 25;",
"options": {}
},
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
224,
-272
],
"id": "efb74e39-f147-40e3-af5b-c8022ad51944",
"name": "Get Orders With Gheeraert ID",
"credentials": {
"postgres": {
"id": "pxziuCOuNpsUFKrm",
"name": "transpas_n8n_gheeraert"
}
}
},
{
"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": [
448,
-272
],
"id": "b049495e-5e3d-4c86-8ad7-5283fdf82efe",
"name": "Get Gheeraert Token"
},
{
"parameters": {
"url": "={{ 'https://my-uat.gheeraert.be/api/OrderTracking/' + $('Get Orders With Gheeraert ID').item.json.gheeraert_order_id }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "={{ 'Bearer ' + $('Get Gheeraert Token').first().json.access_token }}"
},
{
"name": "Accept",
"value": "application/json"
}
]
},
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
672,
-272
],
"id": "1407cf2f-34b0-4a58-bdc3-86ac1ea72777",
"name": "Lookup Gheeraert OrderTracking",
"onError": "continueRegularOutput"
},
{
"parameters": {
"jsCode": "function simpleHash(input) {\n const str = String(input ?? '');\n let h1 = 0xdeadbeef ^ str.length;\n let h2 = 0x41c6ce57 ^ str.length;\n\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n\n h1 =\n Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^\n Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n\n h2 =\n Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^\n Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return (\n (h2 >>> 0).toString(16).padStart(8, '0') +\n (h1 >>> 0).toString(16).padStart(8, '0')\n );\n}\n\nreturn $input.all().map(item => {\n const j = item.json;\n\n const base = [\n j.gheeraert_order_id ?? '',\n j.status_id ?? '',\n j.tracking_date ?? '',\n j.tracking_comments ?? '',\n j.barcode ?? '',\n j.tracking_url ?? '',\n ].join('|');\n\n return {\n json: {\n ...j,\n status_hash: simpleHash(base),\n },\n };\n});"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1120,
-272
],
"id": "c517653a-9b40-4c9a-a1a8-c7e0f0cf3636",
"name": "Make Status Hash"
},
{
"parameters": {
"operation": "executeQuery",
"query": "WITH input AS (\n SELECT $1::jsonb AS j\n),\ntyped AS (\n SELECT\n (j->>'order_log_id')::bigint AS order_log_id,\n (j->>'gheeraert_order_id')::integer AS gheeraert_order_id,\n (j->>'purchase_order_number')::varchar AS purchase_order_number,\n (j->>'status_id')::integer AS status_id,\n (j->>'tracking_date')::timestamp AS tracking_date,\n (j->>'tracking_comments')::text AS tracking_comments,\n (j->>'tracking_url')::text AS tracking_url,\n NULLIF(j->>'barcode', '')::varchar AS barcode,\n NULLIF(j->>'user_name', '')::varchar AS user_name,\n (j->>'status_hash')::varchar AS status_hash\n FROM input\n),\nins AS (\n INSERT INTO public.ghe_status_log (\n order_log_id,\n gheeraert_order_id,\n purchase_order_number,\n status_id,\n tracking_date,\n tracking_comments,\n tracking_url,\n barcode,\n user_name,\n status_hash\n )\n SELECT\n order_log_id,\n gheeraert_order_id,\n purchase_order_number,\n status_id,\n tracking_date,\n tracking_comments,\n tracking_url,\n barcode,\n user_name,\n status_hash\n FROM typed\n ON CONFLICT (status_hash)\n DO NOTHING\n RETURNING id\n)\nSELECT\n ins.id AS inserted_id,\n typed.order_log_id,\n typed.gheeraert_order_id,\n typed.purchase_order_number,\n typed.status_id,\n typed.tracking_date,\n typed.tracking_comments,\n typed.tracking_url,\n typed.barcode,\n typed.user_name,\n typed.status_hash\nFROM typed\nLEFT JOIN ins ON TRUE;",
"options": {
"queryReplacement": "={{ [JSON.stringify($json)] }}"
}
},
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
1440,
-272
],
"id": "0612800b-26e7-415d-8bf3-225edbbb93e4",
"name": "Insert ghe_status_log",
"credentials": {
"postgres": {
"id": "pxziuCOuNpsUFKrm",
"name": "transpas_n8n_gheeraert"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"id": "5d26cbeb-2ed9-45a4-914b-754a130fc915",
"leftValue": "={{ $json.inserted_id }}",
"rightValue": "",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
1664,
-272
],
"id": "7ef41b79-2a94-4ab3-9e0d-aecf274dcd7e",
"name": "If"
},
{
"parameters": {
"operation": "executeQuery",
"query": "\nWITH input AS (\n SELECT $1::jsonb AS j\n)\nUPDATE public.ghe_order_log\nSET\n last_status_poll_at = CURRENT_TIMESTAMP,\n last_status_id = (j->>'status_id')::integer,\n last_status_text = (j->>'tracking_comments')::varchar,\n last_tracking_date = (j->>'tracking_date')::timestamp,\n\n delivered_at = CASE\n WHEN (j->>'status_id')::integer = 30 AND delivered_at IS NULL\n THEN (j->>'tracking_date')::timestamp\n ELSE delivered_at\n END,\n\n pod_online_at = CASE\n WHEN (j->>'status_id')::integer = 35 AND pod_online_at IS NULL\n THEN (j->>'tracking_date')::timestamp\n ELSE pod_online_at\n END,\n\n next_status_poll_at = CASE\n WHEN (j->>'status_id')::integer = 35 THEN CURRENT_TIMESTAMP + INTERVAL '1 day'\n WHEN (j->>'status_id')::integer = 30 THEN CURRENT_TIMESTAMP + INTERVAL '2 hours'\n ELSE CURRENT_TIMESTAMP + INTERVAL '15 minutes'\n END\nFROM input\nWHERE public.ghe_order_log.id = (j->>'order_log_id')::bigint;",
"options": {
"queryReplacement": "=={{ [JSON.stringify($json)] }}"
}
},
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
1920,
-336
],
"id": "bb2fd5f0-0958-41aa-b739-a93689508021",
"name": "Update ghe_order_log",
"credentials": {
"postgres": {
"id": "pxziuCOuNpsUFKrm",
"name": "transpas_n8n_gheeraert"
}
}
},
{
"parameters": {
"content": "## workflow 1: orders versturen + loggen\n## workflow 2: Gheeraert OrderID ophalen\n## workflow 3: tracking ophalen + statuslog vullen\n",
"width": 720
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
48,
-464
],
"id": "3d0643a3-a9ab-481f-b8e3-cd00c9d54628",
"name": "Sticky Note"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "*/20 6-22 * * 1-5"
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
0,
-272
],
"id": "201f3623-82ac-43a6-aade-8d4d967a43bf",
"name": "Schedule Trigger"
},
{
"parameters": {
"jsCode": "const orders = $('Get Orders With Gheeraert ID').all().map(i => i.json);\n\nconst orderByGheeraertId = new Map(\n orders.map(order => [String(order.gheeraert_order_id), order])\n);\n\nconst out = [];\n\nfor (const item of $input.all()) {\n const t = item.json;\n\n const gheOrderId = String(t.OrderID ?? '');\n const order = orderByGheeraertId.get(gheOrderId);\n\n if (!order) {\n out.push({\n json: {\n error: true,\n error_text: `Geen matching order gevonden voor Gheeraert OrderID ${gheOrderId}`,\n gheeraert_order_id: t.OrderID ?? null,\n purchase_order_number: t.PurchaseOrderNumber ?? null,\n raw: t,\n },\n });\n continue;\n }\n\n out.push({\n json: {\n order_log_id: order.id ?? null,\n gheeraert_order_id: t.OrderID ?? order.gheeraert_order_id ?? null,\n purchase_order_number: t.PurchaseOrderNumber ?? order.purchase_order_number ?? null,\n transpas_legnr: order.transpas_legnr ?? t.ExtOrderNumber ?? null,\n transpas_reference: order.transpas_reference ?? null,\n\n status_id: t.StatusID ?? null,\n tracking_date: t.TrackingDate ?? null,\n tracking_comments: t.PublicTrackingComments ?? null,\n tracking_url: t.TrackingURL ?? null,\n barcode: t.Barcode ?? null,\n user_name: t.UserName ?? null,\n\n gheeraert_track_id: t.TrackID ?? null,\n location: t.Location ?? null,\n eta: t.ETA ?? null,\n raw: t,\n },\n });\n}\n\nreturn out;"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
896,
-272
],
"id": "0e004fcc-f058-4f5c-aa75-f4ee40768295",
"name": "Attach Order Context"
}
],
"pinData": {},
"connections": {
"Get Orders With Gheeraert ID": {
"main": [
[
{
"node": "Get Gheeraert Token",
"type": "main",
"index": 0
}
]
]
},
"Get Gheeraert Token": {
"main": [
[
{
"node": "Lookup Gheeraert OrderTracking",
"type": "main",
"index": 0
}
]
]
},
"Lookup Gheeraert OrderTracking": {
"main": [
[
{
"node": "Attach Order Context",
"type": "main",
"index": 0
}
]
]
},
"Make Status Hash": {
"main": [
[
{
"node": "Insert ghe_status_log",
"type": "main",
"index": 0
}
]
]
},
"Insert ghe_status_log": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "Update ghe_order_log",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get Orders With Gheeraert ID",
"type": "main",
"index": 0
}
]
]
},
"Attach Order Context": {
"main": [
[
{
"node": "Make Status Hash",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate"
},
"versionId": "0c994af9-2e64-48c1-80ca-cb00d8ae00e5",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "bef8d409866a58c0777dfe7cca1b9c2400fd051c056d361501393ab423006b5f"
},
"nodeGroups": [],
"id": "csPbDxZ03HyBjtwh",
"tags": []
}