|
- import type { PoResult } from "@/app/api/po";
- import type { PoWorkbenchListRow } from "@/components/PoWorkbench/types";
-
- const RECEIVE_STATUSES = new Set(["pending", "receiving", "completed"]);
-
- function normalizeReceiveStatus(status: string): PoWorkbenchListRow["status"] {
- if (RECEIVE_STATUSES.has(status)) {
- return status as PoWorkbenchListRow["status"];
- }
- return "pending";
- }
-
- function pad2(n: number): string {
- return n < 10 ? `0${n}` : String(n);
- }
-
- /**
- * Normalizes backend date values into `YYYY-MM-DD`.
- * Supports both ISO strings and Jackson-style arrays (`[yyyy, mm, dd, ...]`).
- */
- function toYmd(value: unknown): string {
- if (value == null) {
- return "";
- }
-
- if (Array.isArray(value)) {
- const y = Number(value[0]);
- const m = Number(value[1]);
- const d = Number(value[2]);
- if (
- Number.isInteger(y) &&
- Number.isInteger(m) &&
- Number.isInteger(d) &&
- y > 0 &&
- m >= 1 &&
- m <= 12 &&
- d >= 1 &&
- d <= 31
- ) {
- return `${y}-${pad2(m)}-${pad2(d)}`;
- }
- return "";
- }
-
- if (typeof value !== "string") {
- return "";
- }
-
- const t = value.trim();
- if (t.length >= 10 && /^\d{4}-\d{2}-\d{2}/.test(t)) {
- return t.slice(0, 10);
- }
- return t;
- }
-
- /** Maps one PO list API row into the shape the workbench list UI already expects. */
- export function mapPoResultToListRow(po: PoResult): PoWorkbenchListRow {
- return {
- id: String(po.id),
- poNumber: po.code,
- supplierName: po.supplier ?? "",
- orderDate: toYmd(po.orderDate),
- estimatedArrivalDate: toYmd(po.estimatedArrivalDate),
- escalated: Boolean(po.escalated),
- status: normalizeReceiveStatus(po.status ?? ""),
- };
- }
|