FPSMS-frontend
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

169 lines
4.3 KiB

  1. "use client";
  2. import { StockInLineEntry, EscalationInput } from "@/app/api/po/actions";
  3. import {
  4. Box,
  5. Card,
  6. CardContent,
  7. Grid,
  8. Stack,
  9. TextField,
  10. Tooltip,
  11. Typography,
  12. } from "@mui/material";
  13. import { useFormContext } from "react-hook-form";
  14. import { useTranslation } from "react-i18next";
  15. import StyledDataGrid from "../StyledDataGrid";
  16. import { useCallback, useEffect, useMemo } from "react";
  17. import {
  18. GridColDef,
  19. GridRowIdGetter,
  20. GridRowModel,
  21. useGridApiContext,
  22. GridRenderCellParams,
  23. GridRenderEditCellParams,
  24. useGridApiRef,
  25. } from "@mui/x-data-grid";
  26. import InputDataGrid from "../InputDataGrid";
  27. import { TableRow } from "../InputDataGrid/InputDataGrid";
  28. import TwoLineCell from "./TwoLineCell";
  29. import QcSelect from "./QcSelect";
  30. import { QcItemWithChecks } from "@/app/api/qc";
  31. import { GridEditInputCell } from "@mui/x-data-grid";
  32. import { StockInLine } from "@/app/api/po";
  33. import { stockInLineStatusMap } from "@/app/utils/formatUtil";
  34. interface Props {
  35. itemDetail: StockInLine;
  36. // qc: QcItemWithChecks[];
  37. disabled: boolean;
  38. }
  39. type EntryError =
  40. | {
  41. [field in keyof StockInLineEntry]?: string;
  42. }
  43. | undefined;
  44. const EscalationForm: React.FC<Props> = ({
  45. // qc,
  46. itemDetail,
  47. disabled,
  48. }) => {
  49. const { t } = useTranslation("purchaseOrder");
  50. const apiRef = useGridApiRef();
  51. const {
  52. register,
  53. formState: { errors, defaultValues, touchedFields },
  54. watch,
  55. control,
  56. setValue,
  57. getValues,
  58. reset,
  59. resetField,
  60. setError,
  61. clearErrors,
  62. } = useFormContext<EscalationInput>();
  63. console.log(itemDetail);
  64. const [status, determineCount] = useMemo(() => {
  65. switch (itemDetail.status) {
  66. case "pending":
  67. return ["determine1", 1];
  68. case "determine1":
  69. return ["determine2", 2];
  70. case "determine2":
  71. return ["determine3", 3];
  72. default:
  73. return ["receiving", "receive or reject"];
  74. }
  75. }, [itemDetail]);
  76. // const acceptedQty = watch("acceptedQty") || 0
  77. const acceptedQty = watch("acceptedQty") || 0;
  78. // console.log(acceptedQty)
  79. console.log(acceptedQty);
  80. console.log(itemDetail.acceptedQty);
  81. useEffect(() => {
  82. console.log("triggered");
  83. setValue("status", status);
  84. }, [setValue, status]);
  85. return (
  86. <Grid container justifyContent="flex-start" alignItems="flex-start">
  87. <Grid item xs={12}>
  88. <Typography variant="h6" display="block" marginBlockEnd={1}>
  89. {t(`Escalation`)}: {determineCount}
  90. </Typography>
  91. </Grid>
  92. {/* <Grid item xs={12}>
  93. <Typography variant="h6" display="block" marginBlockEnd={1}>
  94. {t(`to be processed`)}: {itemDetail.acceptedQty - acceptedQty}
  95. </Typography>
  96. </Grid> */}
  97. <Grid
  98. container
  99. justifyContent="flex-start"
  100. alignItems="flex-start"
  101. spacing={2}
  102. sx={{ mt: 0.5 }}
  103. >
  104. <Grid item xs={12}>
  105. <TextField
  106. label={t("productLotNo")}
  107. fullWidth
  108. {...register("productLotNo", {
  109. required: "productLotNo required!",
  110. })}
  111. disabled={disabled}
  112. error={Boolean(errors.productLotNo)}
  113. helperText={errors.productLotNo?.message}
  114. />
  115. </Grid>
  116. <Grid item xs={6}>
  117. <TextField
  118. label={t("reportQty")}
  119. fullWidth
  120. {...register("acceptedQty", {
  121. required: "acceptedQty required!",
  122. min: 0,
  123. valueAsNumber: true,
  124. max: itemDetail.acceptedQty,
  125. })}
  126. disabled={disabled}
  127. defaultValue={itemDetail.acceptedQty}
  128. error={Boolean(errors.acceptedQty)}
  129. helperText={errors.acceptedQty?.message}
  130. />
  131. </Grid>
  132. <Grid item xs={6}>
  133. <TextField
  134. label={t("uom")}
  135. fullWidth
  136. disabled={true}
  137. defaultValue={itemDetail.uom.code}
  138. />
  139. </Grid>
  140. <Grid item xs={12}>
  141. <TextField
  142. label={t("remarks")}
  143. fullWidth
  144. {...register("remarks", {
  145. })}
  146. disabled={disabled}
  147. />
  148. </Grid>
  149. </Grid>
  150. <Grid
  151. container
  152. justifyContent="flex-start"
  153. alignItems="flex-start"
  154. spacing={2}
  155. sx={{ mt: 0.5 }}
  156. ></Grid>
  157. </Grid>
  158. );
  159. };
  160. export default EscalationForm;