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.
 
 

204 line
6.2 KiB

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