1.11.13
⚙️ Patch 1.11.13 — Wholesaler orders: positions, n8n parse, credentials, caching¶
🚀 Summary¶
Extends Wholesalers → Orders with merged positions (line item + tracking per row), sync n8n file parse into the create dialog, a Credentials tab for the parse webhook (X-API-KEY), localStorage caching with Reload, and order files on a dedicated wholesalers_orders volume (File Manager).
✨ Details¶
| Area | Behavior |
|---|---|
| Positions | wholesale_po_items carries carrier, tracking, status, units, goods value; separate shipments table removed / migrated |
| Create order | Upload file → parse via n8n → fill order_number, order_date, order_value_net, total_units + items; editable table with headers and line totals (qty × unit price) |
| n8n contract | Production: JSON with items[] (+ optional header fields). Test: HTTP < 400 on webhook-test URL; stored DB token used if field empty |
| Credentials | Wholesalers → Credentials: webhook URL, generate/save token, Test connection |
| Files | Volume wholesalers_orders on omni (/app/wholesalers_orders) and File Manager (/srv/wholesalers_orders); download from order drawer |
| Caching | Directory + Orders cache in localStorage; filter client-side; Reload / mutate refreshes |
| Delete wholesaler | Cascades linked purchase orders (confirm warns) |
| Carriers | DHL, UPS, GLS, DPD, DSV, Hermes, FedEx, freight, pickup (+ tracking URLs) |
📌 Notes¶
- Redeploy service-omni, frontend, and file-manager (new volume). Restart omni so
ensure_wholesale_po_positions_mergedruns, or applydocker/postgres/updates/merge_wholesale_po_items_shipments.sql. - Add
wholesalers_ordersin Portainer compose as well (docker-compose-portainer.yml). - Tracking status updates for open tracked positions are intended via a second n8n job reading/updating Postgres directly (
tracking_noset,status <> delivered).
✅ Verify¶
- Wholesalers → Credentials → save webhook + token → Test connection succeeds on HTTP OK.
- Orders → New order → choose wholesaler + file → Parse with n8n → header fields and positions fill; line totals show; Create attaches file.
- Order drawer → Positions: edit tracking/carrier, mark delivered; Download invoice file when present.
- Switch Open ↔ Payment due without network reload of summary; Reload refetches.
- Delete a wholesaler that has demo orders → succeeds after confirm.
📁 Files¶
backend/service_omni/app/schemas/wholesale_purchase_orders.py,crud/,api/.../wholesale_orders.pybackend/service_omni/app/services/wholesale_orders/—calc.py,files.py,n8n_parse.pybackend/service_omni/app/core/schema_patches.pydocker/postgres/updates/merge_wholesale_po_items_shipments.sql,add_wholesale_purchase_orders.sql, seeddocker-compose.yml,docker-compose-portainer.yml—wholesalers_ordersvolumefrontend/src/pages/Wholesalers/—OrdersTab.jsx,CredentialsTab.jsx,index.jsx,cache.js,orderConstants.jsfrontend/src/services/api/omni/wholesaleOrders.jsdocs/docs/services/service_omni/services/wholesale_orders.mddocs/docs/infrastructure/file_manager.mddocs/docs/patchnotes/1.11/1.11.13.md— this file