# n8n Postgres Node Konfiguration ## Database Connection ``` Name: ERP Naurua Database Host: 192.168.1.199 Port: 55432 Database: naurua_erp User: codex_db_user Password: Ze90re0KAry8gyJ6eAx0Gf4IelEGI SSL: Disabled ``` ## Node Parameter ### Operation ``` Execute Query ``` ### Query ```sql SELECT -- Bestellinformationen so.external_ref AS "Bestellnummer", TO_CHAR(so.order_date, 'YYYY-MM-DD"T"HH24:MI:SS') AS "Bestelldatum", TO_CHAR(so.shipping_date, 'YYYY-MM-DD') AS "Versanddatum", -- Kundenadresse (Lieferadresse) COALESCE(ad.first_name, '') AS "Vorname", COALESCE(ad.last_name, '') AS "Nachname", COALESCE(ad.street, '') AS "Strasse", COALESCE(ad.house_number, '') AS "Hausnummer", COALESCE(ad.zip, '') AS "PLZ", COALESCE(ad.city, '') AS "Stadt", COALESCE(ad.country_name, '') AS "Land", -- Zahlungs- und Betragsinformationen COALESCE(pm.code, '') AS "Zahlungsart", COALESCE(so.amount_net, 0) AS "Gesamtbetrag_netto", COALESCE(so.amount_shipping, 0) AS "Versandkosten", COALESCE(so.total_amount, 0) AS "Gesamtbetrag_brutto", COALESCE(so.amount_discount, 0) AS "Rabatt", -- Produktzählungen (nur aktive Produkte) COALESCE(SUM(CASE WHEN p.id = 8 THEN a.qty ELSE 0 END), 0) AS "#_ChagaFlaschen", -- CHAGA (ID 8) COALESCE(SUM(CASE WHEN p.id = 5 THEN a.qty ELSE 0 END), 0) AS "#_ReishiFlaschen", -- 003.01 (ID 5) COALESCE(SUM(CASE WHEN p.id = 9 THEN a.qty ELSE 0 END), 0) AS "#_ShiitakeFlaschen", -- SHIITAKE (ID 9) COALESCE(SUM(CASE WHEN p.id = 6 THEN a.qty ELSE 0 END), 0) AS "#_LionsManeFlaschen" -- 005.02 (ID 6) FROM sales_order so -- Lieferadresse LEFT JOIN address ad ON so.party_id = ad.party_id AND ad.type = 'shipping' -- Zahlungsart LEFT JOIN payment_method pm ON so.payment_method_id = pm.id -- Bestellpositionen und Allokationen LEFT JOIN sales_order_line sol ON so.id = sol.sales_order_id LEFT JOIN sales_order_line_lot_allocation a ON sol.id = a.sales_order_line_id -- Produkte (nur aktive) LEFT JOIN product p ON a.product_id = p.id AND p.status = 'active' WHERE so.external_ref = $1 GROUP BY so.id, ad.id, pm.id ``` ### Query Values ```json { "values": { "value": "={{ $json.Bestellnummer }}", "string": "={{ $json.Bestellnummer }}" } } ``` ### Options ```json { "maxRows": 1 } ``` ## Workflow Integration ### Flow ``` Webhook → Postgres Node → Excel Node ``` ### Webhook Input ```json { "Bestellnummer": "10477" } ``` ### Expected Output ```json { "Bestellnummer": "10477", "Bestelldatum": "2026-04-05T23:12:07", "Versanddatum": "2026-04-06", "Vorname": "Irendy", "Nachname": "Bucio", "Strasse": "Weingartenstrasse", "Hausnummer": "5", "PLZ": "4600", "Stadt": "Olten", "Land": "CH", "Zahlungsart": "", "Gesamtbetrag_netto": 49.95, "Versandkosten": 4.95, "Gesamtbetrag_brutto": 44.91, "Rabatt": 9.99, "#_ChagaFlaschen": 0, "#_ReishiFlaschen": 0, "#_ShiitakeFlaschen": 0, "#_LionsManeFlaschen": 1.0000 } ``` ## Produkt-Mapping | Excel-Feld | Produkt-ID | SKU | Status | |------------|------------|-----|--------| | `#_ChagaFlaschen` | 8 | `CHAGA` | aktiv | | `#_ReishiFlaschen` | 5 | `003.01` | aktiv | | `#_ShiitakeFlaschen` | 9 | `SHIITAKE` | aktiv | | `#_LionsManeFlaschen` | 6 | `005.02` | aktiv | **Ignoriert:** ID 7 (`LIONSMANE`) - inaktiv ## Fehlerbehandlung ### Keine Bestellung gefunden - Alle Felder werden als leere Strings oder 0 zurückgegeben - Excel-Node kann trotzdem ausgeführt werden ### Keine Produkt-Allokationen - Produktzählungen sind 0 - Andere Felder sind normal gefüllt ## Testing ### Test Query direkt in DB ```bash psql "postgresql://codex_db_user:Ze90re0KAry8gyJ6eAx0Gf4IelEGI@192.168.1.199:55432/naurua_erp" -c " -- Test mit existierender Bestellung SELECT external_ref FROM sales_order WHERE external_ref LIKE '10%' LIMIT 1;" ``` ### Test Response Erwartet eine Zeile mit allen Feldern gefüllt oder als leere Strings/0. ## Wichtige Hinweise 1. **shipping_date** wird automatisch via Trigger berechnet (nächster Arbeitstag) 2. **Wochenend-Logik**: Freitag → Montag, Samstag → Montag, Sonntag → Montag 3. **Feldnamen** müssen exakt wie oben angegeben sein (Groß-/Kleinschreibung beachten) 4. **Produkt-IDs** sind fest in der Query hinterlegt 5. **Max Rows** = 1 (eine Bestellung pro Aufruf)