@@ -12,6 +12,7 @@ import { CameraProvider } from "@/components/Cameras/CameraProvider"; | |||||
import { UploadProvider } from "@/components/UploadProvider/UploadProvider"; | import { UploadProvider } from "@/components/UploadProvider/UploadProvider"; | ||||
import SessionProviderWrapper from "@/components/SessionProviderWrapper/SessionProviderWrapper"; | import SessionProviderWrapper from "@/components/SessionProviderWrapper/SessionProviderWrapper"; | ||||
import QrCodeScannerProvider from "@/components/QrCodeScannerProvider/QrCodeScannerProvider"; | import QrCodeScannerProvider from "@/components/QrCodeScannerProvider/QrCodeScannerProvider"; | ||||
import { I18nProvider } from "@/i18n"; | |||||
export default async function MainLayout({ | export default async function MainLayout({ | ||||
children, | children, | ||||
@@ -1,7 +1,7 @@ | |||||
import { preloadClaims } from "@/app/api/claims"; | import { preloadClaims } from "@/app/api/claims"; | ||||
import ClaimSearch from "@/components/ClaimSearch"; | import ClaimSearch from "@/components/ClaimSearch"; | ||||
import PoSearch from "@/components/PoSearch"; | import PoSearch from "@/components/PoSearch"; | ||||
import { getServerI18n } from "@/i18n"; | |||||
import { getServerI18n, I18nProvider } from "@/i18n"; | |||||
import Add from "@mui/icons-material/Add"; | import Add from "@mui/icons-material/Add"; | ||||
import Button from "@mui/material/Button"; | import Button from "@mui/material/Button"; | ||||
import Stack from "@mui/material/Stack"; | import Stack from "@mui/material/Stack"; | ||||
@@ -35,9 +35,11 @@ const PurchaseOrder: React.FC = async () => { | |||||
{t("Create Po")} | {t("Create Po")} | ||||
</Button> */} | </Button> */} | ||||
</Stack> | </Stack> | ||||
<I18nProvider namespaces={["po", "common"]}> | |||||
<Suspense fallback={<PoSearch.Loading />}> | <Suspense fallback={<PoSearch.Loading />}> | ||||
<PoSearch /> | <PoSearch /> | ||||
</Suspense> | </Suspense> | ||||
</I18nProvider> | |||||
</> | </> | ||||
); | ); | ||||
}; | }; | ||||
@@ -110,7 +110,7 @@ function PoInputGrid({ | |||||
warehouse, | warehouse, | ||||
}: Props) { | }: Props) { | ||||
console.log(itemDetail); | console.log(itemDetail); | ||||
const { t } = useTranslation("home"); | |||||
const { t } = useTranslation("po"); | |||||
const apiRef = useGridApiRef(); | const apiRef = useGridApiRef(); | ||||
const [rowModesModel, setRowModesModel] = useState<GridRowModesModel>({}); | const [rowModesModel, setRowModesModel] = useState<GridRowModesModel>({}); | ||||
const getRowId = useCallback<GridRowIdGetter<StockInLineRow>>( | const getRowId = useCallback<GridRowIdGetter<StockInLineRow>>( | ||||
@@ -479,7 +479,7 @@ function PoInputGrid({ | |||||
stockInLineStatusMap[status] === 9 || | stockInLineStatusMap[status] === 9 || | ||||
stockInLineStatusMap[status] <= 2 || | stockInLineStatusMap[status] <= 2 || | ||||
stockInLineStatusMap[status] >= 7 || | stockInLineStatusMap[status] >= 7 || | ||||
(!session?.user?.abilities?.includes("APPROVAL") && stockInLineStatusMap[status] >= 3 && stockInLineStatusMap[status] <= 5) | |||||
(!session?.user?.abilities?.includes("APPROVAL") && (stockInLineStatusMap[status] >= 3 || stockInLineStatusMap[status] <= 5)) | |||||
} | } | ||||
// set _isNew to false after posting | // set _isNew to false after posting | ||||
// or check status | // or check status | ||||
@@ -28,14 +28,12 @@ const PoSearch: React.FC<Props> = ({ po, warehouse }) => { | |||||
const searchCriteria: Criterion<SearchParamNames>[] = useMemo(() => { | const searchCriteria: Criterion<SearchParamNames>[] = useMemo(() => { | ||||
var searchCriteria: Criterion<SearchParamNames>[] = [ | var searchCriteria: Criterion<SearchParamNames>[] = [ | ||||
{ label: t("Code"), paramName: "code", type: "text" }, | { label: t("Code"), paramName: "code", type: "text" }, | ||||
// { label: t("Name"), paramName: "name", type: "text" }, | |||||
{ label: t("Status"), paramName: "status", type: "select", options: ["PENDING", "RECEIVING", "COMPLETED"] }, | |||||
{ label: t("Escalated"), paramName: "escalated", type: "select", options: [t("Escalated"), t("NotEscalated")] }, | |||||
]; | ]; | ||||
return searchCriteria; | return searchCriteria; | ||||
}, [t, po]); | }, [t, po]); | ||||
const {data: session} = useSession(); | |||||
console.log(session); | |||||
const onDetailClick = useCallback( | const onDetailClick = useCallback( | ||||
(po: PoResult) => { | (po: PoResult) => { | ||||
@@ -75,7 +73,7 @@ const PoSearch: React.FC<Props> = ({ po, warehouse }) => { | |||||
label: t("Escalated"), | label: t("Escalated"), | ||||
renderCell: (params) => { | renderCell: (params) => { | ||||
return params.escalated ? <NotificationIcon color="warning"/> : undefined | return params.escalated ? <NotificationIcon color="warning"/> : undefined | ||||
} | |||||
} | |||||
}, | }, | ||||
// { | // { | ||||
// name: "name", | // name: "name", | ||||
@@ -133,10 +131,11 @@ const PoSearch: React.FC<Props> = ({ po, warehouse }) => { | |||||
onSearch={(query) => { | onSearch={(query) => { | ||||
setFilteredPo( | setFilteredPo( | ||||
po.filter((p) => { | po.filter((p) => { | ||||
return p.code | |||||
.toLowerCase() | |||||
.includes(query.code.toLowerCase()); | |||||
// p.name.toLowerCase().includes(query.name.toLowerCase()) | |||||
return ( | |||||
p.code.toLowerCase().includes(query.code.toLowerCase()) && | |||||
(query.status === "All" || p.status === query.status) && | |||||
(query.escalated === "All" || p.escalated === (query.escalated === t("Escalated"))) | |||||
) | |||||
}) | }) | ||||
); | ); | ||||
}} | }} | ||||
@@ -20,7 +20,7 @@ type SearchQuery = Partial<Omit<UserResult, "id">>; | |||||
type SearchParamNames = keyof SearchQuery; | type SearchParamNames = keyof SearchQuery; | ||||
const UserSearch: React.FC<Props> = ({ users }) => { | const UserSearch: React.FC<Props> = ({ users }) => { | ||||
const { t } = useTranslation(); | |||||
const { t } = useTranslation("user"); | |||||
const [filteredUser, setFilteredUser] = useState(users); | const [filteredUser, setFilteredUser] = useState(users); | ||||
const router = useRouter(); | const router = useRouter(); | ||||
@@ -0,0 +1,18 @@ | |||||
{ | |||||
"Create User": "新增用戶", | |||||
"User Detail": "用戶詳細資料", | |||||
"User Authority": "用戶權限", | |||||
"Authority Pool": "權限池", | |||||
"Allocated Authority": "已分配權限", | |||||
"username": "用戶名稱", | |||||
"password": "密碼", | |||||
"Confirm Password": "確認密碼", | |||||
"Reset": "重置", | |||||
"Cancel": "取消", | |||||
"Confirm": "確認", | |||||
"name": "姓名", | |||||
"User ID": "用戶ID", | |||||
"User Name": "用戶名稱", | |||||
"User Group": "用戶群組", | |||||
"Authority": "權限" | |||||
} |
@@ -0,0 +1,16 @@ | |||||
{ | |||||
"code": "代码", | |||||
"status": "状态", | |||||
"escalated": "已升级", | |||||
"notEscalated": "未升级", | |||||
"All": "全部", | |||||
"Pending": "待处理", | |||||
"Receiving": "接收中", | |||||
"Completed": "已完成", | |||||
"Purchase Order": "采购订单", | |||||
"Details": "详情", | |||||
"OrderDate": "订单日期", | |||||
"Supplier": "供应商", | |||||
"Escalated": "已升级", | |||||
"NotEscalated": "未升级" | |||||
} |