WFDASH-WEBAPP/scripts
Dave a499265b26 feat(pos): raise a system delivery note on an account sale
An account sale at the till used to produce a delivery-note-shaped slip that
was rendered entirely on the device and printed on the 80mm thermal printer.
Nothing reached the server, so the paperwork the client signed had no record
behind it. Cash / card / EFT are untouched and still get the thermal slip.

An account sale now creates a real `delivery_notes` record. The DN is raised
server-side INSIDE `checkoutSale` rather than by a follow-up call from the
till, because the offline queue (`flushQueue`) re-posts `/checkout` and
nothing else — a client-side second call would be silently dropped for every
sale taken while the network was down, which is exactly when a till is
flakiest.

`pos_sales.delivery_note` is the idempotency anchor that makes it
exactly-once: on a replay it hands back the existing DN instead of making a
second one, and a sale whose first attempt left the field blank retries. It
self-heals.

Deliberately non-fatal: if the DN can't be created the sale still succeeds.
The money and the stock movement are real by then; failing the checkout would
leave the drawer disagreeing with the stock ledger. The till is told instead.

Also in here:
  - DN number collision retry. The generator reads the highest existing number
    and adds one, which is not atomic, while PB holds a unique index on it. The
    POS adds a second concurrent writer, so two creates could collide and 500
    on a benign condition.
  - GET /api/v1/pos/sales now expands customer, customer.company and
    delivery_note so history.html can rebuild the DN card on a reprint. The
    nested customer.company matters — customer.company is itself a relation,
    so without it the card printed a raw PB id where the name belongs.
  - "Print slip" is hidden for account sales; that tender produces a delivery
    note, not a slip.

New GET /api/v1/pos/delivery-note/[number]/pdf streams the A4 original behind
assertPosAuth, so the till's bearer key stays its only credential. It does not
point at the CRM's unauthenticated invoicing route.

Verified end to end against a live note: DN26100401, correct company, both
lines with pricing, PDF attached, stock decremented once, and a replay of the
same client_ref returned the same DN without a duplicate.
2026-10-04 13:15:29 +02:00
..
__pycache__ feat(mcp): enhance API documentation and add new tools 2026-08-15 00:06:40 +02:00
dev
fixes feat(quotes): split attachments into internal vs outbound with operator upload UI 2026-09-09 13:43:56 +02:00
migrations feat(pos): raise a system delivery note on an account sale 2026-10-04 13:15:29 +02:00
perf feat: add new order, invoice, and dashboard management tools 2026-08-05 23:00:54 +02:00
smoke chore(giellie): add MiniMax vision/tool-call probe 2026-09-30 23:33:13 +02:00
utils refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-08-03-load-husqvarna-cart.ts chore(scripts): one-time stock-order loaders + source screenshots 2026-08-03 17:33:28 +02:00
2026-08-03-load-yg1-quote-soq078608.ts chore(scripts): one-time stock-order loaders + source screenshots 2026-08-03 17:33:28 +02:00
2026-08-03-merge-yg1-drafts.ts chore(scripts): one-time stock-order loaders + source screenshots 2026-08-03 17:33:28 +02:00
2026-08-13-heal-item-intel.ts feat(tv): add TV dashboard + refine workflows 2026-08-13 20:55:22 +02:00
2026-08-21-backfill-order-duplicates.ts feat(orders): enhance order handling with email_message_id deduplication and displayContactName utility 2026-08-21 19:18:02 +02:00
_csv-sink.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
_dump-browser-csv.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
_env.ts feat(tv): add TV dashboard + refine workflows 2026-08-13 20:55:22 +02:00
_scrape-dowel-pins.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
_scrape-grease-nipples.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
_scrape-spring-pins.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
apply-default-markup.test.ts feat(stock): inline qty editing + column sort + pricing-gap operator scripts 2026-09-14 13:04:26 +02:00
apply-default-markup.ts feat(stock): inline qty editing + column sort + pricing-gap operator scripts 2026-09-14 13:04:26 +02:00
audit-pb-fields.py chore: add logos, opencode config and build assets 2026-07-27 08:21:20 +02:00
backfill-item-intel.ts feat(item-intel): add new item intel popover and backend workflows 2026-08-11 02:57:57 +02:00
backfill-po-items.mjs refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
backfill-stock-prices.test.ts feat(stock): seed pricing fields on create + sync price_list to stock_items 2026-09-14 13:04:08 +02:00
backfill-stock-prices.ts feat(stock): seed pricing fields on create + sync price_list to stock_items 2026-09-14 13:04:08 +02:00
build_v5_workflow.py
compress-attachments-once.mjs feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
deploy_v5_to_n8n.py
diff-nss-fix.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
fleetai-probe.mjs feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
import-data.ts
list-irda-stock.ts feat(stock): inline qty editing + column sort + pricing-gap operator scripts 2026-09-14 13:04:26 +02:00
mcp-doc-gen.py feat(mcp): enhance API documentation and add new tools 2026-08-15 00:06:40 +02:00
mrbxnim4-telegram-cloud-photo-size-4-6016860144018328845-y.jpg feat(invoicing): add QuickBooks invoicing flow and print functionality 2026-07-09 09:44:55 +02:00
n8n-v2-error.ts
n8n-v2-main.ts
nss-add-invoice-columns.ts fix(invoicing): bill only what's collected, support partial pickups + kit splits 2026-09-17 13:53:36 +02:00
nss-backfill-in-stock-qty.ts fix(order-process): stamp qty_collected when marking items in stock 2026-09-18 08:07:38 +02:00
nss-dowel-pins-din6325-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-dowel-pins-din6325-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-dowel-pins-din6325-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-dowel-pins-din6325-pilot.csv feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-fasteners-fix-name-description.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-fasteners-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-fasteners-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-fasteners-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-fasteners-pilot.csv feat(stock): implement auto-markup for selling price and markup on stock item creation and updates 2026-09-16 09:49:52 +02:00
nss-fasteners-revert-name-description.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-fasteners-single-pieces.csv feat(stock): implement auto-markup for selling price and markup on stock item creation and updates 2026-09-16 09:49:52 +02:00
nss-fix-kusasalethu-inv10924.ts fix(invoicing): bill only what's collected, support partial pickups + kit splits 2026-09-17 13:53:36 +02:00
nss-grease-nipples-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-grease-nipples-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-grease-nipples-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-grease-nipples-pilot.csv feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-hex-bolts-din931-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-hex-bolts-din931-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-hex-bolts-din931-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-hex-bolts-din931-pilot.csv feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-hex-bolts-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-hex-bolts-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-scrape-bundle.js feat(stock): implement auto-markup for selling price and markup on stock item creation and updates 2026-09-16 09:49:52 +02:00
nss-set-screws-din933-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-set-screws-din933-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-set-screws-din933-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-set-screws-din933-pilot.csv feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-split-pins-din94-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-split-pins-din94-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-split-pins-din94-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-split-pins-din94-pilot.csv feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-spring-pins-iso8752-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-spring-pins-iso8752-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-spring-pins-iso8752-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-spring-pins-iso8752-pilot.csv feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-threaded-rods-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-threaded-rods-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-threaded-rods-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-threaded-rods-pilot.csv feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-washers-din126-pb-import.json feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-washers-din126-pilot.csv feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-washers-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
nss-washers-pb-transform.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
quotes.pb.js refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
recent-stock-movements.ts feat(stock): implement auto-markup for selling price and markup on stock item creation and updates 2026-09-16 09:49:52 +02:00
regenerate-delivery-note-pdfs.ts feat: add driverless collection confirm and new order tooling 2026-08-12 01:13:46 +02:00
seed-gielie-quotes.py
setup-pocketbase.ts
verify-nss-bolts.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-dowel-pins.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-fix.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-grease-nipples.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-ingest.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-revert.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-rods.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-set-screws.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-split-pins.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-spring-pins.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify-nss-washers.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
verify_v5.py