feat: add coil-by-coil report, job status by plant, job traveler + PDFs
Some checks failed
Build and Deploy / build (push) Successful in 3m43s
Build and Deploy / deploy (push) Failing after 2s

Implements C-010 (Coil-by-Coil), C-011 (Job Status by Plant), and
C-012 (Job Traveler + PDF) completing 12/16 Phase 2 core features.

C-010: Job number search → detailed coil-level breakdown showing
materials used and produced with independent search/sort/CSV export.
Embeds full 782-line CoilByCoil.sql query in service layer.

C-011: Auto-loading job status view grouped by plant using
OpenOrdersQueryV3 stored procedure. Includes web table with
search/sort/CSV export and landscape PDF download.

C-012: Multi-section job traveler with header info, shipping schedule,
raw materials, operations, and Part_UD paint specifications. Includes
job number search page, detail page, and PDF export with Vorteq
branding. Deduplicates flat SQL results into structured data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Lorentz Hinrichsen 2026-02-17 09:42:39 -05:00
parent 53c35cc273
commit 1198aaa373
19 changed files with 2712 additions and 18 deletions

View file

@ -128,7 +128,7 @@
## Phase 2: Core Features (Est. 80-110 hrs)
**Progress:** 9/16 tasks complete
**Progress:** 12/16 tasks complete
### C-001: Dashboard
- [x] Dashboard page at `/(portal)/dashboard/page.tsx`
@ -230,25 +230,33 @@
- **Deps:** F-006, F-009 | **Est:** 4 hrs | **Status:** ✅ Complete
### C-010: Coil-by-Coil Report
- [ ] `/(portal)/coil-activity/coil-by-coil/page.tsx`
- [ ] Job number search input
- [ ] Service: `getCoilByCoil(jobNum, customer)` using `CoilByCoil.sql`
- [ ] Detail display
- **Deps:** F-006 | **Est:** 3 hrs
- [x] `/(portal)/coil-activity/coil-by-coil/page.tsx` — job number search → coil detail display
- [x] Job number search input with search button
- [x] Service: `getCoilByCoil(jobNum, customer)` using full 782-line `CoilByCoil.sql` embedded in service
- [x] Header info card (Job#, Customer, PO, Part, Plant, etc.)
- [x] Two-section table: Materials Used + Materials Produced with independent search/sort/CSV export
- [x] HDC→HDM customer ID mapping
- **Deps:** F-006 | **Est:** 3 hrs | **Status:** ✅ Complete
### C-011: Job Status by Plant
- [ ] `/(portal)/jobs/status/page.tsx`
- [ ] Service: `getJobStatusByPlantByCustomer(custId, dbName)` using `JobStatusByPlantByCustomer.sql`
- [ ] Note: requires DBNAME cross-database parameter
- [ ] Data table grouped by plant
- **Deps:** F-006 | **Est:** 3 hrs
- [x] `/(portal)/jobs/status/page.tsx` — auto-loads on mount
- [x] Service: `getJobStatusByPlant(custId)` using `OpenOrdersQueryV3` stored procedure
- [x] DBNAME cross-database parameter via `getPortalDbName()`
- [x] Data table grouped by plant with plant section header rows
- [x] Search, sort, CSV export
- [x] PDF export: `/api/jobs/status/pdf` (landscape Letter, grouped by plant)
- [x] HDC→HDM customer ID mapping
- **Deps:** F-006 | **Est:** 3 hrs | **Status:** ✅ Complete
### C-012: Job Traveler + PDF
- [ ] `/(portal)/jobs/[jobNum]/traveler/page.tsx`
- [ ] Service: `getJobTraveler(jobNum)` using `jobTraveler.sql`
- [ ] Detailed routing/operations view
- [ ] PDF export
- **Deps:** F-006 | **Est:** 4 hrs
- [x] `/(portal)/jobs/traveler/page.tsx` — job number search page
- [x] `/(portal)/jobs/[jobNum]/traveler/page.tsx` — multi-section detail page
- [x] Service: `getJobTraveler(jobNum)` using full `jobTraveler.sql` with Part_UD paint data
- [x] Structured data: header, shipping schedule, raw materials, operations, paint specifications (deduplicated from flat SQL results)
- [x] Detail view: Job info card, Schedule dates, Shipping schedule table, Raw materials table, Operations table, Part specifications card
- [x] PDF export: `/api/jobs/{jobNum}/traveler/pdf` (landscape Letter, full Vorteq branding)
- [x] Sidebar navigation: Job Traveler link under Jobs section
- **Deps:** F-006 | **Est:** 4 hrs | **Status:** ✅ Complete
### C-013: Shipment Request Cart Workflow
- [ ] `/(portal)/shipment-requests/page.tsx` — list existing requests