| @@ -7,7 +7,7 @@ import React, { Suspense } from "react"; | |||||
| import GeneralLoading from "@/components/General/GeneralLoading"; | import GeneralLoading from "@/components/General/GeneralLoading"; | ||||
| export const metadata: Metadata = { | export const metadata: Metadata = { | ||||
| title: "Job Order detail" | |||||
| title: "Job Order Detail" | |||||
| } | } | ||||
| const jo: React.FC = async () => { | const jo: React.FC = async () => { | ||||
| @@ -24,7 +24,7 @@ const jo: React.FC = async () => { | |||||
| rowGap={2} | rowGap={2} | ||||
| > | > | ||||
| <Typography variant="h4" marginInlineEnd={2}> | <Typography variant="h4" marginInlineEnd={2}> | ||||
| {t("Job Order detail")} | |||||
| {t("Job Order Detail")} | |||||
| </Typography> | </Typography> | ||||
| </Stack> | </Stack> | ||||
| <I18nProvider namespaces={["jo", "common"]}> | <I18nProvider namespaces={["jo", "common"]}> | ||||
| @@ -1,6 +1,6 @@ | |||||
| import { fetchPickOrders } from "@/app/api/pickOrder"; | import { fetchPickOrders } from "@/app/api/pickOrder"; | ||||
| import GeneralLoading from "../General/GeneralLoading"; | import GeneralLoading from "../General/GeneralLoading"; | ||||
| import PickOrderSearch from "./FinishedGoodSearch"; | |||||
| import PickOrderSearch from "./FinishedGoodSearchWrapper"; | |||||
| interface SubComponents { | interface SubComponents { | ||||
| Loading: typeof GeneralLoading; | Loading: typeof GeneralLoading; | ||||
| @@ -18,7 +18,7 @@ const FinishedGoodSearchWrapper: React.FC & SubComponents = async () => { | |||||
| }), | }), | ||||
| ]); | ]); | ||||
| return <PickOrderSearch pickOrders={pickOrders} />; | |||||
| return <FinishedGoodSearchWrapper pickOrders={pickOrders} />; | |||||
| }; | }; | ||||
| FinishedGoodSearchWrapper.Loading = GeneralLoading; | FinishedGoodSearchWrapper.Loading = GeneralLoading; | ||||
| @@ -68,7 +68,7 @@ const QrCodeModal: React.FC<{ | |||||
| onQrCodeSubmit: (lotNo: string) => void; | onQrCodeSubmit: (lotNo: string) => void; | ||||
| combinedLotData: any[]; | combinedLotData: any[]; | ||||
| }> = ({ open, onClose, lot, onQrCodeSubmit, combinedLotData }) => { | }> = ({ open, onClose, lot, onQrCodeSubmit, combinedLotData }) => { | ||||
| const { t } = useTranslation("pickOrder"); | |||||
| const { t } = useTranslation("jo"); | |||||
| const { values: qrValues, isScanning, startScan, stopScan, resetScan } = useQrCodeScannerContext(); | const { values: qrValues, isScanning, startScan, stopScan, resetScan } = useQrCodeScannerContext(); | ||||
| const [manualInput, setManualInput] = useState<string>(''); | const [manualInput, setManualInput] = useState<string>(''); | ||||
| @@ -315,7 +315,7 @@ const QrCodeModal: React.FC<{ | |||||
| }; | }; | ||||
| const JobPickExecution: React.FC<Props> = ({ filterArgs }) => { | const JobPickExecution: React.FC<Props> = ({ filterArgs }) => { | ||||
| const { t } = useTranslation("pickOrder"); | |||||
| const { t } = useTranslation("jo"); | |||||
| const router = useRouter(); | const router = useRouter(); | ||||
| const { data: session } = useSession() as { data: SessionWithTokens | null }; | const { data: session } = useSession() as { data: SessionWithTokens | null }; | ||||
| @@ -1301,7 +1301,7 @@ const JobPickExecution: React.FC<Props> = ({ filterArgs }) => { | |||||
| <TableCell>{t("Route")}</TableCell> | <TableCell>{t("Route")}</TableCell> | ||||
| <TableCell>{t("Item Code")}</TableCell> | <TableCell>{t("Item Code")}</TableCell> | ||||
| <TableCell>{t("Item Name")}</TableCell> | <TableCell>{t("Item Name")}</TableCell> | ||||
| <TableCell>{t("Lot#")}</TableCell> | |||||
| <TableCell>{t("Lot No")}</TableCell> | |||||
| <TableCell align="right">{t("Lot Required Pick Qty")}</TableCell> | <TableCell align="right">{t("Lot Required Pick Qty")}</TableCell> | ||||
| <TableCell align="center">{t("Scan Result")}</TableCell> | <TableCell align="center">{t("Scan Result")}</TableCell> | ||||
| <TableCell align="center">{t("Submit Required Pick Qty")}</TableCell> | <TableCell align="center">{t("Submit Required Pick Qty")}</TableCell> | ||||
| @@ -61,7 +61,7 @@ const QrCodeModal: React.FC<{ | |||||
| onQrCodeSubmit: (lotNo: string) => void; | onQrCodeSubmit: (lotNo: string) => void; | ||||
| combinedLotData: any[]; | combinedLotData: any[]; | ||||
| }> = ({ open, onClose, lot, onQrCodeSubmit, combinedLotData }) => { | }> = ({ open, onClose, lot, onQrCodeSubmit, combinedLotData }) => { | ||||
| const { t } = useTranslation("pickOrder"); | |||||
| const { t } = useTranslation("jo"); | |||||
| const { values: qrValues, isScanning, startScan, stopScan, resetScan } = useQrCodeScannerContext(); | const { values: qrValues, isScanning, startScan, stopScan, resetScan } = useQrCodeScannerContext(); | ||||
| const [manualInput, setManualInput] = useState<string>(''); | const [manualInput, setManualInput] = useState<string>(''); | ||||
| @@ -308,7 +308,7 @@ const QrCodeModal: React.FC<{ | |||||
| }; | }; | ||||
| const JobPickExecution: React.FC<Props> = ({ filterArgs }) => { | const JobPickExecution: React.FC<Props> = ({ filterArgs }) => { | ||||
| const { t } = useTranslation("pickOrder"); | |||||
| const { t } = useTranslation("jo"); | |||||
| const router = useRouter(); | const router = useRouter(); | ||||
| const { data: session } = useSession() as { data: SessionWithTokens | null }; | const { data: session } = useSession() as { data: SessionWithTokens | null }; | ||||
| @@ -1082,7 +1082,7 @@ const paginatedData = useMemo(() => { | |||||
| <TableCell>{t("Route")}</TableCell> | <TableCell>{t("Route")}</TableCell> | ||||
| <TableCell>{t("Item Code")}</TableCell> | <TableCell>{t("Item Code")}</TableCell> | ||||
| <TableCell>{t("Item Name")}</TableCell> | <TableCell>{t("Item Name")}</TableCell> | ||||
| <TableCell>{t("Lot#")}</TableCell> | |||||
| <TableCell>{t("Lot No")}</TableCell> | |||||
| <TableCell align="right">{t("Lot Required Pick Qty")}</TableCell> | <TableCell align="right">{t("Lot Required Pick Qty")}</TableCell> | ||||
| <TableCell align="center">{t("Scan Result")}</TableCell> | <TableCell align="center">{t("Scan Result")}</TableCell> | ||||
| <TableCell align="center">{t("Submit Required Pick Qty")}</TableCell> | <TableCell align="center">{t("Submit Required Pick Qty")}</TableCell> | ||||
| @@ -43,7 +43,7 @@ type SearchQuery = Partial< | |||||
| type SearchParamNames = keyof SearchQuery; | type SearchParamNames = keyof SearchQuery; | ||||
| const JodetailSearch: React.FC<Props> = ({ pickOrders }) => { | const JodetailSearch: React.FC<Props> = ({ pickOrders }) => { | ||||
| const { t } = useTranslation("pickOrder"); | |||||
| const { t } = useTranslation("jo"); | |||||
| const { data: session } = useSession() as { data: SessionWithTokens | null }; | const { data: session } = useSession() as { data: SessionWithTokens | null }; | ||||
| const currentUserId = session?.id ? parseInt(session.id) : undefined; | const currentUserId = session?.id ? parseInt(session.id) : undefined; | ||||
| @@ -422,7 +422,7 @@ const [isLoadingUnassigned, setIsLoadingUnassigned] = useState(false); | |||||
| }}> | }}> | ||||
| <Tabs value={tabIndex} onChange={handleTabChange} variant="scrollable"> | <Tabs value={tabIndex} onChange={handleTabChange} variant="scrollable"> | ||||
| <Tab label={t("Pick Order Detail")} iconPosition="end" /> | <Tab label={t("Pick Order Detail")} iconPosition="end" /> | ||||
| <Tab label={t("Job order match")} iconPosition="end" /> | |||||
| <Tab label={t("Job Order Match")} iconPosition="end" /> | |||||
| <Tab label={t("Finished Job Order Record")} iconPosition="end" /> | <Tab label={t("Finished Job Order Record")} iconPosition="end" /> | ||||
| </Tabs> | </Tabs> | ||||
| @@ -210,7 +210,7 @@ const NavigationContent: React.FC = () => { | |||||
| }, | }, | ||||
| { | { | ||||
| icon: <RequestQuote />, | icon: <RequestQuote />, | ||||
| label: "Job Order detail", | |||||
| label: "Job Order Detail", | |||||
| path: "/jodetail", | path: "/jodetail", | ||||
| }, | }, | ||||
| ], | ], | ||||
| @@ -89,6 +89,20 @@ | |||||
| "Put Away Scan": "上架掃碼", | "Put Away Scan": "上架掃碼", | ||||
| "Finished Good Order": "成品出倉", | "Finished Good Order": "成品出倉", | ||||
| "finishedGood": "成品", | "finishedGood": "成品", | ||||
| "Router": "執貨路線" | |||||
| "Router": "執貨路線", | |||||
| "Job Order Detail": "工單細節", | |||||
| "No data available": "沒有資料", | |||||
| "Start Scan": "開始掃碼", | |||||
| "Stop Scan": "停止掃碼", | |||||
| "Scan Result": "掃碼結果", | |||||
| "Expiry Date": "有效期", | |||||
| "Pick Order Code": "提料單編號", | |||||
| "Target Date": "需求日期", | |||||
| "Lot Required Pick Qty": "批號需求數量", | |||||
| "Job Order Match": "工單匹配", | |||||
| "All Pick Order Lots": "所有提料單批號", | |||||
| "Row per page": "每頁行數", | |||||
| "No data available": "沒有資料", | |||||
| "jodetail": "工單細節" | |||||
| } | } | ||||
| @@ -17,5 +17,30 @@ | |||||
| "Planning": "計劃中", | "Planning": "計劃中", | ||||
| "Scanned": "已掃碼", | "Scanned": "已掃碼", | ||||
| "Scan Status": "掃碼狀態", | "Scan Status": "掃碼狀態", | ||||
| "Start Job Order": "開始工單" | |||||
| "Start Job Order": "開始工單", | |||||
| "Job Order Detail": "工單細節", | |||||
| "Pick Order Detail": "提料單細節", | |||||
| "Finished Job Order Record": "已完成工單記錄", | |||||
| "Index": "索引", | |||||
| "Route": "路線", | |||||
| "Item Code": "物料編號", | |||||
| "Item Name": "物料名稱", | |||||
| "Qty": "數量", | |||||
| "Unit": "單位", | |||||
| "Location": "位置", | |||||
| "Scan Result": "掃碼結果", | |||||
| "Expiry Date": "有效期", | |||||
| "Pick Order Code": "提料單編號", | |||||
| "Target Date": "需求日期", | |||||
| "Lot Required Pick Qty": "批號需求數量", | |||||
| "Job Order Match": "工單匹配", | |||||
| "Lot No": "批號", | |||||
| "Submit Required Pick Qty": "提交需求數量", | |||||
| "All Pick Order Lots": "所有提料單批號", | |||||
| "Row per page": "每頁行數", | |||||
| "No data available": "沒有資料", | |||||
| "jodetail": "工單細節", | |||||
| "Start QR Scan": "開始QR掃碼", | |||||
| "Stop QR Scan": "停止QR掃碼", | |||||
| "Rows per page": "每頁行數" | |||||
| } | } | ||||