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.

359 lines
17 KiB

  1. // material-ui
  2. import {
  3. FormControl,
  4. Grid,
  5. Typography,
  6. FormLabel,
  7. TextField,
  8. Button,
  9. Stack,
  10. Dialog, DialogTitle, DialogContent, DialogActions,
  11. } from '@mui/material';
  12. import { useFormik } from 'formik';
  13. import {isGranted} from "auth/utils";
  14. import {useState,useEffect,lazy} from "react";
  15. import * as HttpUtils from "utils/HttpUtils"
  16. import * as UrlUtils from "utils/ApiPathConst"
  17. import * as DateUtils from "utils/DateUtils"
  18. import * as FormatUtils from "utils/FormatUtils"
  19. import { useParams } from "react-router-dom";
  20. import Loadable from 'components/Loadable';
  21. const MainCard = Loadable(lazy(() => import('components/MainCard')));
  22. import * as StatusUtils from "utils/statusUtils/PublicNoteStatusUtils";
  23. import FileList from "components/FileList"
  24. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  25. const ApplicationDetailCard = ({
  26. formData,
  27. showCancelBtn,
  28. showProofBtn
  29. // setBackButtonPos
  30. }) => {
  31. const params = useParams();
  32. const [data, setData] = useState({});
  33. const [cancelPopUp, setCancelPopUp] = useState(false);
  34. const [onDownload, setOnDownload] = useState(false);
  35. useEffect(() => {
  36. if (formData) {
  37. setData(formData);
  38. }
  39. }, [formData]);
  40. const formik = useFormik({
  41. enableReinitialize: true,
  42. initialValues: data,
  43. });
  44. const DisplayField = ({ name, width, dummyUser }) => {
  45. return <>
  46. {dummyUser?
  47. <TextField
  48. fullWidth
  49. disabled
  50. size="small"
  51. onChange={formik.handleChange}
  52. id={name}
  53. name={name}
  54. value={"GLD: "+formik.values[name]}
  55. variant="outlined"
  56. sx={
  57. {
  58. "& .MuiInputBase-input.Mui-disabled": {
  59. WebkitTextFillColor: "#000000",
  60. background: "#f8f8f8",
  61. },
  62. width: width ? width : '100%'
  63. }
  64. }
  65. />
  66. :
  67. <TextField
  68. fullWidth
  69. disabled
  70. size="small"
  71. onChange={formik.handleChange}
  72. id={name}
  73. name={name}
  74. value={formik.values[name]}
  75. variant="outlined"
  76. sx={
  77. {
  78. "& .MuiInputBase-input.Mui-disabled": {
  79. WebkitTextFillColor: "#000000",
  80. background: "#f8f8f8",
  81. },
  82. width: width ? width : '100%'
  83. }
  84. }
  85. />
  86. }
  87. </>
  88. }
  89. const confirmCancel = () => {
  90. setCancelPopUp(false);
  91. HttpUtils.get({
  92. url: UrlUtils.CANCEL_PROOF + "/" + params.id,
  93. onSuccess: function () {
  94. window.location.reload(false);
  95. }
  96. });
  97. }
  98. const doCancel = () => {
  99. setCancelPopUp(true);
  100. }
  101. const genProof = () => {
  102. setOnDownload(true)
  103. HttpUtils.fileDownload({
  104. url: UrlUtils.GEN_GAZETTE_PROOF + "/" + params.id,
  105. onResponse:()=>{
  106. setOnDownload(false)
  107. },
  108. onError:()=>{
  109. setOnDownload(false)
  110. }
  111. });
  112. }
  113. return (
  114. <MainCard
  115. id={"applicationDetailsMainCard"}
  116. border={false}
  117. content={false}
  118. >
  119. <Typography variant="h4" sx={{ textAlign: "left", mb: 2, borderBottom: "1px solid black" }}>
  120. <Stack
  121. direction="row"
  122. justifyContent="space-between"
  123. alignItems="center"
  124. >
  125. Public Notice: Proofreading Reply
  126. {data.appMode != "offline"?
  127. <>
  128. <Button
  129. component="span"
  130. variant="contained"
  131. size="large"
  132. disabled={!showProofBtn||onDownload}
  133. onClick={genProof}
  134. >
  135. <Typography variant="h5">Proof Slip</Typography>
  136. </Button>
  137. {
  138. isGranted(["MAINTAIN_PROOF"]) ? <Button
  139. component="span"
  140. variant="contained"
  141. size="large"
  142. color="error"
  143. disabled={showCancelBtn}
  144. onClick={doCancel}
  145. >
  146. <Typography variant="h5">Cancel</Typography>
  147. </Button> : <></>
  148. }
  149. </>
  150. :null
  151. }
  152. </Stack>
  153. </Typography>
  154. <form>
  155. <Grid container direction="column">
  156. <Grid item xs={12} md={12} lg={12}>
  157. <Grid container direction="row" justifyContent="space-between"
  158. alignItems="center">
  159. <Grid item xs={12} md={6} lg={6} sx={{ mb: 1 }}>
  160. <Grid container alignItems={"center"}>
  161. <Grid item xs={12} md={3} lg={3}
  162. sx={{ display: 'flex', alignItems: 'center' }}>
  163. <FormLabel><Typography variant="h5">App. No.:</Typography></FormLabel>
  164. </Grid>
  165. <Grid item xs={12} md={9} lg={9}>
  166. <DisplayField name="appNo" />
  167. </Grid>
  168. </Grid>
  169. </Grid>
  170. <Grid item xs={12} md={5} lg={5} sx={{ mb: 1, ml: 1 }}>
  171. <Grid container alignItems={"left"}>
  172. <Grid item xs={12} md={3} lg={3}
  173. sx={{ display: 'flex', alignItems: 'center' }}>
  174. <FormLabel><Typography variant="h5">App. Status:</Typography></FormLabel>
  175. </Grid>
  176. <Grid item xs={12} md={9} lg={9} sx={{ display: 'flex', alignItems: 'center' }}>
  177. <FormControl variant="outlined">
  178. {StatusUtils.getStatusByText(data.appStatus)}
  179. </FormControl>
  180. </Grid>
  181. </Grid>
  182. </Grid>
  183. </Grid>
  184. <Grid container direction="row" justifyContent="space-between"
  185. alignItems="center">
  186. <Grid item xs={12} md={6} lg={6} sx={{ mb: 1 }}>
  187. <Grid container alignItems={"center"}>
  188. <Grid item xs={12} md={3} lg={3}
  189. sx={{ display: 'flex', alignItems: 'center' }}>
  190. <FormLabel><Typography variant="h5">Applicant:</Typography></FormLabel>
  191. </Grid>
  192. <Grid item xs={12} md={9} lg={9}>
  193. <FormControl variant="outlined" fullWidth disabled >
  194. {data?.orgId?
  195. <DisplayField
  196. name="applicant"
  197. dummyUser={data?.enCompanyName == "GLD" ? true : false}/>
  198. :
  199. <DisplayField name="contactPerson" />
  200. }
  201. </FormControl>
  202. </Grid>
  203. </Grid>
  204. </Grid>
  205. <Grid item xs={12} md={5} lg={5} sx={{ mb: 1, ml: 1 }}>
  206. <Grid container alignItems={"center"}>
  207. <Grid item xs={12} md={3} lg={3}
  208. sx={{ display: 'flex', alignItems: 'center' }}>
  209. <FormLabel><Typography variant="h5">Issue No:</Typography></FormLabel>
  210. </Grid>
  211. <Grid item xs={12} md={9} lg={9}>
  212. <DisplayField name="issueNoStr" />
  213. </Grid>
  214. </Grid>
  215. </Grid>
  216. </Grid>
  217. <Grid container direction="row" justifyContent="space-between"
  218. alignItems="center">
  219. <Grid item xs={12} md={6} lg={6} sx={{ mb: 1 }}>
  220. <Grid container alignItems={"center"}>
  221. <Grid item xs={12} md={3} lg={3}
  222. sx={{ display: 'flex', alignItems: 'center' }}>
  223. <FormLabel><Typography variant="h5">Contact Person:</Typography></FormLabel>
  224. </Grid>
  225. <Grid item xs={12} md={9} lg={9}>
  226. <DisplayField name="contactPerson" />
  227. </Grid>
  228. </Grid>
  229. </Grid>
  230. <Grid item xs={12} md={5} lg={5} sx={{ mb: 1, ml: 1 }}>
  231. <Grid container alignItems={"center"}>
  232. <Grid item xs={12} md={3} lg={3}
  233. sx={{ display: 'flex', alignItems: 'center' }}>
  234. <FormLabel><Typography variant="h5">Issue Date:</Typography></FormLabel>
  235. </Grid>
  236. <Grid item xs={12} md={9} lg={9}>
  237. <DisplayField name="issueDateStr" />
  238. </Grid>
  239. </Grid>
  240. </Grid>
  241. </Grid>
  242. {/* <Grid container direction="row" justifyContent="space-between"
  243. alignItems="center">
  244. <Grid item xs={12} md={6} lg={6} sx={{ mb: 1, }}>
  245. <Grid container alignItems="left">
  246. <Grid item xs={12} md={3} lg={3}
  247. sx={{ display: 'flex', alignItems: 'center' }}>
  248. <FormLabel>Remarks:</FormLabel>
  249. </Grid>
  250. <Grid item xs={12} md={9} lg={9}>
  251. <Stack direction="row">
  252. <DisplayField name="appRemarks" />
  253. </Stack>
  254. </Grid>
  255. </Grid>
  256. </Grid>
  257. </Grid> */}
  258. <Grid container direction="row" justifyContent="space-between"
  259. alignItems="center">
  260. <Grid item xs={12} md={6} lg={6} sx={{ mb: 1, }}>
  261. <Grid container alignItems={"center"}>
  262. <Grid item xs={12} md={12} lg={12} sx={{ display: 'flex', alignItems: 'center' }}>
  263. <Typography variant="h5">Print file:</Typography>
  264. </Grid>
  265. </Grid>
  266. <FileList
  267. refId={params.id}
  268. refType={"proof"}
  269. dateHideable={true}
  270. disablePagination
  271. disableSelectionOnClick
  272. disableColumnMenu
  273. disableColumnSelector
  274. hideFooter
  275. />
  276. </Grid>
  277. <Grid item xs={12} md={4} lg={4} sx={{ mb: 1, }}>
  278. <Grid container alignItems={"center"}>
  279. <Grid item xs={12} md={12} lg={12}
  280. sx={{ display: 'flex', alignItems: 'center' }}>
  281. <Typography variant="h5">Deadline for proof with revision:</Typography>
  282. </Grid>
  283. <Grid item xs={12} md={12} lg={12} sx={{ mb: 4, display: 'flex', alignItems: 'center' }}>
  284. <Typography variant="h5">Before {DateUtils.datetimeStr(data.reviseDeadline)}</Typography>
  285. </Grid>
  286. <Grid item xs={12} md={12} lg={12}
  287. sx={{ display: 'flex', alignItems: 'center' }}>
  288. <Typography variant="h5">Deadline for confirm proof and payment:</Typography>
  289. </Grid>
  290. <Grid item xs={12} md={12} lg={12} sx={{ mb: 4, display: 'flex', alignItems: 'center' }}>
  291. <Typography variant="h5">Before {DateUtils.datetimeStr(data.proofPaymentDeadline)}</Typography>
  292. </Grid>
  293. <Grid item xs={12} md={3} lg={3}
  294. sx={{ mb: 1, display: 'flex', alignItems: 'center' }}>
  295. <Typography variant="h5">Fee:</Typography>
  296. </Grid>
  297. <Grid item xs={12} md={9} lg={9} sx={{ mb: 1, display: 'flex', alignItems: 'center' }}>
  298. <Typography variant="h5" style={{ color: "blue", fontWeight: "bold", }}>{FormatUtils.currencyFormat(data.fee)}</Typography>
  299. </Grid>
  300. <Grid item xs={12} md={12} lg={12} sx={{ mb: 4, display: 'flex', alignItems: 'center' }}>
  301. {
  302. formik.values.groupType == "Private Bill"
  303. ?
  304. <Typography variant="h5">( {data.noOfPages} page x $6,552 )</Typography>
  305. :
  306. <Typography variant="h5">( {data.length} cm x {data.colCount == 2 ? "$364 Double Column" : "$182 Single Column"} )</Typography>
  307. }
  308. </Grid>
  309. </Grid>
  310. </Grid>
  311. </Grid>
  312. </Grid>
  313. </Grid>
  314. <div>
  315. <Dialog
  316. open={cancelPopUp}
  317. onClose={() => setCancelPopUp(false)}
  318. >
  319. <DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle>
  320. <DialogContent style={{ display: 'flex', }}>
  321. <Typography variant="h4" style={{ padding: '16px' }}>Are you sure you want to cancel this proof?</Typography>
  322. </DialogContent>
  323. <DialogActions>
  324. <Button onClick={() => setCancelPopUp(false)}><Typography variant="h5">Cancel</Typography></Button>
  325. <Button onClick={() => confirmCancel()}><Typography variant="h5">Confirm</Typography></Button>
  326. </DialogActions>
  327. </Dialog>
  328. </div>
  329. </form>
  330. </MainCard>
  331. );
  332. };
  333. export default ApplicationDetailCard;