shoc-frontend-new/src/domain/work-orders/utils/effective-completion-snapshot.ts
Arthur Bassi 116f65ca48 feat(work-orders): consume completion freeze snapshot on the board
Prefer FrozenSite, FrozenCompany, and FrozenPoc on Completed rows.
2026-09-10 15:41:01 -03:00

55 lines
1.6 KiB
TypeScript

import type {
WorkOrderFrozenCompany,
WorkOrderFrozenPoc,
WorkOrderFrozenSite,
WorkOrderTableRow,
} from "@/domain/work-orders/types/work-order-table-row";
type SiteSnapshotRow = Pick<WorkOrderTableRow, "status" | "frozenSite">;
type CompanySnapshotRow = Pick<
WorkOrderTableRow,
"status" | "company" | "tech" | "techPhone" | "frozenCompany"
>;
type PocSnapshotRow = Pick<
WorkOrderTableRow,
"status" | "pocName" | "pocPhone" | "pocNotes" | "frozenPoc"
> & {
additionalContacts?: WorkOrderTableRow["additionalContacts"];
};
export function effectiveSite(row: SiteSnapshotRow): WorkOrderFrozenSite | undefined {
if (row.status === "Completed" && row.frozenSite != null) return row.frozenSite;
return undefined;
}
export function effectiveSitePlace(row: SiteSnapshotRow): {
city: string;
state: string;
} | null {
const frozen = effectiveSite(row);
if (frozen == null) return null;
return { city: frozen.city ?? "", state: frozen.state ?? "" };
}
export function effectiveCompany(row: CompanySnapshotRow): WorkOrderFrozenCompany {
if (row.status === "Completed" && row.frozenCompany != null) return row.frozenCompany;
return {
name: row.company,
contactName: row.tech,
phone: row.techPhone,
};
}
export function effectivePoc(row: PocSnapshotRow): WorkOrderFrozenPoc {
if (row.status === "Completed" && row.frozenPoc != null) return row.frozenPoc;
return {
contacts: [
{ name: row.pocName, phone: row.pocPhone },
...(row.additionalContacts ?? []).map((contact) => ({
name: contact.name,
phone: contact.phone,
})),
],
notes: row.pocNotes,
};
}