Commit graph

130 commits

Author SHA1 Message Date
SJCoetz
a6750b09e1 feat(invoicing): add editable company search to QB modal
- Lift customer query state to parent page to maintain consistent cache keys for QB customer lookups
- Restructure SingleOrderQbModal UI into grouped sections for better organization
- Update modal footer padding and add mobile-responsive layout
- Revise line item input labels and add accessible aria labels matching test selectors
- Refactor QB customer lookup effects and callbacks to support edited search queries
- Fix test selectors for invoice quantity and price fields to match updated labels
2026-07-14 13:00:12 +02:00
SJCoetz
7ebfb8b86b feat: add row selection and cost pricing
- add `costPrice` field to invoicing row types, plus ZAR currency formatting and profit margin calculations
- update invoice row displays to show ordered/received quantity, unit cost, selling price and margin metrics
- add per-row selection in QuickBooks send modals, letting users filter which order lines to include on invoices
- update ModalShell component to support responsive breakpoint-based sizing instead of fixed sm-only widths
- refine UI styling across the invoicing page to use consistent theme tokens (bg-card, muted-foreground)
- update tests to use dynamic yesterday dates instead of hardcoded values for stable, time-agnostic assertions
- improve button states, labels and text for QuickBooks invoice actions, including showing selected item counts
2026-07-14 12:34:47 +02:00
SJCoetz
046683c506 feat: add tangerine theme, new docs and plugin stubs
Add full Tangerine brand theme with light and dark mode variants to the app theme system.
Add four new design and integration documents for collection pool, map and driver app workflows.
Add initial scaffolding for three new plugin source directories for the collection pool bulk assignment feature.
2026-07-14 11:48:10 +02:00
SJCoetz
6af4dcf53e test(collection-map): sidebar + popup + no-green-pin contracts (v3) 2026-07-12 12:34:10 +02:00
SJCoetz
21a2d7728b chore(collection-map): drop bottom-list placeholder
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 12:30:20 +02:00
SJCoetz
fdd95add30 feat(collection-map): 'X of Y collected' line in supplier popup 2026-07-12 12:26:23 +02:00
SJCoetz
9769dbb5ae feat(collection-map): sidebar with legend, driver cards, unassigned compact (page split) 2026-07-12 12:23:13 +02:00
SJCoetz
0d63061ea0 refactor(collection-map): flex column root + map flex-1, drop bottom list shell 2026-07-12 12:17:03 +02:00
SJCoetz
56626c8270 feat(pin-model): add aggregateDriverStatus helper (TDD) 2026-07-12 12:12:41 +02:00
SJCoetz
8c21347ecc feat(collection-map): drop date filter; thread ready-gate into assign dialog 2026-07-12 00:46:44 +02:00
SJCoetz
b5cd061da1 feat(assign-dialog): gate submit on ready_for_collection with warning 2026-07-12 00:44:14 +02:00
SJCoetz
d78d479091 feat(assign-api): hard-gate on ready_for_collection, drop auto-flip 2026-07-12 00:33:00 +02:00
SJCoetz
ee9a0e1001 test(collection-map): pin toolbar shape to prevent filter-chip regression 2026-07-11 23:46:46 +02:00
SJCoetz
adfde8a0fa test(collection-map): pin-bucket split; absorb orphaned assigned items into pool 2026-07-11 23:45:42 +02:00
SJCoetz
d4c72057bf feat(collection-map): two-pin model per supplier (letter + ✓/✕) 2026-07-11 23:45:07 +02:00
SJCoetz
dcfe662c9f refactor(collection-map): drop Drivers sidebar card + driver multi-select 2026-07-11 23:43:10 +02:00
SJCoetz
d876455e41 refactor(collection-map): drop status / readiness / search filters 2026-07-11 23:42:13 +02:00
SJCoetz
a26e7c6312 feat(leaflet-markers): add driverLetterPin + unassignedPoolPin 2026-07-11 23:41:22 +02:00
SJCoetz
d3c68d0703 polish(geo): clamp driverLabelFor at '9' instead of wrapping to '0' 2026-07-11 23:40:04 +02:00
SJCoetz
032c76ff19 feat(geo): add driverLabelFor + unassignedGlyphFor helpers 2026-07-11 23:38:00 +02:00
SJCoetz
02458909f7 docs(collection-map): tighten Refresh-button open question wording 2026-07-11 23:31:41 +02:00
SJCoetz
191668088c docs(collection-map): spec — drop filter console + collapse pin taxonomy
Two-pin model per supplier bucket: blue circle + letter per driver,
amber circle + ✓/✕ for unassigned. Filters (status, readiness, driver
multi-select, search) all leave; date picker stays. No backend or
schema changes. Awaiting user review before plan + implementation.
2026-07-11 23:31:17 +02:00
SJCoetz
ed9503706d feat(collection-pool): gate assign UI on ready_for_collection
Both the per-row Assign Driver button and the bulk-assign button in each
supplier section header now disable when the target row(s) have not been
marked ready for collection. Tooltips explain the reason.

This enforces the rule that a stop must be ready before it can be
assigned to a driver — same gate for single-row and bulk flows.
2026-07-11 22:56:42 +02:00
SJCoetz
c88a52cf2d refactor(collection-pool): drop redundant supplier name from row body
The supplier name is already shown in the SupplierGroup section header,
so repeating it on each row inside the section adds visual weight
without information. Keep it on the checkbox aria-label for screen
readers only.
2026-07-11 22:52:39 +02:00
SJCoetz
da9b3e8b58 refactor(collection-pool): split PoolRow + SupplierGroup into components.tsx 2026-07-11 00:13:20 +02:00
SJCoetz
a5eaae6f7b test(collection-pool): cover groups, bulk assign, notes tooltip 2026-07-11 00:07:13 +02:00
SJCoetz
c5731a1206 feat(collection-pool): sequential bulk-assign PATCH 2026-07-11 00:04:27 +02:00
SJCoetz
75a111a334 feat(collection-pool): wire bulk-assign dialog mount 2026-07-11 00:01:25 +02:00
SJCoetz
5984f2f814 feat(collection-pool): render supplier-grouped sections 2026-07-10 23:58:47 +02:00
SJCoetz
8e4289b104 fix(collection-pool): align SupplierGroup with spec (a11y, chevron, assign) 2026-07-10 23:55:23 +02:00
SJCoetz
c17f7c662e feat(collection-pool): add SupplierGroup component 2026-07-10 23:52:50 +02:00
SJCoetz
b6ed9f2685 feat(collection-pool): add per-row selection state and checkbox
- selectedIds Set state plus toggleRowSelected / toggleSectionSelected callbacks
- PoolRow signature extended with selected + onToggleSelected
- New flex wrapper around supplier/description block with leading checkbox input
- bg-primary/5 row tint applied when selected
- aria-label composes supplier + description for screen readers
2026-07-10 23:50:17 +02:00
SJCoetz
7ce4445865 feat(collection-pool): replace notes title with hover tooltip 2026-07-10 23:46:59 +02:00
SJCoetz
0b03a6cb81 style(collection-pool): promote time-in-list to text-primary 2026-07-10 23:44:27 +02:00
SJCoetz
c989d0d12e feat(collection-pool): sort by supplier name first 2026-07-10 23:41:45 +02:00
SJCoetz
4662347ca0 feat(collection-pool): add buildSupplierGroups helper 2026-07-10 23:39:05 +02:00
SJCoetz
cdaa2e2b25 fix, feat, style: standardize quote numbers, polish UI
- Standardize quote number format from Q-YYYY-MM-NNN to QYYYYMMNNN across all client, server, test and API code
- Add atomic backfill logic for quote counters to avoid sequence collisions with existing records
- Rearrange Delivery Notes and Repairs to the Operations sidebar section
- Add supplier count badge to pricelist catalogue and improve filter tab overflow styling
- Optimize font loading in root layout to skip preloading unused font weights
- Improve table styling for customer and company pages with better text wrapping and empty states
- Fix rep display logic in quotes page to show "Unassigned" when no rep is assigned
- Add supporting documentation, PocketBase counter schemas and setup migration scripts
- Remove embedded SupplierMap from suppliers page for cleaner layout
- Improve invoice card layout for company and customer info spacing
- Improve filter label styling and accessibility in collection map page
2026-07-10 22:21:50 +02:00
SJCoetz
47b01bddfa feat: add picking slips, bulk print tracking, supplier map
- Add Supplier Map component to suppliers page and reorganize sidebar navigation
- Implement picking slip PDF generation with supplier per line item and picked-by signature footer
- Add invoice bulk print tracking API and view models to track printed invoice state
- Extend company search and form to support email/telephone fields and improve searchability
- Fix data table debounce race condition by using useRef for onSearch handler
- Fix supplier page fetch race condition with debounced timeout
- Reduce list page item counts to 10 per page for customers, companies, and suppliers
- Update company search filter to include email and telephone in search queries
- Add comprehensive test suite for new and existing components and APIs
- Add pdf-lib dependency for PDF generation and update related tooling
- Clean up unused code and fix minor linting issues
2026-07-10 10:47:11 +02:00
SJCoetz
ae66762b76 feat(invoicing): add per-order color stripe on group sections 2026-07-10 02:09:29 +02:00
SJCoetz
bbd1e1df7c feat(collection-confirm): add per-order color stripe on group sections 2026-07-10 02:07:25 +02:00
SJCoetz
6477ebafcc feat(order-color): add FNV-1a hash helper for per-order color stripes 2026-07-10 02:05:45 +02:00
SJCoetz
4985b8c946 test(order-color): pin colorForOrder behaviour 2026-07-10 02:04:38 +02:00
SJCoetz
6598c86093 Add order color stripe implementation plan 2026-07-10 02:03:57 +02:00
SJCoetz
0d508095f0 Add order color stripe spec 2026-07-10 02:03:16 +02:00
SJCoetz
6d03be2ebc feat(collection-confirm): rewrite row card as stacked vertical sections 2026-07-10 01:07:29 +02:00
SJCoetz
9ab4be2666 feat(collection-confirm): show signed-in-as pill in the page header 2026-07-10 01:02:59 +02:00
SJCoetz
6074e79be0 fix(collection-confirm): hydrate actor from dev-identity cookie, not localStorage 2026-07-10 01:01:24 +02:00
SJCoetz
d4b3f7c041 Add collection confirm rewrite implementation plan 2026-07-10 01:00:08 +02:00
SJCoetz
683b6c8d0a Add collection confirm rewrite spec 2026-07-10 00:59:26 +02:00
SJCoetz
579acb300f style(assign-driver): give the action button more breathing room from the modal edge 2026-07-10 00:53:55 +02:00