shoc-frontend-new/src/domain/work-orders/mappers/assign-wizard-vendor-appt-fields.ts

35 lines
1.2 KiB
TypeScript

import type { WorkOrderBoardCreatePayload } from "@/domain/work-orders/types/work-order-board";
import type { WorkOrderWizardDraft } from "@/domain/work-orders/types/work-order-wizard";
import { formatApptTimeValue } from "@/domain/work-orders/utils/wizard-date-utils";
/**
* Mutates `payload` with `vendorId` and, when applicable, single-day appt date/time.
* Board create rejects appointment fields without vendorId (`DispatchRequired`).
*/
export function assignWizardVendorApptFields(
payload: WorkOrderBoardCreatePayload,
draft: WorkOrderWizardDraft,
): void {
const vendorId = draft.vendorId.trim() ? Number(draft.vendorId) : NaN;
const hasVendor = Number.isFinite(vendorId) && vendorId > 0;
if (hasVendor) {
payload.vendorId = vendorId;
if (draft.technicianAssigned != null) {
payload.technicianAssigned = draft.technicianAssigned;
}
}
const apptTime = formatApptTimeValue(draft.apptStart, draft.apptEnd);
const isRange = draft.schedMode === "range";
if (hasVendor && (draft.scheduledOn || apptTime) && !draft.scheduleWeekOnly && !isRange) {
if (draft.scheduledOn) {
payload.apptDate = draft.scheduledOn;
}
if (apptTime) {
payload.apptTime = apptTime;
}
}
}