The work-order grid reads real service jobs

Featurekamo-internal
Shipped
27 Agosti 2026, 08:03 UTC
Author
kamo
Commit
02208ef

Every row in this grid was a dead link by construction. generateMockWorkOrders minted ids String(8000 + i), the row click pushed /commerce/service/8001, and the handler declared @PathVariable UUID id — so the id failed conversion before any handler ran and the detail page rendered its not-found state. Fifteen rows, fifteen dead links, on a screen that looked finished. Both surfaces now read ServiceJob through **************** The proxy exports GET, PUT and PATCH — exactly what ServiceJobController maps, and neither commerce proxy beside it was a safe template: quotes exports GET/POST/PATCH/DELETE with no PUT, service-task-books exports GET/POST/PUT/DELETE with no PATCH. Copy either and one save answers 405 raised by Next itself, with nothing in the server logs, while every read keeps working. serviceJobWireContract.test.ts pins the verb set against the controller's annotations in both directions, and compares every JobView/VisitView/AddressView record component to the TypeScript member by name. That name comparison is the second fix. posApi.WorkOrder declared serviceName, serviceId and engagementId against a DTO sending serviceOfferingName, serviceOfferingUid and engagementUid. The three never matched, so the detail page's subtitle and its "Service" summary row were undefined for the life of the screen and fell back to an em dash — which reads as "nothing recorded" rather than as a typo, which is why nobody found it. Deleted 489 lines of a detail Dialog that could not open: detailOpen was initialised false, setDetailOpen(true) appeared nowhere in the file, and selectedOrder was independently always null. Six handlers fed it and nothing else and went with it. Its Notes tab was the only one in the codebase, so it was mined out first — **************** Departures worth knowing: - No technician name anywhere. ServiceJobApi carries visits[].assignedMemberId and nothing else, and no endpoint resolves a batch of member ids to names — memberDirectory is a paged search whose own note forbids holding the staff list. The column is gone rather than showing an id dressed as a person. - "Time Attended", not "Labor Hours". The server sums totalLabourMinutes from each visit's actual window because priced labour hangs off an Order with no link to a job. Rendered with formatLabourMinutes; no float-hours field on either side. - trade replaces the ten free category strings, which were never a vocabulary anything could round-trip: "Plumbing Repair" is PLUMBING plus WorkClass.REPAIR. - Bulk status now issues one PATCH per job and reports partial refusals, because the status machine checks each transition. The old handler set the field locally on all of them and reported success. - Labour, parts, time entries and vendors stay local useState. No entity backs any of them; SW6b builds those. Dictionary landed first: kamo-translation-dictionary 947e585.

All changes

Je, unaona nini kuhusu usafiri?

Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.

Kuwa Huru MileleMtazamo wa bei