| @@ -0,0 +1,81 @@ | |||
| import type { TFunction } from "i18next"; | |||
| type SubstitutionResultLike = { | |||
| code?: string | null; | |||
| message?: string | null; | |||
| } | null | undefined; | |||
| /** | |||
| * Maps pickOrder lot-substitution API (MessageResponse) to zh-TW via pickOrder namespace. | |||
| * Handles dynamic English messages from PickOrderService.confirmLotSubstitution. | |||
| */ | |||
| export function translateLotSubstitutionFailure( | |||
| t: TFunction<"pickOrder">, | |||
| substitutionResult: SubstitutionResultLike | |||
| ): string { | |||
| if (!substitutionResult) { | |||
| return String(t("Lot switch failed; pick line was not marked as checked.")); | |||
| } | |||
| const code = substitutionResult.code ?? ""; | |||
| const message = (substitutionResult.message ?? "").trim(); | |||
| if (code === "LOT_UNAVAILABLE") { | |||
| return String( | |||
| t( | |||
| "The scanned lot inventory line is unavailable. Cannot switch or bind; pick line was not updated." | |||
| ) | |||
| ); | |||
| } | |||
| if (!message) { | |||
| return String(t("Lot switch failed; pick line was not marked as checked.")); | |||
| } | |||
| let m = message.match(/^Pick order line (\d+) not found$/); | |||
| if (m) { | |||
| return String(t("Pick order line {{id}} not found", { id: m[1] })); | |||
| } | |||
| m = message.match(/^SuggestedPickLot not found for pickOrderLineId=(\d+)$/); | |||
| if (m) { | |||
| return String( | |||
| t("SuggestedPickLot not found for pickOrderLineId {{polId}}", { polId: m[1] }) | |||
| ); | |||
| } | |||
| m = message.match(/^SuggestedPickLot qty is invalid: (.+)$/); | |||
| if (m) { | |||
| return String(t("SuggestedPickLot qty is invalid: {{qty}}", { qty: m[1].trim() })); | |||
| } | |||
| m = message.match(/^Reject switch lot: available=(.+) < required=(.+)$/); | |||
| if (m) { | |||
| return String( | |||
| t("Reject switch lot: available {{available}} less than required {{required}}", { | |||
| available: m[1].trim(), | |||
| required: m[2].trim(), | |||
| }) | |||
| ); | |||
| } | |||
| m = message.match(/^Reject switch lot: picked=(.+) already >= required=(.+)$/); | |||
| if (m) { | |||
| return String( | |||
| t( | |||
| "Reject switch lot: picked {{picked}} already greater or equal required {{required}}", | |||
| { | |||
| picked: m[1].trim(), | |||
| required: m[2].trim(), | |||
| } | |||
| ) | |||
| ); | |||
| } | |||
| const viaKey = t(message, { defaultValue: message }); | |||
| if (viaKey !== message) { | |||
| return String(viaKey); | |||
| } | |||
| return message; | |||
| } | |||