diff --git a/CHANGELOG.md b/CHANGELOG.md index d58b183..f0da1a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ This file is the running release and change log for CODEXIUM. Keep it updated wh - Workbench now surfaces day-level capacity directly in the planner, including hot-station day counts on heatmap cells, selected-day station load breakdowns, and per-station hot-day chips in station grouping mode - Workbench exception prioritization now scores and ranks projects, work orders, agenda rows, and dispatch exceptions by lateness, blockage, shortage, readiness, and overload pressure, with inline priority chips for faster triage - Workbench now surfaces top-priority action lanes for `DO NOW`, `UNBLOCK`, and `RELEASE READY` records so planners can jump straight into ranked dispatch queues before working deeper lists +- Workbench action lanes now support direct follow-through from the lane cards themselves, including queue-release and the first inline build/buy/open actions without requiring a second step into the focus drawer - Project-side milestone and work-order rollups surfaced on project list and detail pages - Inventory SKU master builder with family-level sequence codes, branch-aware taxonomy management, and generated SKU previews on the item form - Thumbnail image attachment staging on inventory item create/edit pages, with upload-on-save and replacement/removal support @@ -102,6 +103,7 @@ This file is the running release and change log for CODEXIUM. Keep it updated wh ### Changed +- Shipping-label PDFs now render inside an explicit single-page 4x6 canvas with tighter print-safe spacing and overflow-safe text wrapping to prevent second-sheet runover on label printers - Project records now persist milestone plans directly on create/edit instead of treating schedule checkpoints as freeform notes only - Company theme colors and font now persist correctly across refresh through startup brand-profile hydration in the frontend theme provider - Demand-planning purchase-order draft generation now links sales-order lines only when the purchase item matches the originating sales item diff --git a/client/src/modules/workbench/WorkbenchPage.tsx b/client/src/modules/workbench/WorkbenchPage.tsx index aa8c04b..a56f19c 100644 --- a/client/src/modules/workbench/WorkbenchPage.tsx +++ b/client/src/modules/workbench/WorkbenchPage.tsx @@ -1083,6 +1083,9 @@ export function WorkbenchPage() { records={actionLanes.doNow} selectedId={selectedFocus?.id ?? null} onSelect={setSelectedFocusId} + onTaskAction={handleTaskAction} + onQueueRelease={addRecordToQueue} + queuedWorkOrderIds={queuedWorkOrderIds} /> @@ -1346,12 +1355,18 @@ function ActionLane({ records, selectedId, onSelect, + onTaskAction, + onQueueRelease, + queuedWorkOrderIds, }: { title: string; accent: string; records: FocusRecord[]; selectedId: string | null; onSelect: (id: string) => void; + onTaskAction: (action: PlanningTaskActionDto) => void | Promise; + onQueueRelease: (record: FocusRecord) => void; + queuedWorkOrderIds: string[]; }) { return (
@@ -1364,26 +1379,48 @@ function ActionLane({ ) : (
{records.map((record) => ( -
- + {canQueueRelease(record) ? ( + + ) : null} + {record.actions.slice(0, 2).map((action, index) => ( + + ))}
- +
))} )} diff --git a/server/src/modules/documents/router.ts b/server/src/modules/documents/router.ts index f5658d7..56aa889 100644 --- a/server/src/modules/documents/router.ts +++ b/server/src/modules/documents/router.ts @@ -154,29 +154,38 @@ function buildShippingLabelPdf(options: { -
+
+
-
-
+
+
From

${escapeHtml(company.companyName)}

-
+
Shipment
${escapeHtml(shipment.shipmentNumber)}