WFDASH-WEBAPP/scripts
SJCoetz b75873a51b feat(pricelist): Catalogue tab with search + category/brand filters
Adds a second tab on /pricelist that shows the structured
`price_list` collection (AI-extracted line items) instead of the
raw PDF uploads. Operators can now:

  - Search across SKU, description, and brand
  - Filter by category (twist_drill, hss_cutter, countersink, ...)
  - Filter by brand (JEI, TurboSteel, TurboTough, ...)
  - See cost vs selling price side-by-side in ZAR
  - Click a row's 'Source' link to jump back to the raw PDF

The distinct filter values are pulled from a one-shot getList(1, 500)
on mount, with hardcoded fallbacks (FALLBACK_CATEGORIES /
FALLBACK_BRANDS) so the dropdowns are useful even before any
extractions have run.

Layout: Tabs (Raw Uploads | Catalogue) wrap both views; the
header + page chrome stay shared. The DeleteDialog stays outside
the Tabs since it's a modal.

Also ships an idempotent migration to add `source_file` (text)
to `price_list` — used by the n8n workflow to track which raw
PDF each extracted row came from, and by the verify-after-POST
step the workflow uses to decide whether to flip
`raw_price_list.status` to Completed vs Failed.

Price type is in PriceListRow (shared subset) and PriceList
(full record). Supplier names are resolved client-side via
getAllSuppliers() since the live schema has supplier as a text
field rather than a relation.

Tests: 229/230 (same pre-existing failure, unrelated). TypeScript
clean.
2026-06-30 11:49:48 +02:00
..
dev refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
migrations feat(pricelist): Catalogue tab with search + category/brand filters 2026-06-30 11:49:48 +02:00
smoke refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
build_v5_workflow.py feat: add quote email intake and atomic numbering 2026-06-22 13:58:24 +02:00
deploy_v5_to_n8n.py feat: add quote email intake and atomic numbering 2026-06-22 13:58:24 +02:00
import-data.ts chore: standardize line endings and add full test + config scaffolding 2026-06-11 20:30:02 +02:00
n8n-v2-error.ts feat(quotes): add email-to-quote pipeline with attachments and replies 2026-06-16 20:46:28 +02:00
n8n-v2-main.ts feat(quotes): add email-to-quote pipeline with attachments and replies 2026-06-16 20:46:28 +02:00
setup-pocketbase.ts refactor: drop order-level status, shift to item-driven workflow 2026-06-29 13:06:01 +02:00
verify_v5.py feat: add quote email intake and atomic numbering 2026-06-22 13:58:24 +02:00