FPSMS-frontend
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

140 行
3.6 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. }, [])
  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={6}>
  105. <TextField
  106. label={t("reportQty")}
  107. fullWidth
  108. {...register("acceptedQty", {
  109. required: "acceptedQty required!",
  110. min: 0,
  111. valueAsNumber: true,
  112. max: itemDetail.acceptedQty
  113. })}
  114. disabled={disabled}
  115. defaultValue={itemDetail.acceptedQty}
  116. error={Boolean(errors.acceptedQty)}
  117. helperText={errors.acceptedQty?.message}
  118. />
  119. </Grid>
  120. </Grid>
  121. <Grid
  122. container
  123. justifyContent="flex-start"
  124. alignItems="flex-start"
  125. spacing={2}
  126. sx={{ mt: 0.5 }}
  127. >
  128. </Grid>
  129. </Grid>
  130. );
  131. };
  132. export default EscalationForm;