Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 

399 rindas
13 KiB

  1. import {
  2. useEffect,
  3. useState
  4. } from "react";
  5. // material-ui
  6. import {
  7. Grid,
  8. Typography,
  9. Stack,
  10. Box,
  11. Button
  12. } from '@mui/material';
  13. import Loadable from 'components/Loadable';
  14. import { lazy } from 'react';
  15. import {
  16. // useNavigate,
  17. useParams
  18. } from "react-router-dom";
  19. import axios from "axios";
  20. import * as HttpUtils from "utils/HttpUtils";
  21. import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png'
  22. const ApplicationDetailCard = Loadable(lazy(() => import('./ApplicationDetailCard')));
  23. const GazetteDetailCard = Loadable(lazy(() => import('./GazetteDetailCard')));
  24. const ClientDetailCard = Loadable(lazy(() => import('./ClientDetailCard')));
  25. const TabTableDetail = Loadable(lazy(() => import('./tabTableDetail/TabTable')));
  26. import {
  27. GET_PUBLIC_NOTICE_APPLY_DETAIL,
  28. UPDATE_PUBLIC_NOTICE_APPLY_DETAIL,
  29. SET_PUBLIC_NOTICE_GROUP_DETAIL,
  30. SET_PUBLIC_NOTICE_STATUS_NOT_ACCEPT,
  31. SET_PUBLIC_NOTICE_STATUS_COMPLATED,
  32. SET_PUBLIC_NOTICE_STATUS_WITHDRAW,
  33. SET_PUBLIC_NOTICE_STATUS_RESUBMIT,
  34. SET_PUBLIC_NOTICE_STATUS_REVIEWED
  35. } from "utils/ApiPathConst";
  36. const StatusChangeDialog = Loadable(lazy(() => import('./StatusChangeDialog')));
  37. import * as DateUtils from "utils/DateUtils";
  38. import { notifyActionSuccess, notifySaveSuccess } from "utils/CommonFunction";
  39. import KeyboardBackspaceOutlinedIcon from '@mui/icons-material/KeyboardBackspaceOutlined';
  40. import { useNavigate } from "react-router-dom";
  41. // ==============================|| Body - DEFAULT ||============================== //
  42. const PublicNoticeDetail_GLD = () => {
  43. const params = useParams();
  44. const navigate = useNavigate()
  45. const [applicationDetailData, setApplicationDetailData] = useState({});
  46. const [proofList, setProofList] = useState([]);
  47. // const [refApplicationDetailData, setRefApplicationDetailData] = React.useState({});
  48. const [isLoading, setLoading] = useState(false);
  49. const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent')));
  50. const [getUploadStatus, setUploadStatus] = useState(false);
  51. //pageTitle
  52. const [appNo, setAapNo] = useState("");
  53. const [gazetteIssue, setGazetteIssue] = useState("");
  54. const [issueDate, setIssueDate] = useState("");
  55. const [issueNum, setIssueNum] = useState("");
  56. const [groupNo, setGroupNo] = useState("");
  57. // const [groupTitle, setGroupTitle] = useState("");
  58. //statusWindow
  59. const [open, setOpen] = useState(false);
  60. const [getStatus, setStatus] = useState("");
  61. const [statusWindowAccepted, setStatusWindowAccepted] = useState(false);
  62. const [selectedGazetteGroup, setSelectedGazetteGroup] = useState({});
  63. const [selectedGazetteGroupInputType, setSelectedGazetteGroupInputType] = useState("");
  64. const [getReason, setReason] = useState({});
  65. //editMode
  66. const [updateApplicationObject, setUpdateApplicationObject] = useState({});
  67. const [editMode, isEditMode] = useState(false);
  68. const [isSave, setiIsSave] = useState(false);
  69. const BackgroundHead = {
  70. backgroundImage: `url(${titleBackgroundImg})`,
  71. width: '100%',
  72. height: '100%',
  73. backgroundSize: 'contain',
  74. backgroundRepeat: 'no-repeat',
  75. backgroundColor: '#0C489E',
  76. backgroundPosition: 'right'
  77. }
  78. const title = groupNo != null ? ("Application / " + appNo + ", " + gazetteIssue + ", " + issueNum + " , " + groupNo) : ("Application / " + appNo + ", " + gazetteIssue + ", " + issueNum)
  79. useEffect(() => {
  80. loadApplicationDetail();
  81. }, []);
  82. // useEffect(() => {
  83. // if (reload){
  84. // loadApplicationDetail()
  85. // }
  86. // }, [reload]);
  87. useEffect(() => {
  88. if (editMode && isSave) {
  89. onUpdateClick(updateApplicationObject)
  90. }
  91. }, [updateApplicationObject]);
  92. const loadApplicationDetail = () => {
  93. if (params.id > 0) {
  94. axios.get(`${GET_PUBLIC_NOTICE_APPLY_DETAIL}/${params.id}`)
  95. .then((response) => {
  96. if (response.status === 200) {
  97. setApplicationDetailData(response.data);
  98. const gazetteIssueDetail = response.data.gazetteIssueDetail;
  99. setAapNo(response.data.data.appNo);
  100. setGazetteIssue(gazetteIssueDetail.year + " Vol " + gazetteIssueDetail.volume);
  101. setIssueNum(" No. " + gazetteIssueDetail.issueNo);
  102. setIssueDate(DateUtils.dateFormat(gazetteIssueDetail.issueDate, "D MMM YYYY (ddd)"));
  103. setGroupNo(response.data.data.groupNo);
  104. setProofList(response.data.proofList);
  105. setLoading(false);
  106. }
  107. })
  108. .catch(error => {
  109. console.log(error);
  110. return false;
  111. });
  112. }
  113. }
  114. const onUpdateClick = (updateApplicationObject) => {
  115. const data = updateApplicationObject.objectData
  116. if (params.id > 0) {
  117. setLoading(true);
  118. axios.post(`${UPDATE_PUBLIC_NOTICE_APPLY_DETAIL}/${params.id}`,
  119. {
  120. contactPerson: data.contactPerson,
  121. contactFaxNo: data.contactFaxNo,
  122. contactTelNo: data.contactTelNo,
  123. }
  124. )
  125. .then((response) => {
  126. if (response.status === 200) {
  127. location.reload();
  128. }
  129. })
  130. .catch(error => {
  131. console.log(error);
  132. return false;
  133. });
  134. }
  135. };
  136. useEffect(() => {
  137. // console.log(getStatus)
  138. if (getStatus !== "") {
  139. setOpen(true)
  140. }
  141. }, [getStatus]);
  142. const handleClose = () => {
  143. handleReset()
  144. setOpen(false);
  145. setStatus("")
  146. setStatusWindowAccepted(false)
  147. };
  148. const handleReset = () => {
  149. setSelectedGazetteGroupInputType("")
  150. setSelectedGazetteGroup({});
  151. setReason({});
  152. };
  153. useEffect(() => {
  154. if (statusWindowAccepted) {
  155. if (getStatus == "genGazetteCode") {
  156. onAcceptedClick()
  157. } else if (getStatus == "complete") {
  158. onComplatedClick()
  159. } else if (getStatus == "withdraw") {
  160. onWithdrawnClick()
  161. } else if (getStatus == "notAccepted") {
  162. onNotAcceptClick(getReason);
  163. } else if (getStatus == "resubmit") {
  164. onReSubmitClick();
  165. }
  166. }
  167. }, [statusWindowAccepted]);
  168. const onAcceptedClick = () => {
  169. if (params.id > 0) {
  170. axios.post(`${SET_PUBLIC_NOTICE_GROUP_DETAIL}/${params.id}`,
  171. {
  172. "groupTitle": selectedGazetteGroup.title,
  173. "groupNo": selectedGazetteGroup.type,
  174. }
  175. )
  176. .then((response) => {
  177. if (response.status === 204) {
  178. setOpen(false);
  179. handleClose();
  180. // location.reload();
  181. loadApplicationDetail()
  182. notifyActionSuccess("Gen Gazette Code Success!")
  183. }
  184. })
  185. .catch(error => {
  186. console.log(error);
  187. return false;
  188. });
  189. }
  190. };
  191. const onNotAcceptClick = (reason) => {
  192. if (params.id <= 0) return;
  193. HttpUtils.post({
  194. url: `${SET_PUBLIC_NOTICE_STATUS_NOT_ACCEPT}/${params.id}`,
  195. params: reason,
  196. onSuccess: function () {
  197. setOpen(false);
  198. handleClose();
  199. // location.reload();
  200. loadApplicationDetail()
  201. notifySaveSuccess()
  202. }
  203. });
  204. }
  205. const onComplatedClick = () => {
  206. if (params.id > 0) {
  207. axios.get(`${SET_PUBLIC_NOTICE_STATUS_COMPLATED}/${params.id}`)
  208. .then((response) => {
  209. if (response.status === 204) {
  210. setOpen(false);
  211. handleClose();
  212. // location.reload();
  213. loadApplicationDetail()
  214. notifySaveSuccess()
  215. }
  216. })
  217. .catch(error => {
  218. console.log(error);
  219. return false;
  220. });
  221. }
  222. };
  223. const onWithdrawnClick = () => {
  224. if (params.id > 0) {
  225. axios.get(`${SET_PUBLIC_NOTICE_STATUS_WITHDRAW}/${params.id}`)
  226. .then((response) => {
  227. if (response.status === 204) {
  228. setOpen(false);
  229. handleClose();
  230. loadApplicationDetail()
  231. notifyActionSuccess("Withdrawn Success!")
  232. }
  233. })
  234. .catch(error => {
  235. console.log(error);
  236. return false;
  237. });
  238. }
  239. };
  240. const onReSubmitClick = () => {
  241. if (params.id > 0) {
  242. axios.get(`${SET_PUBLIC_NOTICE_STATUS_RESUBMIT}/${params.id}`)
  243. .then((response) => {
  244. if (response.status === 204) {
  245. setOpen(false);
  246. handleClose();
  247. // location.reload();
  248. loadApplicationDetail()
  249. notifySaveSuccess()
  250. }
  251. })
  252. .catch(error => {
  253. console.log(error);
  254. return false;
  255. });
  256. }
  257. };
  258. useEffect(() => {
  259. const status = applicationDetailData.data != undefined ? applicationDetailData.data.status : ""
  260. if (status === "submitted" && params.id > 0 && getUploadStatus) {
  261. axios.get(`${SET_PUBLIC_NOTICE_STATUS_REVIEWED}/${params.id}`)
  262. .then((response) => {
  263. if (response.status === 204) {
  264. setUploadStatus(false);
  265. location.reload();
  266. }
  267. })
  268. .catch(error => {
  269. console.log(error);
  270. return false;
  271. });
  272. } else {
  273. setUploadStatus(false);
  274. }
  275. }, [getUploadStatus]);
  276. return (
  277. <Grid container sx={{ maxHeight: '500vh', backgroundColor: 'backgroundColor.default' }} direction="column">
  278. <StatusChangeDialog open={open}
  279. handleClose={handleClose}
  280. setReason={setReason}
  281. setStatusWindowAccepted={setStatusWindowAccepted}
  282. getStatus={getStatus}
  283. issueDate={issueDate}
  284. issueNum={issueNum}
  285. gazetteIssue={gazetteIssue}
  286. //combo value
  287. selectedGazetteGroup={selectedGazetteGroup}
  288. setSelectedGazetteGroup={setSelectedGazetteGroup}
  289. selectedGazetteGroupInputType={selectedGazetteGroupInputType}
  290. setSelectedGazetteGroupInputType={setSelectedGazetteGroupInputType}
  291. />
  292. <Grid item xs={12}>
  293. <div style={BackgroundHead}>
  294. <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center">
  295. <Typography ml={15} color='#FFF' variant="h4">Application</Typography>
  296. </Stack>
  297. </div>
  298. </Grid>
  299. <Grid item xs={12}>
  300. <Button sx={{ml:3.5, mt:2}} style={{ border: '2px solid' }} variant="outlined" onClick={()=>{navigate("/application/search")}}>
  301. <KeyboardBackspaceOutlinedIcon/>
  302. <Typography variant="h4">Back</Typography>
  303. </Button>
  304. </Grid>
  305. <Grid item xs={12} >
  306. <Stack direction="row" height='20px' justifyContent="flex-start" alignItems="center">
  307. <Typography ml={4} mt={3} variant="h4">{title}</Typography>
  308. </Stack>
  309. </Grid>
  310. <Grid item xs={12} >
  311. <Grid container direction="row">
  312. <Grid item xs={12} md={10} lg={10} xl={10}>
  313. <Grid container direction="column">
  314. <Grid item xs={12} md={10} lg={10} xl={10}>
  315. <Box xs={12} ml={4} mt={3} sx={{ p: 2, borderRadius: '10px', backgroundColor: '#ffffff' }}>
  316. {isLoading && editMode ?
  317. <LoadingComponent /> :
  318. <ApplicationDetailCard
  319. applicationDetailData={applicationDetailData}
  320. setStatus={setStatus}
  321. // setReload = {setReload}
  322. setUploadStatus={setUploadStatus}
  323. setUpdateApplicationObject={setUpdateApplicationObject}
  324. isEditMode={isEditMode}
  325. setiIsSave={setiIsSave}
  326. // isNewRecord={isNewRecord}
  327. />
  328. }
  329. </Box>
  330. </Grid>
  331. <Grid item xs={12} md={10} lg={10} xl={10}>
  332. <Box xs={12} ml={4} mt={3} sx={{ p: 2, borderRadius: '10px', backgroundColor: '#ffffff' }}>
  333. <GazetteDetailCard
  334. // updateUserObject={updateUserObject}
  335. applicationDetailData={applicationDetailData}
  336. setStatus={setStatus}
  337. // isCollectData={isCollectData}
  338. // isNewRecord={isNewRecord}
  339. />
  340. </Box>
  341. </Grid>
  342. <Grid item xs={12} md={10} lg={10} xl={10}>
  343. <Box xs={12} ml={4} mt={3} sx={{ p: 2, borderRadius: '10px', backgroundColor: '#ffffff' }}>
  344. <TabTableDetail
  345. applicationDetailData={applicationDetailData}
  346. proofList={proofList}
  347. />
  348. </Box>
  349. <br/>
  350. </Grid>
  351. </Grid>
  352. </Grid>
  353. <Grid item xs={12} md={2} lg={2} xl={2}>
  354. <Grid container>
  355. <Grid item xs={12} md={12}>
  356. <Box xs={12} md={12} ml={3} mt={3} mr={1} height='800px' sx={{ p: 2, borderRadius: '10px', backgroundColor: '#ffffff' }}>
  357. <ClientDetailCard
  358. // updateUserObject={updateUserObject}
  359. applicationDetailData={applicationDetailData}
  360. // isCollectData={isCollectData}
  361. // isNewRecord={isNewRecord}
  362. />
  363. </Box>
  364. </Grid>
  365. </Grid>
  366. </Grid>
  367. </Grid>
  368. </Grid>
  369. </Grid>
  370. );
  371. };
  372. export default PublicNoticeDetail_GLD;