WFDASH-WEBAPP/scripts/migrations
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
..
2026-06-23-add-quote-attachments-direction.ts
2026-06-23-add-quote-email-composition-fields.ts
2026-06-23-add-quote-outbound-email-fields.ts
2026-06-23-add-quote-template-fields.ts
2026-06-26-add-orders-rep.ts refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
2026-06-27-add-order-quote-match-fields.ts refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
2026-06-27-drop-orders-status-and-wipe.ts refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
2026-06-28-add-companies-coordinates.ts refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
2026-06-28-add-purchase-order-pdfs.ts refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
2026-06-28-convert-customer-fields.ts refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
2026-06-30-add-price-list-search-text.ts feat(pricelist): Catalogue search hits every field (incl. synonyms) 2026-06-30 12:10:27 +02:00
2026-06-30-add-price-list-sku-normalised.ts feat: implement sku-based catalogue pricing matching workflow 2026-06-30 21:20:53 +02:00
2026-06-30-add-price-list-source-file.ts feat(pricelist): Catalogue tab with search + category/brand filters 2026-06-30 11:49:48 +02:00
2026-06-30-add-pricelist-notes.ts feat(pricelist): notes field for AI instructions + file_name on upload 2026-06-30 11:09:27 +02:00
2026-06-30-add-quote-items-sku-and-pricing.ts feat: implement sku-based catalogue pricing matching workflow 2026-06-30 21:20:53 +02:00
2026-06-30-add-raw-price-list.ts feat(management): new Pricelist page with drag-drop upload + queue table 2026-06-30 09:14:36 +02:00
2026-06-30-backfill-price-list-search-text.ts feat: implement sku-based catalogue pricing matching workflow 2026-06-30 21:20:53 +02:00
2026-06-30-create-rfq-outbound.ts feat: implement sku-based catalogue pricing matching workflow 2026-06-30 21:20:53 +02:00
2026-07-02-add-sprint-categories-and-claims.ts feat(sprint): add new sprint pricing workflow and supporting code 2026-07-03 07:29:43 +02:00
2026-07-06-order-items-assigned-at.ts refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-07-06-order-items-collection-pool-rename.ts refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-07-06-order-items-nullable-numbers.ts refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-07-06-order-items-pricing-fields.ts refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-07-06-purchase-orders-documents-field.ts refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-07-06-purchase-orders-send-fields.ts refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-07-06-quote-attachments-quote-item-and-kind.ts refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-07-07-backfill-assigned-rfc.ts refactor: update pool UI, fix tiles and config 2026-07-07 18:01:43 +02:00
2026-07-07-order-items-collection-photo.ts feat(collection-pool): add unified redesigned collection pool view 2026-07-07 20:49:31 +02:00
2026-07-07-order-items-ready-for-collection.ts refactor: switch hardcoded UI colors to semantic theme tokens 2026-07-07 17:22:03 +02:00
2026-07-09-po-additional-attachments.ts feat(po-attachments): add migration for additional_attachments field 2026-07-09 23:22:23 +02:00
2026-07-09-po-pdf-tokens.ts feat(po-pdf): add token backfill migration script 2026-07-09 22:28:50 +02:00
2026-07-10-restore-counters.ts fix, feat, style: standardize quote numbers, polish UI 2026-07-10 22:21:50 +02:00
2026-07-14-create-stock-purchases.ts feat(stock): implement stock management workflow 2026-07-15 21:53:20 +02:00
2026-07-14-create-stock.ts feat(stock): implement stock management workflow 2026-07-15 21:53:20 +02:00
2026-07-15-add-stock-items-target-qty.ts feat(stock): implement stock management workflow 2026-07-15 21:53:20 +02:00
2026-07-15-add-stock-line-drv-id.ts feat: add stock line support to collection pool 2026-07-16 20:41:42 +02:00
2026-07-15-stock-purchase-line-state.ts feat: add stock line support to collection pool 2026-07-16 20:41:42 +02:00
2026-07-16-add-stock-purchase-documents-history.ts feat(stock-purchases,driver-app): add stock purchase workflow and driver pickup support 2026-07-18 22:43:50 +02:00
2026-07-16-add-stock-purchase-send-statuses.ts feat(stock-purchases,driver-app): add stock purchase workflow and driver pickup support 2026-07-18 22:43:50 +02:00
2026-07-17-add-stock-purchase-problem-fields.ts feat(stock-purchases,driver-app): add stock purchase workflow and driver pickup support 2026-07-18 22:43:50 +02:00
2026-07-19-create-delivery-notes.ts chore: add logos, opencode config and build assets 2026-07-27 08:21:20 +02:00
2026-07-19-delivery-notes-signed-copy.ts chore: add logos, opencode config and build assets 2026-07-27 08:21:20 +02:00
2026-07-19-delivery-notes-v3.ts chore: add logos, opencode config and build assets 2026-07-27 08:21:20 +02:00
2026-07-20-delivery-tracking.ts chore: add logos, opencode config and build assets 2026-07-27 08:21:20 +02:00
2026-07-24-partial-approval.ts chore: add logos, opencode config and build assets 2026-07-27 08:21:20 +02:00
2026-07-25-add-ai-insights-fields.ts chore: add logos, opencode config and build assets 2026-07-27 08:21:20 +02:00
2026-07-26-fix-quote-counter-and-reassign-numbers.ts fix(api,layout): sprint 500 chunk + add 9 missing top-level agent routes + metadataBase; drop unused collection_pool feature; quote counter fix migration 2026-07-26 22:18:49 +02:00
2026-08-03-add-stock-pricing-and-cost-history.ts feat: unify buyer task flows by supporting both customer orders and stock purchases in mark-ready API and UI, and fix PDF table layout responsiveness. 2026-08-03 18:52:30 +02:00
2026-08-04-add-order-items-item-status-index.ts perf(orders): server-side tab filter, slim expand payload, single combined count query 2026-08-04 18:17:59 +02:00
2026-08-04-add-quotes-status-index.ts perf(quotes): server-side tab filter, slim expand, combined counts + bonus bugfix 2026-08-04 19:01:31 +02:00
2026-08-06-add-stock-purchase-booked-fields.ts feat(stock-purchase): split warehouse confirm from accountant booking 2026-08-06 23:01:15 +02:00
2026-08-06-stock-purchases-additional-attachments.ts feat(pb): add stock_purchases.additional_attachments file field (migration) 2026-08-06 23:32:12 +02:00
2026-08-07-flip-stale-unprocessed-items.js fix(sprint): filter stale quote items, add cleanup migrations 2026-08-07 20:15:46 +02:00
2026-08-07-renumber-duplicate-quotes.js fix(sprint): filter stale quote items, add cleanup migrations 2026-08-07 20:15:46 +02:00
2026-08-07-stock-purchase-items-catalogue-fields.ts feat: add split-invoice stock PO workflow and supporting tooling 2026-08-07 00:53:29 +02:00
2026-08-08-add-quotes-ai-status.ts feat: add AI quote processing pipeline and admin settings UI 2026-08-09 16:17:29 +02:00
2026-08-09-add-ai-settings.ts feat: add AI quote processing pipeline and admin settings UI 2026-08-09 16:17:29 +02:00
2026-08-09-add-ai-system-prompt.ts feat: add AI quote processing pipeline and admin settings UI 2026-08-09 16:17:29 +02:00
2026-08-09-backfill-quote-validity-days.ts fix: correct quote expiry handling for PocketBase's 0 default 2026-08-11 08:32:17 +02:00
2026-08-09-repair-stock-double-booking.ts feat: add split views, stock picking slips, and invoice viewer 2026-08-09 23:16:55 +02:00
2026-08-13-fix-delivery-notes-relations.ts feat(delivery-notes, migrations): add tabs, grouping, markup, and fix DN relations 2026-08-14 09:41:14 +02:00
2026-08-17-add-order-items-in-stock.ts feat(collection-confirm): implement confirmation dialog for stock collection 2026-08-17 11:41:55 +02:00
2026-08-29-add-order-delivery-note-match-fields.ts feat(orders): add delivery-note repeat-order match fields 2026-08-30 12:57:16 +02:00
2026-09-04-create-pos-slip-layouts.ts chore(pos): add pos_slip_layouts PB collection for the slip layout editor 2026-09-04 12:46:17 +02:00
2026-09-09-add-quotes-attachment-fields.ts feat(quotes): split attachments into internal vs outbound with operator upload UI 2026-09-09 13:43:56 +02:00
2026-09-09-fix-quote-attachment-fields-maxselect.ts feat(quotes): split attachments into internal vs outbound with operator upload UI 2026-09-09 13:43:56 +02:00
2026-09-09-migrate-quote-attachments-to-fields.ts feat(quotes): split attachments into internal vs outbound with operator upload UI 2026-09-09 13:43:56 +02:00
2026-09-25-backfill-invoice-reconcile.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
2026-09-25-create-audit-log.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
2026-09-28-create-place-overrides.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
2026-09-28-create-rep-trip-legs.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
2026-09-30-create-giellie-chats.ts feat(giellie): chat store and giellie_chats migration 2026-09-30 23:44:55 +02:00
2026-10-03-add-pos-sales-delivery-note.ts feat(pos): raise a system delivery note on an account sale 2026-10-04 13:15:29 +02:00
_env-loader.ts feat(delivery-notes, migrations): add tabs, grouping, markup, and fix DN relations 2026-08-14 09:41:14 +02:00
add-pos-sale-discount-fields.ts feat: implement discount functionality in POS system 2026-09-03 12:19:21 +02:00
add-quote-items-user-edited.ts
broaden-quote-attachments-mime-types.ts
create-order-items-v2-and-collection-pool.ts
create-quote-attachments-and-replies.ts