From c8a8522499b57aacbf221d97edf63d974bc5fd82 Mon Sep 17 00:00:00 2001 From: "arthur.bassi" Date: Mon, 10 Aug 2026 19:06:35 -0300 Subject: [PATCH] fix(work-orders): send wizard status and clear POC notes on site change Map draft.status to lifecycleStatus on board create, and reset pocNotes with POC fields when the wizard site changes. Co-authored-by: Cursor --- .../wizard/wizard-step-location-site-select.tsx | 1 + .../mappers/work-order-board-mapper.ts | 15 +++++++++++++-- src/domain/work-orders/types/work-order-board.ts | 2 ++ .../work-orders/api/work-orders-api.test.ts | 1 + .../mappers/work-order-board-mapper.test.ts | 16 ++++++++++++++++ 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/app/(protected)/workorders/_components/wizard/wizard-step-location-site-select.tsx b/src/app/(protected)/workorders/_components/wizard/wizard-step-location-site-select.tsx index 3cc42c58..8d06d966 100644 --- a/src/app/(protected)/workorders/_components/wizard/wizard-step-location-site-select.tsx +++ b/src/app/(protected)/workorders/_components/wizard/wizard-step-location-site-select.tsx @@ -41,6 +41,7 @@ export function WizardStepLocationSiteSelect({ siteCode: loc ? resolveSiteCode(loc) : "", pocName: "", pocPhone: "", + pocNotes: "", }); }} /> diff --git a/src/domain/work-orders/mappers/work-order-board-mapper.ts b/src/domain/work-orders/mappers/work-order-board-mapper.ts index 1fbdb364..07447b07 100644 --- a/src/domain/work-orders/mappers/work-order-board-mapper.ts +++ b/src/domain/work-orders/mappers/work-order-board-mapper.ts @@ -3,9 +3,16 @@ import type { WorkOrderTypeApi, } from "@/domain/work-orders/types/work-order-board"; -import { WORK_ORDER_TYPE_API } from "@/domain/work-orders/types/work-order-board"; +import { + LIFECYCLE_STATUS_API, + WORK_ORDER_TYPE_API, +} from "@/domain/work-orders/types/work-order-board"; -import type { WOType, WorkOrderWizardDraft } from "@/domain/work-orders/types/work-order-wizard"; +import type { + WizardWOStatus, + WOType, + WorkOrderWizardDraft, +} from "@/domain/work-orders/types/work-order-wizard"; import { fmtDateRange } from "@/domain/work-orders/utils/wizard-date-utils"; @@ -98,6 +105,10 @@ export function mapWizardDraftToBoardCreatePayload( siteCode, }; + if (draft.status) { + payload.lifecycleStatus = LIFECYCLE_STATUS_API[draft.status as WizardWOStatus]; + } + if (draft.woNumber.trim()) { payload.woNumber = draft.woNumber.trim(); } diff --git a/src/domain/work-orders/types/work-order-board.ts b/src/domain/work-orders/types/work-order-board.ts index 22c9c043..0e6a55ce 100644 --- a/src/domain/work-orders/types/work-order-board.ts +++ b/src/domain/work-orders/types/work-order-board.ts @@ -64,6 +64,8 @@ export const LIFECYCLE_STATUS_API_TO_FE: Record { expect(apiPost).toHaveBeenCalledWith(API_PATHS.workOrder.boardCreate, { workOrderType: 2, siteCode: "BK5", + lifecycleStatus: 1, woNumber: "12345", }); }); diff --git a/src/test/domain/work-orders/mappers/work-order-board-mapper.test.ts b/src/test/domain/work-orders/mappers/work-order-board-mapper.test.ts index fcb12c9a..6aae1df9 100644 --- a/src/test/domain/work-orders/mappers/work-order-board-mapper.test.ts +++ b/src/test/domain/work-orders/mappers/work-order-board-mapper.test.ts @@ -55,9 +55,25 @@ describe("mapWizardDraftToBoardCreatePayload", () => { workOrderType: 2, siteCode: "BK5", + + lifecycleStatus: 1, }); }); + it("maps wizard status to lifecycleStatus on create", () => { + const payload = mapWizardDraftToBoardCreatePayload({ + ...EMPTY_WIZARD_DRAFT, + + type: "PM", + + siteCode: "BK5", + + status: "Scheduled", + }); + + expect(payload.lifecycleStatus).toBe(3); + }); + it("maps full wizard payload with structured service and notes fields", () => { const payload = mapWizardDraftToBoardCreatePayload({ ...EMPTY_WIZARD_DRAFT,