FPSMS-frontend
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

137 рядки
3.5 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. }
  38. type EntryError =
  39. | {
  40. [field in keyof StockInLineEntry]?: string;
  41. }
  42. | undefined;
  43. const EscalationForm: React.FC<Props> = ({
  44. // qc,
  45. itemDetail,
  46. }) => {
  47. const { t } = useTranslation();
  48. const apiRef = useGridApiRef();
  49. const {
  50. register,
  51. formState: { errors, defaultValues, touchedFields },
  52. watch,
  53. control,
  54. setValue,
  55. getValues,
  56. reset,
  57. resetField,
  58. setError,
  59. clearErrors,
  60. } = useFormContext<EscalationInput>();
  61. console.log(itemDetail)
  62. const [status, determineCount] = useMemo(() => {
  63. switch (itemDetail.status) {
  64. case "pending":
  65. return ["determine1", 1];
  66. case "determine1":
  67. return ["determine2", 2];
  68. case "determine2":
  69. return ["determine3", 3];
  70. default:
  71. return ["receiving", "receive or reject" ];
  72. }
  73. }, [itemDetail])
  74. // const acceptedQty = watch("acceptedQty") || 0
  75. const acceptedQty = watch("acceptedQty") || 0
  76. // console.log(acceptedQty)
  77. console.log(acceptedQty)
  78. console.log(itemDetail.acceptedQty)
  79. useEffect(() => {
  80. console.log("triggered")
  81. setValue("status", status)
  82. }, [])
  83. return (
  84. <Grid container justifyContent="flex-start" alignItems="flex-start">
  85. <Grid item xs={12}>
  86. <Typography variant="h6" display="block" marginBlockEnd={1}>
  87. {t(`Escalation`)}: {determineCount}
  88. </Typography>
  89. </Grid>
  90. <Grid item xs={12}>
  91. <Typography variant="h6" display="block" marginBlockEnd={1}>
  92. {t(`to be processed`)}: {itemDetail.acceptedQty - acceptedQty}
  93. </Typography>
  94. </Grid>
  95. <Grid
  96. container
  97. justifyContent="flex-start"
  98. alignItems="flex-start"
  99. spacing={2}
  100. sx={{ mt: 0.5 }}
  101. >
  102. <Grid item xs={6}>
  103. <TextField
  104. label={t("acceptedQty")}
  105. fullWidth
  106. {...register("acceptedQty", {
  107. required: "acceptedQty required!",
  108. min: 0,
  109. valueAsNumber: true,
  110. max: itemDetail.acceptedQty
  111. })}
  112. defaultValue={itemDetail.acceptedQty}
  113. error={Boolean(errors.acceptedQty)}
  114. helperText={errors.acceptedQty?.message}
  115. />
  116. </Grid>
  117. </Grid>
  118. <Grid
  119. container
  120. justifyContent="flex-start"
  121. alignItems="flex-start"
  122. spacing={2}
  123. sx={{ mt: 0.5 }}
  124. >
  125. </Grid>
  126. </Grid>
  127. );
  128. };
  129. export default EscalationForm;