@@ -113,7 +113,7 @@ const PoSearchList: React.FC<{ | |||
}, [poList, searchTerm, t]); | |||
return ( | |||
<Paper sx={{ p: 2, maxHeight: "400px", overflow: "auto", minWidth: "300px" }}> | |||
<Paper sx={{ p: 2, maxHeight: "480px", overflow: "auto", minWidth: "300px", height: "480px" }}> | |||
<Typography variant="h6" gutterBottom> | |||
{t("Purchase Orders")} | |||
</Typography> | |||
@@ -486,7 +486,7 @@ const PoDetail: React.FC<Props> = ({ po, qc, warehouse }) => { | |||
{/* <TableCell align="right">{decimalFormatter.format(row.price)}</TableCell> */} | |||
{/* <TableCell align="left">{row.expiryDate}</TableCell> */} | |||
<TableCell align="left">{t(`${currStatus.toLowerCase()}`)}</TableCell> | |||
<TableCell align="right">{integerFormatter.format(row.receivedQty)}</TableCell> | |||
{/* <TableCell align="right">{integerFormatter.format(row.receivedQty)}</TableCell> */} | |||
<TableCell align="center"> | |||
<TextField | |||
id="lotNo" | |||
@@ -700,7 +700,7 @@ const PoDetail: React.FC<Props> = ({ po, qc, warehouse }) => { | |||
{true ? ( | |||
<FormProvider {...dnFormProps}> | |||
<Stack component={"form"} spacing={2}> | |||
<Card sx={{ display: "block" }}> | |||
<Card sx={{ display: "block", height: "230px" }}> | |||
<CardContent component={Stack} spacing={2}> | |||
<Grid container spacing={2} sx={{ maxWidth: 'fit-content' }}> | |||
<Grid item xs={12}> | |||
@@ -784,9 +784,9 @@ const PoDetail: React.FC<Props> = ({ po, qc, warehouse }) => { | |||
{/* <TableCell align="right">{t("total weight")}</TableCell> */} | |||
{/* <TableCell align="right">{`${t("price")} (HKD)`}</TableCell> */} | |||
<TableCell align="left" sx={{ width: '75px' }}>{t("status")}</TableCell> | |||
{renderFieldCondition(FIRST_IN_FIELD) ? <TableCell align="right">{t("receivedQty")}</TableCell> : undefined} | |||
{/* {renderFieldCondition(FIRST_IN_FIELD) ? <TableCell align="right">{t("receivedQty")}</TableCell> : undefined} */} | |||
<TableCell align="center" sx={{ width: '150px' }}>{t("productLotNo")}</TableCell> | |||
{renderFieldCondition(SECOND_IN_FIELD) ? <TableCell align="center" sx={{ width: '150px' }}>{t("dnQty")}(以訂單單位計算)</TableCell> : undefined} | |||
{renderFieldCondition(SECOND_IN_FIELD) ? <TableCell align="center" sx={{ width: '150px' }}>{t("dnQty")}<br/>(以訂單單位計算)</TableCell> : undefined} | |||
<TableCell align="center" sx={{ width: '100px' }}></TableCell> | |||
</TableRow> | |||
</TableHead> | |||
@@ -29,7 +29,7 @@ const PoInfoCard: React.FC<Props> = async ( | |||
const { t } = useTranslation("purchaseOrder") | |||
return ( | |||
<> | |||
<Card sx={{ display: "block" }}> | |||
<Card sx={{ display: "block", height: "230px" }}> | |||
<CardContent component={Stack} spacing={4}> | |||
<Box> | |||
<Stack spacing={2}> | |||
@@ -1,7 +1,7 @@ | |||
"use client"; | |||
import { PoResult } from "@/app/api/po"; | |||
import { useCallback, useEffect, useMemo, useState } from "react"; | |||
import React, { useCallback, useEffect, useMemo, useState } from "react"; | |||
import { useTranslation } from "react-i18next"; | |||
import { useRouter, useSearchParams } from "next/navigation"; | |||
import SearchBox, { Criterion } from "../SearchBox"; | |||
@@ -111,6 +111,14 @@ const PoSearch: React.FC<Props> = ({ | |||
} | |||
}, [selectedPoIds, router]); | |||
const itemColumn = useCallback((value: string | undefined) => { | |||
if (!value) { | |||
return <Grid>"N/A"</Grid> | |||
} | |||
const items = value.split(",") | |||
return items.map((item) => <Grid key={item}>{item}</Grid>) | |||
}, []) | |||
const columns = useMemo<Column<PoResult>[]>( | |||
() => [ | |||
{ | |||
@@ -150,15 +158,50 @@ const PoSearch: React.FC<Props> = ({ | |||
return <>{arrayToDateString(params.orderDate)}<br/>{arrayToDateString(params.estimatedArrivalDate)}</> | |||
}, | |||
}, | |||
// { | |||
// name: "itemDetail", | |||
// label: t("Item Detail"), | |||
// renderCell: (params) => { | |||
// if (!params.itemDetail) { | |||
// return "N/A" | |||
// } | |||
// const items = params.itemDetail.split(",") | |||
// return items.map((item) => <Grid key={item}>{item}</Grid>) | |||
// }, | |||
// }, | |||
{ | |||
name: "itemCode", | |||
label: t("Item Code"), | |||
renderCell: (params) => { | |||
return itemColumn(params.itemCode); | |||
}, | |||
}, | |||
{ | |||
name: "itemName", | |||
label: t("Item Name"), | |||
renderCell: (params) => { | |||
return itemColumn(params.itemName); | |||
}, | |||
}, | |||
{ | |||
name: "itemQty", | |||
label: t("Item Qty"), | |||
renderCell: (params) => { | |||
return itemColumn(params.itemQty); | |||
}, | |||
}, | |||
{ | |||
name: "itemSumAcceptedQty", | |||
label: t("Item Accepted Qty"), | |||
renderCell: (params) => { | |||
return itemColumn(params.itemSumAcceptedQty); | |||
}, | |||
}, | |||
{ | |||
name: "itemDetail", | |||
label: t("Item Detail"), | |||
name: "itemUom", | |||
label: t("Item Purchase UoM"), | |||
renderCell: (params) => { | |||
if (!params.itemDetail) { | |||
return "N/A" | |||
} | |||
const items = params.itemDetail.split(",") | |||
return items.map((item) => <Grid key={item}>{item}</Grid>) | |||
return itemColumn(params.itemUom); | |||
}, | |||
}, | |||
{ | |||
@@ -8,7 +8,7 @@ | |||
"UoM": "單位", | |||
"mat": "物料", | |||
"fg": "成品", | |||
"Available Qty": "可用數量 (倉存單位)", | |||
"Available Qty": "可用數量", | |||
"Sales UoM": "銷售單位", | |||
"Stock UoM": "庫存單位", | |||
"Available Qty Per Smallest Unit": "可用數量 (基本單位)", | |||
@@ -31,14 +31,19 @@ | |||
"itemNo": "貨品編號", | |||
"itemName": "貨品名稱", | |||
"Item Detail": "貨品詳情", | |||
"Item Code": "貨品編號", | |||
"Item Name": "貨品名稱", | |||
"Item Qty": "貨品數量", | |||
"Item Accepted Qty": "貨品已收貨數量", | |||
"Item Purchase UoM": "貨品計量單位", | |||
"qty": "訂單數量", | |||
"uom": "計量單位", | |||
"Stock UoM": "庫存單位", | |||
"Stock In Qty": "入庫數量", | |||
"Stock In Qty": "收貨數量", | |||
"total weight": "總重量", | |||
"weight unit": "重量單位", | |||
"price": "訂單貨值", | |||
"processed": "已處理數量", | |||
"processed": "已上架數量", | |||
"expiryDate": "到期日", | |||
"acceptedQty": "是次來貨數量", | |||
"putawayQty": "上架數量", | |||