| @@ -0,0 +1,17 @@ | |||
| "use server"; | |||
| import { serverFetchBlob } from "@/app/utils/fetchUtil"; | |||
| import { BASE_API_URL } from "@/config/api"; | |||
| import { cache } from "react"; | |||
| export const getMailTemplateForStockInLine = cache(async (stockInLineId: number) => { | |||
| console.log("stockInLineId", stockInLineId) | |||
| return serverFetchBlob(`${BASE_API_URL}/mailTemplates/getMailTemplateForStockInLine/${stockInLineId}`, | |||
| { | |||
| method: "GET", | |||
| headers: { "Content-Type": "application/json" }, | |||
| next: { | |||
| tags: ["mailTemplateForStockInLine"], | |||
| }, | |||
| }) | |||
| }) | |||
| @@ -3,6 +3,11 @@ import { getServerSession } from "next-auth"; | |||
| import { headers } from "next/headers"; | |||
| import { redirect } from "next/navigation"; | |||
| export interface BlobResponse { | |||
| filename: string; | |||
| blobValue: Uint8Array; | |||
| } | |||
| export interface Pageable { | |||
| pageSize?: number; | |||
| pageNum?: number; | |||
| @@ -86,7 +91,7 @@ export async function serverFetchJson<T>(...args: FetchParams) { | |||
| } | |||
| } | |||
| export async function serverFetchBlob<T>(...args: FetchParams) { | |||
| export async function serverFetchBlob<T extends BlobResponse>(...args: FetchParams) { | |||
| const response = await serverFetch(...args); | |||
| if (response.ok) { | |||
| @@ -68,7 +68,7 @@ import PoQcStockInModal from "./PoQcStockInModal"; | |||
| import QrModal from "./QrModal"; | |||
| import { PlayArrow } from "@mui/icons-material"; | |||
| import DoneIcon from "@mui/icons-material/Done"; | |||
| import { getCustomWidth } from "@/app/utils/commonUtil"; | |||
| import { downloadFile, getCustomWidth } from "@/app/utils/commonUtil"; | |||
| import PoInfoCard from "./PoInfoCard"; | |||
| import { decimalFormatter, integerFormatter } from "@/app/utils/formatUtil"; | |||
| import { List, ListItem, ListItemButton, ListItemText, Divider } from "@mui/material"; | |||
| @@ -78,6 +78,7 @@ import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; | |||
| import { DatePicker, LocalizationProvider, zhHK } from "@mui/x-date-pickers"; | |||
| import { debounce } from "lodash"; | |||
| import LoadingComponent from "../General/LoadingComponent"; | |||
| import { getMailTemplateForStockInLine } from "@/app/api/mailTemplate/actions"; | |||
| //import { useRouter } from "next/navigation"; | |||
| @@ -333,6 +334,13 @@ const PoDetail: React.FC<Props> = ({ po, qc, warehouse }) => { | |||
| setPurchaseOrder(newPo); | |||
| }, [purchaseOrder.id]); | |||
| const handleMailTemplateForStockInLine = useCallback(async (stockInLineId: number) => { | |||
| const response = await getMailTemplateForStockInLine(stockInLineId) | |||
| if (response) { | |||
| downloadFile(new Uint8Array(response.blobValue), response.filename); | |||
| } | |||
| }, []) | |||
| useEffect(() => { | |||
| setRows(purchaseOrder.pol || []); | |||
| }, [purchaseOrder]); | |||
| @@ -849,6 +857,7 @@ const PoDetail: React.FC<Props> = ({ po, qc, warehouse }) => { | |||
| itemDetail={selectedRow} | |||
| warehouse={warehouse} | |||
| fetchPoDetail={fetchPoDetail} | |||
| handleMailTemplateForStockInLine={handleMailTemplateForStockInLine} | |||
| /> | |||
| </Box> | |||
| </TableCell> | |||
| @@ -74,6 +74,7 @@ interface Props { | |||
| stockInLine: StockInLine[]; | |||
| warehouse: WarehouseResult[]; | |||
| fetchPoDetail: (poId: string) => void; | |||
| handleMailTemplateForStockInLine: (stockInLineId: number) => void; | |||
| } | |||
| export type StockInLineEntryError = { | |||
| @@ -112,7 +113,8 @@ function PoInputGrid({ | |||
| itemDetail, | |||
| stockInLine, | |||
| warehouse, | |||
| fetchPoDetail | |||
| fetchPoDetail, | |||
| handleMailTemplateForStockInLine | |||
| }: Props) { | |||
| console.log(itemDetail); | |||
| const { t } = useTranslation("purchaseOrder"); | |||
| @@ -595,7 +597,7 @@ const closeNewModal = useCallback(() => { | |||
| variant="contained" | |||
| color="primary" | |||
| sx={{ width: '150px' }} | |||
| // onClick={formProps.handleSubmit(onSubmitEmailSupplier)} | |||
| onClick={() => handleMailTemplateForStockInLine(params.row.id as number)} | |||
| > | |||
| {t("email supplier")} | |||
| </Button>} | |||
| @@ -604,7 +606,7 @@ const closeNewModal = useCallback(() => { | |||
| // color: "primary.main", | |||
| // marginRight: 1, | |||
| }} | |||
| onClick={handleNewQC(params.row.id, params)} | |||
| // onClick={handleNewQC(params.row.id, params)} | |||
| color="inherit" | |||
| key="edit" | |||
| />, | |||
| @@ -914,6 +916,7 @@ const closeNewModal = useCallback(() => { | |||
| open={newOpen} | |||
| onClose={closeNewModal} | |||
| itemDetail={modalInfo} | |||
| handleMailTemplateForStockInLine={handleMailTemplateForStockInLine} | |||
| /> | |||
| </> | |||
| ) | |||
| @@ -54,6 +54,7 @@ interface CommonProps extends Omit<ModalProps, "children"> { | |||
| qc?: QcItemWithChecks[]; | |||
| warehouse?: any[]; | |||
| // type: "qc" | "stockIn" | "escalation" | "putaway" | "reject"; | |||
| handleMailTemplateForStockInLine: (stockInLineId: number) => void; | |||
| } | |||
| interface Props extends CommonProps { | |||
| itemDetail: StockInLine & { qcResult?: PurchaseQcResult[] }; | |||
| @@ -69,6 +70,7 @@ const PoQcStockInModalVer2: React.FC<Props> = ({ | |||
| setItemDetail, | |||
| qc, | |||
| warehouse, | |||
| handleMailTemplateForStockInLine, | |||
| }) => { | |||
| const { | |||
| t, | |||