WFDASH-WEBAPP/src/lib
Dave 924f7b764e fix: uploads to an order line add files instead of replacing them
A PocketBase file PATCH under the bare field name replaces the whole
list. On 2026-10-19 a buyer's "Add supplier invoice" on PO202610008LIF
deleted the driver's delivery-note photo (uploaded 14:38, read by the AI
14:40, replaced 14:41). Generating or regenerating a delivery-note PDF
did the same to every line on the DN.

- New src/lib/server/order-item-files.ts: addAttachmentForm() adds with
  `order_item_attachements+` and removes (`-`) only older stored copies
  of the same document; pickStoredCopy() finds a file by its uploaded
  name (PB stores "DN26101913.pdf" as "dn26101913_<10>.pdf").
- Used by the Collection Confirm invoice upload, DN create, DN regenerate
  (replaces only its own previous PDF) and /api/invoicing/delivery-note.
- /api/invoicing/delivery-note-pdf finds the DN PDF by name instead of
  taking the line's first file (falls back to the old behaviour for
  legacy names).
- AGENTS.md: always add, never replace.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 14:46:37 +02:00
..
pdf fix(delivery-note): signed copy invisible, and a bigger QR in the corner 2026-10-04 17:00:30 +02:00
reports feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
scan fix(scan): speed up QR recognition and keep scanning 2026-10-05 09:43:53 +02:00
server fix: uploads to an order line add files instead of replacing them 2026-10-19 14:46:37 +02:00
audit-fetch.test.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
audit-fetch.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
audit-format.test.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
audit-format.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
collection-ai-card.test.ts feat(collection-confirm): check printed prices on delivery notes; show AI reading notes 2026-10-19 13:50:27 +02:00
collection-ai-card.ts feat(collection-confirm): check printed prices on delivery notes; show AI reading notes 2026-10-19 13:50:27 +02:00
collection-ai-ticks.test.ts feat(collection-confirm): check printed prices on delivery notes; show AI reading notes 2026-10-19 13:50:27 +02:00
collection-ai-ticks.ts feat(collection-confirm): check printed prices on delivery notes; show AI reading notes 2026-10-19 13:50:27 +02:00
delivery-note-stage.test.ts fix(delivery-notes): merge cancelled into completed, and fix the search 2026-10-04 23:29:48 +02:00
delivery-note-stage.ts fix(delivery-notes): merge cancelled into completed, and fix the search 2026-10-04 23:29:48 +02:00
dev-identity.test.ts
dev-identity.ts
file-fields.test.ts fix(delivery-note): signed copy invisible, and a bigger QR in the corner 2026-10-04 17:00:30 +02:00
file-fields.ts fix(delivery-note): signed copy invisible, and a bigger QR in the corner 2026-10-04 17:00:30 +02:00
geo.test.ts feat(visits): batch pin tool — tag every customer on a shaft at once 2026-09-07 08:30:23 +02:00
geo.ts feat(visits): batch pin tool — tag every customer on a shaft at once 2026-09-07 08:30:23 +02:00
giellie-image.ts feat(giellie): chat UI, approval card, photo/file composer, sidebar rename 2026-10-01 00:06:50 +02:00
giellie-sse.test.ts fix(giellie): stale-tab approval guard, size guard, SSE heartbeat, shared in-flight set 2026-10-01 00:36:55 +02:00
giellie-sse.ts feat(giellie): shared types and SSE codec 2026-09-30 23:34:53 +02:00
giellie-types.ts fix(giellie): args-aware tool policy, deny quotes.re_run_ai, harden bridge and agent 2026-10-01 00:36:54 +02:00
item-status-ui.test.ts feat(quotes): enhance scoring logic to include price matching 2026-08-24 07:09:39 +02:00
item-status-ui.ts Revert "feat(orders): add Duplicates tab surfacing flagged duplicate orders" 2026-08-31 16:34:37 +02:00
letterhead.test.ts feat(delivery-notes): standardize delivery-note letterhead across PDFs 2026-08-18 11:53:25 +02:00
letterhead.ts fix(pdf): render through renderToBuffer, not pdf().toString() 2026-10-04 13:14:59 +02:00
note-feed.test.ts feat(collection-pool): back-to-pending, collection date, and a safe notes feed 2026-10-16 00:44:49 +02:00
note-feed.ts feat(collection-pool): back-to-pending, collection date, and a safe notes feed 2026-10-16 00:44:49 +02:00
order-age.test.ts feat(orders): add order-age util with bucket thresholds 2026-09-01 01:58:46 +02:00
order-age.ts feat(orders): add order-age util with bucket thresholds 2026-09-01 01:58:46 +02:00
order-color.test.ts
order-color.ts
order-invoices.test.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
order-invoices.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
order-item-qty.test.ts fix(orders): bill the customer quantity, not the supplier order_qty 2026-08-30 18:28:33 +02:00
order-item-qty.ts fix(orders): bill the customer quantity, not the supplier order_qty 2026-08-30 18:28:33 +02:00
order-rep.test.ts feat(orders): show resolved sales rep name on order list and sprint 2026-08-04 08:50:54 +02:00
order-rep.ts feat(orders): show resolved sales rep name on order list and sprint 2026-08-04 08:50:54 +02:00
pb-helpers-duplicate.test.ts
pb-helpers.ts feat(delivery-notes): one linear flow control, and fix the quote lookup 2026-10-05 18:21:19 +02:00
pin-model.test.ts
placeholder-customers.ts feat: collection-map updates, todays-stops, quote/approval rework, buyer-tasks, e2e 2026-08-03 09:33:45 +02:00
po-reference.ts feat(collection-confirm): spot a photo on the wrong PO and move it 2026-10-19 14:08:47 +02:00
pocketbase.ts fix(tests): mock scaffold destructure + collection-pool + pocketbase startup 2026-07-31 00:01:24 +02:00
pos-cart-quantity.test.ts fix(pos): dead discount toggle + stale discount figure, lift dark palette 2026-10-12 23:17:57 +02:00
pos-inline-handlers.test.ts fix(pos): revive the dead "Print cash-up" button, add 20c/10c denominations 2026-09-19 07:30:11 +02:00
pos-search.test.ts feat(pos): tiered catalog search — word order, plurals, glued SKUs 2026-10-06 23:36:12 +02:00
price-list-search.ts
quote-assistant-counts-client.test.ts feat(quote-assistant): AI x/y badge on quotes board 2026-10-16 20:01:43 +02:00
quote-assistant-counts-client.ts feat(quote-assistant): AI x/y badge on quotes board 2026-10-16 20:01:43 +02:00
quote-assistant-merge.test.ts fix(quote-assistant): AI fill on Process page keeps unsaved typing 2026-10-16 23:29:04 +02:00
quote-assistant-merge.ts fix(quote-assistant): AI fill on Process page keeps unsaved typing 2026-10-16 23:29:04 +02:00
quote-assistant-review.test.ts fix(quote-assistant): review minors (templates, forced order, bounds, UI) 2026-10-16 23:41:28 +02:00
quote-assistant-review.ts fix(quote-assistant): review minors (templates, forced order, bounds, UI) 2026-10-16 23:41:28 +02:00
quote-assistant-save.test.ts feat(quote-assistant): purple AI lines on process and quote pages 2026-10-16 19:56:02 +02:00
quote-assistant-save.ts feat(quote-assistant): purple AI lines on process and quote pages 2026-10-16 19:56:02 +02:00
quote-pricing.test.ts feat(delivery-notes): lock the cost price, markup stays the only input 2026-10-15 15:44:24 +02:00
quote-pricing.ts feat(delivery-notes): lock the cost price, markup stays the only input 2026-10-15 15:44:24 +02:00
quote-status.test.ts
quote-status.ts feat(quotes): allow resubmit from any post-submit status, not just rejected 2026-09-07 16:51:55 +02:00
rep-visibility.test.ts feat: add isRepUser helper for rep-scoped list filtering 2026-08-31 23:24:25 +02:00
rep-visibility.ts feat: add isRepUser helper for rep-scoped list filtering 2026-08-31 23:24:25 +02:00
repair-document-stage.test.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
repair-document-stage.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
safe-next-path.ts fix: preserve destination through the login redirect 2026-09-01 15:47:27 +02:00
sops.ts feat: implement discount functionality in POS system 2026-09-03 12:19:21 +02:00
stock-fulfillment.test.ts
stock-fulfillment.ts
stock-low-stock.ts
stock-match.ts
stock-status.test.ts
stock-status.ts
supplier-color.test.ts fix(buyer-tasks): generate PO succeeds + supplier stripe + PO badge 2026-07-30 15:00:18 +02:00
supplier-color.ts fix(buyer-tasks): generate PO succeeds + supplier stripe + PO badge 2026-07-30 15:00:18 +02:00
theme-types.ts
themes.ts
tracker-parsing.test.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
tracker-parsing.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
types.ts feat(collection-ai): read invoice discounts and set the discounted cost 2026-10-19 13:18:21 +02:00
use-boolean-preference.ts feat(invoicing): implement detailed view toggle for supplier and PO number 2026-08-16 11:01:52 +02:00
use-split-ratio.test.ts feat: add split views, stock picking slips, and invoice viewer 2026-08-09 23:16:55 +02:00
use-split-ratio.ts feat: add split views, stock picking slips, and invoice viewer 2026-08-09 23:16:55 +02:00
use-theme-id.ts
user-color.ts
utils.test.ts feat(orders): enhance order handling with email_message_id deduplication and displayContactName utility 2026-08-21 19:18:02 +02:00
utils.ts feat(orders): enhance order handling with email_message_id deduplication and displayContactName utility 2026-08-21 19:18:02 +02:00
visit-matching.test.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
visit-matching.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
visit-stops.test.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
visit-stops.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
working-days.ts