Implement Excel webhook integration
Features: - Migration 0007: shipping_date column with automatic next-business-day calculation - New function trigger_excel_webhook() in order-import.php - SQL query for extracting Excel data from ERP database - Integration after successful order import - Documentation for n8n Postgres node configuration Changes: 1. db/migrations/0007_phase1_excel_webhook.sql - adds shipping_date column, trigger, next-business-day function 2. order-import.php - adds trigger_excel_webhook() function and integration point 3. docs/EXAKTE_POSTGRES_QUERY.sql - exact SQL query for n8n Postgres node 4. docs/N8N_POSTGRES_QUERY.md - comprehensive documentation 5. docs/N8N_POSTGRES_NODE.* - n8n node configurations 6. docs/N8N_EXCEL_WORKFLOW.json - complete workflow JSON 7. docs/N8N_NODE_COPY_PASTE.md - copy-paste ready instructions The implementation triggers an Excel webhook after every successful order import, sending all necessary data for Excel bookkeeping to n8n.
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
# n8n Postgres Node - Copy & Paste
|
||||
|
||||
## SQL Query für Postgres Node
|
||||
Kopiere diesen SQL-Code in das Query-Feld der n8n Postgres Node:
|
||||
|
||||
```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 (Parameter)
|
||||
```json
|
||||
{
|
||||
"values": {
|
||||
"value": "={{ $json.Bestellnummer }}",
|
||||
"string": "={{ $json.Bestellnummer }}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Database Connection
|
||||
```
|
||||
Name: ERP Naurua Database
|
||||
Host: 192.168.1.199
|
||||
Port: 55432
|
||||
Database: naurua_erp
|
||||
User: codex_db_user
|
||||
Password: Ze90re0KAry8gyJ6eAx0Gf4IelEGI
|
||||
SSL: Disabled
|
||||
```
|
||||
|
||||
## Options
|
||||
```json
|
||||
{
|
||||
"maxRows": 1
|
||||
}
|
||||
```
|
||||
|
||||
## Output Fields
|
||||
Die Query liefert diese Felder für die Excel-Node:
|
||||
|
||||
| Feldname | Typ | Beispiel |
|
||||
|----------|-----|----------|
|
||||
| Bestellnummer | String | "10477" |
|
||||
| Bestelldatum | ISO DateTime | "2026-04-05T23:12:07" |
|
||||
| Versanddatum | ISO Date | "2026-04-06" |
|
||||
| Vorname | String | "Irendy" |
|
||||
| Nachname | String | "Bucio" |
|
||||
| Strasse | String | "Weingartenstrasse" |
|
||||
| Hausnummer | String | "5" |
|
||||
| PLZ | String | "4600" |
|
||||
| Stadt | String | "Olten" |
|
||||
| Land | String | "CH" |
|
||||
| Zahlungsart | String | "" |
|
||||
| Gesamtbetrag_netto | Number | 49.95 |
|
||||
| Versandkosten | Number | 4.95 |
|
||||
| Gesamtbetrag_brutto | Number | 44.91 |
|
||||
| Rabatt | Number | 9.99 |
|
||||
| #_ChagaFlaschen | Number | 0 |
|
||||
| #_ReishiFlaschen | Number | 0 |
|
||||
| #_ShiitakeFlaschen | Number | 0 |
|
||||
| #_LionsManeFlaschen | Number | 1.0000 |
|
||||
|
||||
## Excel-Node Mapping
|
||||
Die Excel-Node muss diese Feldnamen exakt übernehmen (Groß-/Kleinschreibung beachten!).
|
||||
Reference in New Issue
Block a user