FPSMS-frontend
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

248 line
6.8 KiB

  1. import {
  2. Box,
  3. Button,
  4. CircularProgress,
  5. Grid,
  6. Modal,
  7. ModalProps,
  8. Typography,
  9. } from "@mui/material";
  10. import { GridToolbarContainer } from "@mui/x-data-grid";
  11. import {
  12. FooterPropsOverrides,
  13. GridColDef,
  14. GridRowSelectionModel,
  15. useGridApiRef,
  16. } from "@mui/x-data-grid";
  17. import { useCallback, useEffect, useMemo, useState } from "react";
  18. import { useTranslation } from "react-i18next";
  19. import StyledDataGrid from "../StyledDataGrid";
  20. import SearchResults, {
  21. Column,
  22. defaultPagingController,
  23. } from "../SearchResults/SearchResults";
  24. import { ByItemsSummary, ConsoPickOrderResult, PickOrderLine, PickOrderResult } from "@/app/api/pickorder";
  25. import { useRouter, useSearchParams } from "next/navigation";
  26. import ConsolidatePickOrderItemSum from "./ConsolidatePickOrderItemSum";
  27. import ConsolidatePickOrderSum from "./ConsolidatePickOrderSum";
  28. import { GridInputRowSelectionModel } from "@mui/x-data-grid";
  29. import {
  30. fetchConsoDetail,
  31. fetchConsoPickOrderClient,
  32. } from "@/app/api/pickorder/actions";
  33. import { EditNote } from "@mui/icons-material";
  34. interface Props {
  35. filterArgs: Record<string, any>;
  36. }
  37. const style = {
  38. position: "absolute",
  39. top: "50%",
  40. left: "50%",
  41. transform: "translate(-50%, -50%)",
  42. bgcolor: "background.paper",
  43. pt: 5,
  44. px: 5,
  45. pb: 10,
  46. width: 1500,
  47. };
  48. const ConsolidatedPickOrders: React.FC<Props> = ({ filterArgs }) => {
  49. const { t } = useTranslation("pickOrder");
  50. const router = useRouter();
  51. const apiRef = useGridApiRef();
  52. const [filteredPickOrders, setFilteredPickOrders] = useState(
  53. [] as ConsoPickOrderResult[]
  54. );
  55. const [isLoading, setIsLoading] = useState(false);
  56. const [modalOpen, setModalOpen] = useState(false); //change back to false
  57. const [consoCode, setConsoCode] = useState<string | undefined>(); ///change back to undefined
  58. const [revertIds, setRevertIds] = useState<GridInputRowSelectionModel>([]);
  59. const [totalCount, setTotalCount] = useState<number>();
  60. const [byPickOrderRows, setByPickOrderRows] = useState<Omit<PickOrderResult, "items">[] | undefined>(undefined);
  61. const [byItemsRows, setByItemsRows] = useState<ByItemsSummary[] | undefined>(undefined);
  62. const openDetailModal = useCallback((consoCode: string) => {
  63. setConsoCode(consoCode);
  64. setModalOpen(true);
  65. }, []);
  66. const closeDetailModal = useCallback(() => {
  67. setModalOpen(false);
  68. setConsoCode(undefined);
  69. }, []);
  70. const onDetailClick = useCallback(
  71. (pickOrder: any) => {
  72. console.log(pickOrder);
  73. openDetailModal(pickOrder.consoCode);
  74. },
  75. [openDetailModal]
  76. );
  77. const columns = useMemo<Column<ConsoPickOrderResult>[]>(
  78. () => [
  79. {
  80. name: "id",
  81. label: t("Detail"),
  82. onClick: onDetailClick,
  83. buttonIcon: <EditNote />,
  84. },
  85. {
  86. name: "consoCode",
  87. label: t("consoCode"),
  88. },
  89. ],
  90. []
  91. );
  92. const [pagingController, setPagingController] = useState(
  93. defaultPagingController
  94. );
  95. // pass conso code back to assign
  96. // pass user back to assign
  97. const fetchNewPageConsoPickOrder = useCallback(
  98. async (
  99. pagingController: Record<string, number>,
  100. filterArgs: Record<string, number>
  101. ) => {
  102. setIsLoading(true);
  103. const params = {
  104. ...pagingController,
  105. ...filterArgs,
  106. };
  107. const res = await fetchConsoPickOrderClient(params);
  108. if (res) {
  109. console.log(res);
  110. setFilteredPickOrders(res.records);
  111. setTotalCount(res.total);
  112. }
  113. setIsLoading(false);
  114. },
  115. []
  116. );
  117. useEffect(() => {
  118. fetchNewPageConsoPickOrder(pagingController, filterArgs);
  119. }, [fetchNewPageConsoPickOrder, pagingController, filterArgs]);
  120. const closeHandler = useCallback<NonNullable<ModalProps["onClose"]>>(
  121. (...args) => {
  122. closeDetailModal();
  123. // reset();
  124. },
  125. [closeDetailModal]
  126. );
  127. const handleRelease = useCallback(() => {
  128. console.log("release");
  129. router.push(`/pickorder/detail?consoCode=${consoCode}`);
  130. }, [router, consoCode]);
  131. const handleConsolidate_revert = useCallback(() => {
  132. console.log(revertIds);
  133. }, [revertIds]);
  134. const fetchConso = useCallback(async (consoCode: string) => {
  135. const res = await fetchConsoDetail(consoCode);
  136. if (res) {
  137. console.log(res);
  138. setByPickOrderRows(res.pickOrders)
  139. setByItemsRows(res.items)
  140. } else {
  141. console.log("error");
  142. console.log(res);
  143. }
  144. }, []);
  145. useEffect(() => {
  146. if (consoCode) {
  147. fetchConso(consoCode);
  148. }
  149. }, [consoCode]);
  150. return (
  151. <>
  152. <Grid
  153. container
  154. rowGap={1}
  155. // direction="column"
  156. alignItems="center"
  157. justifyContent="center"
  158. >
  159. <Grid item xs={12}>
  160. {isLoading ? (
  161. <CircularProgress size={40} />
  162. ) : (
  163. <SearchResults<ConsoPickOrderResult>
  164. items={filteredPickOrders}
  165. columns={columns}
  166. pagingController={pagingController}
  167. setPagingController={setPagingController}
  168. totalCount={totalCount}
  169. />
  170. )}
  171. </Grid>
  172. </Grid>
  173. {consoCode != undefined ? (
  174. <Modal open={modalOpen} onClose={closeHandler}>
  175. <Box sx={{ ...style, maxHeight: 800 }}>
  176. <Typography mb={2} variant="h4">
  177. {consoCode}
  178. </Typography>
  179. <Box sx={{
  180. height: 400,
  181. overflowY: "auto"
  182. }}>
  183. <Grid container>
  184. <Grid item xs={12} sx={{ mt: 2 }}>
  185. <ConsolidatePickOrderSum
  186. rows={byPickOrderRows}
  187. setRows={setByPickOrderRows}
  188. consoCode={consoCode}
  189. revertIds={revertIds}
  190. setRevertIds={setRevertIds}
  191. />
  192. </Grid>
  193. <Grid item xs={12}>
  194. <ConsolidatePickOrderItemSum
  195. rows={byItemsRows}
  196. setRows={setByItemsRows}
  197. />
  198. </Grid>
  199. </Grid>
  200. </Box>
  201. <Grid container>
  202. <Grid
  203. item
  204. xs={12}
  205. display="flex"
  206. justifyContent="end"
  207. alignItems="end"
  208. >
  209. <Button
  210. disabled={(revertIds as number[]).length < 1}
  211. variant="outlined"
  212. onClick={handleConsolidate_revert}
  213. sx={{ mr: 1 }}
  214. >
  215. {t("remove")}
  216. </Button>
  217. <Button
  218. // disabled={selectedRows.length < 1}
  219. variant="outlined"
  220. onClick={handleRelease}
  221. >
  222. {t("release")}
  223. </Button>
  224. </Grid>
  225. </Grid>
  226. </Box>
  227. </Modal>
  228. ) : undefined}
  229. </>
  230. );
  231. };
  232. export default ConsolidatedPickOrders;