WFDASH-WEBAPP/docs/collection-return-to-pool.md

2.5 KiB

Return mistaken collections to the pool

Collection Confirm has a Return to pool button on each line and a Return PO to collection pool button at the bottom of each PO card. The PO button affects only the collected lines shown on that card, not other lines on the customer order. Both open a confirmation listing the affected items before making any changes.

The reset clears driver assignment, collection dates, collected and assigned quantities, collection problem flags and the previous AI check. Order quantities, costs, SKUs, photos and notes are retained. Customer lines return to item_status = collection_pool; stock lines return to status = collection_pool with quantity_received = 0. An unbooked stock header marked received reopens to sent so it leaves the accountant's booking queue until collection is confirmed again.

Items already invoiced, dispatched, delivered or booked into stock are refused. Refused lines are reported separately if some lines can return. The browser reloads the queue after the operation. Normal confirmation stays available; Add to POS controls are hidden but their underlying handlers and endpoints remain.

Deployment

Deploy both the app and pocketbase/pb_hooks/collection_return.pb.js. The hook is listed in pocketbase/pb_hooks/DEPLOY; publish the committed hooks folder with npm run pb:hooks:publish using the workflow in scripts/pb-hooks/README.md. No collection fields or select values need to be added.

The authenticated capability endpoint GET /api/wfdash/collection-return-guard must return { "version": 1 }. Until the hook is deployed the app refuses resets with HTTP 503. It must never fall back to an unguarded update.

Each return uses a PB batch transaction. The hook rechecks row revisions, stock parent revisions, invoice metadata and stock ledger entries inside that transaction before allowing the writes. It also guards the opposite race: a stale customer confirmation cannot advance a returned/assigned line, and a stock booking cannot insert a receipt after the PO reopens. Existing PB audit hooks record customer field changes; no extra app audit notes are added.

Validation

Run the tests under src/components/collection-confirm, src/app/(app)/collection-confirm, src/app/api/v1/collection-confirm, and src/lib/server/collection-return*.test.ts. The hook tests evaluate the real JS file in a mocked PB environment; they do not change live data. After deployment, verify a mistaken collection returns to the pool with zero collected quantity and can be assigned to a driver again.