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.
 
 
 

174 line
6.7 KiB

  1. "use client"
  2. import { M18ImportTestingForm, testM18ImportPo, M18ImportPoForm, testM18ImportPq, testM18ImportMasterData, testM18ImportDo } from "@/app/api/settings/m18ImportTesting/actions";
  3. import { Card, CardContent, Grid, Stack, Typography } from "@mui/material";
  4. import React, { BaseSyntheticEvent, FormEvent, useCallback, useState } from "react";
  5. import { FormProvider, SubmitErrorHandler, useForm } from "react-hook-form";
  6. import { useTranslation } from "react-i18next";
  7. import M18ImportPo from "./M18ImportPo";
  8. import M18ImportPq from "./M18ImportPq";
  9. import { dateTimeStringToDayjs } from "@/app/utils/formatUtil";
  10. import M18ImportMasterData from "./M18ImportMasterData";
  11. import M18ImportDo from "./M18ImportDo";
  12. interface Props {
  13. }
  14. const M18ImportTesting: React.FC<Props> = ({
  15. }) => {
  16. const { t } = useTranslation()
  17. const [isLoading, setIsLoading] = useState(false)
  18. const [loadingType, setLoadingType] = useState<String | null>(null)
  19. const formProps = useForm<M18ImportTestingForm>()
  20. const onSubmit = useCallback(async (data: M18ImportTestingForm, event?: BaseSyntheticEvent) => {
  21. console.log(isLoading)
  22. if (isLoading) {
  23. return;
  24. }
  25. const buttonId = (event?.nativeEvent as SubmitEvent).submitter?.id
  26. console.log(data)
  27. console.log(buttonId)
  28. switch (buttonId) {
  29. case "m18ImportMasterData":
  30. const mdDateFrom = data.masterData.modifiedDateFrom
  31. const mdDateTo = data.masterData.modifiedDateTo
  32. if (!(!mdDateFrom || dateTimeStringToDayjs(mdDateFrom).isValid())) {
  33. formProps.setError("masterData.modifiedDateFrom", { message: "Invalid DateTime Format" })
  34. }
  35. if (!(!mdDateTo || dateTimeStringToDayjs(mdDateTo).isValid())) {
  36. formProps.setError("masterData.modifiedDateTo", { message: "Invalid DateTime Format" })
  37. }
  38. if (formProps.formState.errors.masterData) {
  39. return;
  40. }
  41. setIsLoading(() => true)
  42. setLoadingType(() => "Master Data")
  43. const mdResponse = await testM18ImportMasterData(data.masterData)
  44. console.log(mdResponse)
  45. if (mdResponse) {
  46. setIsLoading(() => false)
  47. }
  48. break;
  49. case "m18ImportPo":
  50. const poDateFrom = data.po.modifiedDateFrom
  51. const poDateTo = data.po.modifiedDateTo
  52. if (!(poDateFrom && dateTimeStringToDayjs(poDateFrom).isValid())) {
  53. formProps.setError("po.modifiedDateFrom", { message: "Invalid DateTime Format" })
  54. }
  55. if (!(poDateTo && dateTimeStringToDayjs(poDateTo).isValid())) {
  56. formProps.setError("po.modifiedDateTo", { message: "Invalid DateTime Format" })
  57. }
  58. if (formProps.formState.errors.po) {
  59. return;
  60. }
  61. setIsLoading(() => true)
  62. setLoadingType(() => "Purchase Order")
  63. const poResponse = await testM18ImportPo(data.po)
  64. console.log(poResponse)
  65. if (poResponse) {
  66. setIsLoading(() => false)
  67. }
  68. break;
  69. case "m18ImportDo":
  70. const doDateFrom = data.do.modifiedDateFrom
  71. const doDateTo = data.do.modifiedDateTo
  72. if (!(doDateFrom && dateTimeStringToDayjs(doDateFrom).isValid())) {
  73. formProps.setError("do.modifiedDateFrom", { message: "Invalid DateTime Format" })
  74. }
  75. if (!(doDateTo && dateTimeStringToDayjs(doDateTo).isValid())) {
  76. formProps.setError("do.modifiedDateTo", { message: "Invalid DateTime Format" })
  77. }
  78. if (formProps.formState.errors.do) {
  79. return;
  80. }
  81. setIsLoading(() => true)
  82. setLoadingType(() => "Delivery Order")
  83. const doResponse = await testM18ImportDo(data.po)
  84. console.log(doResponse)
  85. if (doResponse) {
  86. setIsLoading(() => false)
  87. }
  88. break;
  89. case "m18ImportPq":
  90. const pqDateFrom = data.pq.modifiedDateFrom
  91. const pqDateTo = data.pq.modifiedDateTo
  92. if (!(pqDateFrom || dateTimeStringToDayjs(pqDateFrom).isValid())) {
  93. formProps.setError("pq.modifiedDateFrom", { message: "Invalid DateTime Format" })
  94. }
  95. if (!(pqDateTo || dateTimeStringToDayjs(pqDateTo).isValid())) {
  96. formProps.setError("pq.modifiedDateTo", { message: "Invalid DateTime Format" })
  97. }
  98. if (formProps.formState.errors.pq) {
  99. return;
  100. }
  101. setIsLoading(() => true)
  102. setLoadingType(() => "Purchase Quotation")
  103. const pqResponse = await testM18ImportPq(data.pq)
  104. console.log(pqResponse)
  105. if (pqResponse) {
  106. setIsLoading(() => false)
  107. }
  108. break;
  109. default:
  110. break;
  111. }
  112. }, [])
  113. // const onSubmitError = useCallback<SubmitErrorHandler<M18ImportTestingForm>>(
  114. // (errors) => {
  115. // console.log(errors)
  116. // },
  117. // [],
  118. // );
  119. return (
  120. <Card>
  121. <CardContent sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
  122. <Typography variant="overline">{t("Status: ")}{isLoading ? t(`Importing ${loadingType}...`) : t("Ready to import")}</Typography>
  123. <FormProvider {...formProps}>
  124. <Stack
  125. spacing={2}
  126. component={"form"}
  127. onSubmit={formProps.handleSubmit(onSubmit)}
  128. >
  129. <Grid container columnGap={2} rowGap={2}>
  130. <Grid item xs={12}>
  131. <M18ImportMasterData />
  132. </Grid>
  133. <Grid item xs={12}>
  134. <M18ImportPo />
  135. </Grid>
  136. <Grid item xs={12}>
  137. <M18ImportDo />
  138. </Grid>
  139. <Grid item xs={12}>
  140. <M18ImportPq />
  141. </Grid>
  142. </Grid>
  143. </Stack>
  144. </FormProvider>
  145. </CardContent>
  146. </Card>
  147. )
  148. }
  149. export default M18ImportTesting;