FPSMS-frontend
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

138 Zeilen
3.8 KiB

  1. import { QcItemWithChecks } from "@/app/api/qc";
  2. import useUploadContext from "../UploadProvider/useUploadContext";
  3. import {
  4. PickOrderApprovalInput,
  5. PickOrderQcInput,
  6. updateStockOutLine,
  7. UpdateStockOutLine,
  8. } from "@/app/api/pickOrder/actions";
  9. import { FormProvider, SubmitHandler, useForm } from "react-hook-form";
  10. import QcContent from "./QcContent";
  11. import { Box, Button, Modal, ModalProps, Stack } from "@mui/material";
  12. import { useCallback } from "react";
  13. import { useTranslation } from "react-i18next";
  14. import { Check } from "@mui/icons-material";
  15. import { StockOutLine } from "@/app/api/pickOrder";
  16. import dayjs from "dayjs";
  17. import { INPUT_DATE_FORMAT, OUTPUT_TIME_FORMAT } from "@/app/utils/formatUtil";
  18. import ApprovalContent from "./ApprovalContent";
  19. const style = {
  20. position: "absolute",
  21. top: "50%",
  22. left: "50%",
  23. transform: "translate(-50%, -50%)",
  24. // overflow: "scroll",
  25. bgcolor: "background.paper",
  26. pt: 5,
  27. px: 5,
  28. pb: 10,
  29. display: "block",
  30. width: { xs: "60%", sm: "60%", md: "60%" },
  31. };
  32. interface Props extends Omit<ModalProps, "children"> {
  33. // qc: QcItemWithChecks[];
  34. approvalDefaultValues: StockOutLine & PickOrderApprovalInput;
  35. disabled: boolean;
  36. }
  37. const ApprovalForm: React.FC<Props> = ({
  38. // qc,
  39. approvalDefaultValues,
  40. disabled,
  41. open,
  42. onClose,
  43. }) => {
  44. const { setIsUploading } = useUploadContext();
  45. const { t } = useTranslation("pickOrder");
  46. const formProps = useForm<PickOrderApprovalInput>({
  47. defaultValues: {
  48. allowQty: approvalDefaultValues.qty,
  49. rejectQty: 0,
  50. status: approvalDefaultValues.status,
  51. },
  52. });
  53. const errors = formProps.formState.errors;
  54. const closeHandler = useCallback<NonNullable<ModalProps["onClose"]>>(
  55. (...args) => {
  56. onClose?.(...args);
  57. // reset();
  58. },
  59. [onClose],
  60. );
  61. const onSubmit = useCallback<SubmitHandler<PickOrderApprovalInput>>(
  62. async (data, event) => {
  63. console.log(data);
  64. // checking later
  65. // post
  66. const hasError = false;
  67. if (data.allowQty + data.rejectQty != approvalDefaultValues.qty) {
  68. formProps.setError("allowQty", {
  69. message: "illegal qty",
  70. type: "required",
  71. });
  72. formProps.setError("rejectQty", {
  73. message: "illegal qty",
  74. type: "required",
  75. });
  76. }
  77. if (hasError) {
  78. return;
  79. }
  80. const postData: UpdateStockOutLine = {
  81. id: approvalDefaultValues.id,
  82. itemId: approvalDefaultValues.itemId,
  83. pickOrderLineId: approvalDefaultValues.pickOrderLineId,
  84. qty: data.allowQty, //allow qty
  85. status: data.status,
  86. // pickTime: dayjs().format(`${INPUT_DATE_FORMAT} ${OUTPUT_TIME_FORMAT}`),
  87. };
  88. console.log(postData);
  89. // return;
  90. const res = await updateStockOutLine(postData);
  91. if (res) {
  92. console.log(res);
  93. closeHandler({}, "backdropClick");
  94. } else {
  95. console.log(res);
  96. console.log("bug la");
  97. }
  98. },
  99. [t],
  100. );
  101. return (
  102. <>
  103. <FormProvider {...formProps}>
  104. <Modal open={open} onClose={closeHandler}>
  105. <Box
  106. sx={style}
  107. component="form"
  108. onSubmit={formProps.handleSubmit(onSubmit)}
  109. >
  110. <ApprovalContent
  111. approvalDefaultValues={approvalDefaultValues}
  112. disabled={disabled}
  113. />
  114. <Stack direction="row" justifyContent="flex-end" gap={1}>
  115. {!disabled ? (
  116. <Button
  117. name="submit"
  118. variant="contained"
  119. startIcon={<Check />}
  120. type="submit"
  121. >
  122. {t("submit")}
  123. </Button>
  124. ) : undefined}
  125. </Stack>
  126. </Box>
  127. </Modal>
  128. </FormProvider>
  129. </>
  130. );
  131. };
  132. export default ApprovalForm;