選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

568 行
25 KiB

  1. // material-ui
  2. import {
  3. Button,
  4. Grid, TextField,
  5. Autocomplete,
  6. Typography
  7. } from '@mui/material';
  8. import MainCard from "components/MainCard";
  9. import { useForm } from "react-hook-form";
  10. import * as React from "react";
  11. // import * as DateUtils from "utils/DateUtils";
  12. import {PNSPS_BUTTON_THEME} from "../../themes/buttonConst";
  13. import {ThemeProvider} from "@emotion/react";
  14. import * as ComboData from "utils/ComboData";
  15. import * as DateUtils from "utils/DateUtils";
  16. import Loadable from 'components/Loadable';
  17. const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent')));
  18. import { makeStyles } from '@mui/styles';
  19. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  20. const useStyles = makeStyles(() => ({
  21. root: {
  22. position: "relative"
  23. },
  24. display: {
  25. position: "absolute",
  26. top: 2,
  27. left: 12,
  28. bottom: 2,
  29. background: "white",
  30. pointerEvents: "none",
  31. right: 50,
  32. display: "flex",
  33. alignItems: "center",
  34. width:"70%"
  35. },
  36. }));
  37. const SearchPublicNoticeForm = ({ applySearch, generateReport, searchCriteria, onLoad }) => {
  38. const [sysTxnMinDate, setSysTxnMinDate] = React.useState(searchCriteria.dateFrom);
  39. const [sysTxnMaxDate, setsysTxnMaxDate] = React.useState(searchCriteria.dateTo);
  40. const [txnMinDate, setTxnMinDate] = React.useState(searchCriteria.dateFrom);
  41. const [txnMaxDate, setTxnMaxDate] = React.useState(searchCriteria.dateTo);
  42. const [collMinDate, setCollMinDate] = React.useState(searchCriteria.dateFrom);
  43. const [collMaxDate, setCollMaxDate] = React.useState(searchCriteria.dateTo);
  44. const [sysTxnFromDateValue, setSysTxnFromDateValue] = React.useState("dd / mm / yyyy");
  45. const [sysTxnToDateValue, setSysTxnToDateValue] = React.useState("dd / mm / yyyy");
  46. const [txnFromDateValue, setTxnFromDateValue] = React.useState("dd / mm / yyyy");
  47. const [txnToDateValue, setTxnToDateValue] = React.useState("dd / mm / yyyy");
  48. const [collFromDateValue, setCollFromDateValue] = React.useState("dd / mm / yyyy");
  49. const [collToDateValue, setCollToDateValue] = React.useState("dd / mm / yyyy");
  50. const [status, setStatus] = React.useState(ComboData.paymentStatus[0]);
  51. const [method, setMethod] = React.useState(ComboData.paymentMethod[0]);
  52. const marginBottom = 2.5;
  53. const { register, handleSubmit } = useForm()
  54. React.useEffect(() => {
  55. setSysTxnFromDateValue(sysTxnMinDate);
  56. }, [sysTxnMinDate]);
  57. React.useEffect(() => {
  58. setSysTxnToDateValue(sysTxnMaxDate);
  59. }, [sysTxnMaxDate]);
  60. React.useEffect(() => {
  61. setTxnFromDateValue(txnMinDate);
  62. }, [txnMinDate]);
  63. React.useEffect(() => {
  64. setTxnToDateValue(txnMaxDate);
  65. }, [txnMaxDate]);
  66. React.useEffect(() => {
  67. setCollFromDateValue(collMinDate);
  68. }, [collMinDate]);
  69. React.useEffect(() => {
  70. setCollToDateValue(collMaxDate);
  71. }, [collMaxDate]);
  72. function SysTxnFormDateInputComponent({ inputRef, ...props }) {
  73. const classes = useStyles();
  74. return (
  75. <>
  76. <div className={classes.display}>
  77. {DateUtils.dateStr(sysTxnFromDateValue) == "Invalid Date" ?
  78. sysTxnFromDateValue
  79. :
  80. DateUtils.dateStr(sysTxnFromDateValue)}
  81. </div>
  82. <input
  83. className={classes.input}
  84. ref={inputRef}
  85. {...props}
  86. // onChange={handleChange}
  87. value={sysTxnFromDateValue}
  88. max={sysTxnMaxDate}
  89. />
  90. </>
  91. );
  92. }
  93. function SysTxnToDateInputComponent({ inputRef, ...props }) {
  94. const classes = useStyles();
  95. return (
  96. <>
  97. <div className={classes.display}>
  98. {DateUtils.dateStr(sysTxnToDateValue) == "Invalid Date" ?
  99. sysTxnToDateValue
  100. :
  101. DateUtils.dateStr(sysTxnToDateValue)}
  102. </div>
  103. <input
  104. // className={classes.input}
  105. ref={inputRef}
  106. {...props}
  107. // onChange={handleChange}
  108. value={sysTxnToDateValue}
  109. min={sysTxnMinDate}
  110. />
  111. </>
  112. );
  113. }
  114. function TxnFormDateInputComponent({ inputRef, ...props }) {
  115. const classes = useStyles();
  116. return (
  117. <>
  118. <div className={classes.display}>
  119. {DateUtils.dateStr(txnFromDateValue) == "Invalid Date" ?
  120. txnFromDateValue
  121. :
  122. DateUtils.dateStr(txnFromDateValue)}
  123. </div>
  124. <input
  125. className={classes.input}
  126. ref={inputRef}
  127. {...props}
  128. // onChange={handleChange}
  129. value={txnFromDateValue}
  130. max={txnMaxDate}
  131. />
  132. </>
  133. );
  134. }
  135. function TxnToDateInputComponent({ inputRef, ...props }) {
  136. const classes = useStyles();
  137. return (
  138. <>
  139. <div className={classes.display}>
  140. {DateUtils.dateStr(txnToDateValue) == "Invalid Date" ?
  141. txnToDateValue
  142. :
  143. DateUtils.dateStr(txnToDateValue)}
  144. </div>
  145. <input
  146. // className={classes.input}
  147. ref={inputRef}
  148. {...props}
  149. // onChange={handleChange}
  150. value={txnToDateValue}
  151. min={txnMinDate}
  152. />
  153. </>
  154. );
  155. }
  156. function CollFormDateInputComponent({ inputRef, ...props }) {
  157. const classes = useStyles();
  158. return (
  159. <>
  160. <div className={classes.display}>
  161. {DateUtils.dateStr(collFromDateValue) == "Invalid Date" ?
  162. collFromDateValue
  163. :
  164. DateUtils.dateStr(collFromDateValue)}
  165. </div>
  166. <input
  167. className={classes.input}
  168. ref={inputRef}
  169. {...props}
  170. // onChange={handleChange}
  171. value={collFromDateValue}
  172. max={collMaxDate}
  173. />
  174. </>
  175. );
  176. }
  177. function CollToDateInputComponent({ inputRef, ...props }) {
  178. const classes = useStyles();
  179. return (
  180. <>
  181. <div className={classes.display}>
  182. {DateUtils.dateStr(collToDateValue) == "Invalid Date" ?
  183. collToDateValue
  184. :
  185. DateUtils.dateStr(collToDateValue)}
  186. </div>
  187. <input
  188. // className={classes.input}
  189. ref={inputRef}
  190. {...props}
  191. // onChange={handleChange}
  192. value={collToDateValue}
  193. min={collMinDate}
  194. />
  195. </>
  196. );
  197. }
  198. const onSubmit = () => {
  199. let sentSysTxnDateFrom = "";
  200. let sentSysTxnDateTo = "";
  201. let sentTxnDateFrom = "";
  202. let sentTxnDateTo = "";
  203. let sentCollDateFrom = "";
  204. let sentCollDateTo = "";
  205. // Invalid Date
  206. if (sysTxnFromDateValue != "dd / mm / yyyy" && sysTxnToDateValue != "dd / mm / yyyy" ) {
  207. sentSysTxnDateFrom = DateUtils.dateValue(sysTxnFromDateValue)!="Invalid Date"?DateUtils.dateValue(sysTxnFromDateValue):""
  208. sentSysTxnDateTo = DateUtils.dateValue(sysTxnToDateValue)!="Invalid Date"?DateUtils.dateValue(sysTxnToDateValue):""
  209. }
  210. if (txnFromDateValue != "dd / mm / yyyy" && txnToDateValue != "dd / mm / yyyy") {
  211. sentTxnDateFrom = DateUtils.dateValue(txnFromDateValue)!="Invalid Date"?DateUtils.dateValue(txnFromDateValue):""
  212. sentTxnDateTo = DateUtils.dateValue(txnToDateValue)!="Invalid Date"?DateUtils.dateValue(txnToDateValue):""
  213. }
  214. if (collFromDateValue != "dd / mm / yyyy" && collToDateValue != "dd / mm / yyyy") {
  215. sentCollDateFrom = DateUtils.dateValue(collFromDateValue)!="Invalid Date"?DateUtils.dateValue(collFromDateValue):""
  216. sentCollDateTo = DateUtils.dateValue(collToDateValue)!="Invalid Date"?DateUtils.dateValue(collToDateValue):""
  217. }
  218. const temp = {
  219. PaymentMethod:(method?.type && method?.type != 'Please Select') ? method?.type : "",
  220. PaymentStatus : (status?.type && status?.type != 'all') ? status?.type : "",
  221. SysTxnDateFrom: sentSysTxnDateFrom,
  222. SysTxnDateTo: sentSysTxnDateTo,
  223. TxnDateFrom: sentTxnDateFrom,
  224. TxnDateTo: sentTxnDateTo,
  225. CollDateFrom: sentCollDateFrom,
  226. CollDateTo: sentCollDateTo,
  227. };
  228. console.log(temp)
  229. applySearch(temp);
  230. };
  231. const generateFileHandler = (fileFormart) => () => {
  232. let sentSysTxnDateFrom = "";
  233. let sentSysTxnDateTo = "";
  234. let sentTxnDateFrom = "";
  235. let sentTxnDateTo = "";
  236. let sentCollDateFrom = "";
  237. let sentCollDateTo = "";
  238. if (sysTxnFromDateValue != "dd / mm / yyyy" && sysTxnToDateValue != "dd / mm / yyyy" ) {
  239. sentSysTxnDateFrom = DateUtils.dateValue(sysTxnFromDateValue)!="Invalid Date"?DateUtils.dateValue(sysTxnFromDateValue):""
  240. sentSysTxnDateTo = DateUtils.dateValue(sysTxnToDateValue)!="Invalid Date"?DateUtils.dateValue(sysTxnToDateValue):""
  241. }
  242. if (txnFromDateValue != "dd / mm / yyyy" && txnToDateValue != "dd / mm / yyyy") {
  243. sentTxnDateFrom = DateUtils.dateValue(txnFromDateValue)!="Invalid Date"?DateUtils.dateValue(txnFromDateValue):""
  244. sentTxnDateTo = DateUtils.dateValue(txnToDateValue)!="Invalid Date"?DateUtils.dateValue(txnToDateValue):""
  245. }
  246. if (collFromDateValue != "dd / mm / yyyy" && collToDateValue != "dd / mm / yyyy") {
  247. sentCollDateFrom = DateUtils.dateValue(collFromDateValue)!="Invalid Date"?DateUtils.dateValue(collFromDateValue):""
  248. sentCollDateTo = DateUtils.dateValue(collToDateValue)!="Invalid Date"?DateUtils.dateValue(collToDateValue):""
  249. }
  250. const temp = {
  251. PaymentMethod:(method?.type && method?.type != 'Please Select') ? method?.type : "",
  252. PaymentStatus : (status?.type && status?.type != 'all') ? status?.type : "",
  253. SysTxnDateFrom: sentSysTxnDateFrom,
  254. SysTxnDateTo: sentSysTxnDateTo,
  255. TxnDateFrom: sentTxnDateFrom,
  256. TxnDateTo: sentTxnDateTo,
  257. CollDateFrom: sentCollDateFrom,
  258. CollDateTo: sentCollDateTo,
  259. ReportFormat:fileFormart
  260. };
  261. generateReport(temp);
  262. }
  263. return (
  264. <MainCard xs={12} md={12} lg={12}
  265. border={false}
  266. content={false}
  267. >
  268. <form onSubmit={handleSubmit(onSubmit)} >
  269. <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1}} width="98%">
  270. {/*row 1*/}
  271. <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:2.5}}>
  272. <Typography variant="h5" >
  273. Submit Form
  274. </Typography>
  275. </Grid>
  276. {/*row 2*/}
  277. <Grid item xs={12} s={12} md={12} lg={12} sx={{ ml: 3, mr: 3, mb: marginBottom }}>
  278. <Grid container spacing={3}>
  279. <Grid item xs={9} s={9} md={3} lg={3} >
  280. <Autocomplete
  281. {...register("paymentMethod")}
  282. disablePortal={false}
  283. size="small"
  284. id="paymentMethod"
  285. filterOptions={(options) => options}
  286. options={ComboData.paymentMethod}
  287. value={method}
  288. getOptionLabel={(option) => option.label}
  289. inputValue={method?.label ? method?.label : ""}
  290. onChange={(event, newValue) => {
  291. if (newValue !== null) {
  292. setMethod(newValue);
  293. }
  294. }}
  295. renderInput={(params) => (
  296. <TextField {...params}
  297. label="Payment Method"
  298. />
  299. )}
  300. InputLabelProps={{
  301. shrink: true
  302. }}
  303. />
  304. </Grid>
  305. <Grid item xs={9} s={9} md={3} lg={3} >
  306. <Autocomplete
  307. {...register("status")}
  308. disablePortal={false}
  309. size="small"
  310. id="status"
  311. filterOptions={(options) => options}
  312. options={ComboData.paymentStatus}
  313. value={status}
  314. getOptionLabel={(option) => option.label}
  315. inputValue={status?.label ? status?.label : ""}
  316. onChange={(event, newValue) => {
  317. if (newValue !== null) {
  318. setStatus(newValue);
  319. }
  320. }}
  321. renderInput={(params) => (
  322. <TextField {...params}
  323. label="Payment Status"
  324. />
  325. )}
  326. InputLabelProps={{
  327. shrink: true
  328. }}
  329. />
  330. </Grid>
  331. </Grid>
  332. </Grid>
  333. <Grid container display="flex" alignItems={"center"}>
  334. <Grid item xs={12} s={12} md={12} lg={12} sx={{ml:3, mr:3, mb:marginBottom}}>
  335. <Grid container spacing={1}>
  336. <Grid item xs={4}>
  337. <TextField
  338. fullWidth
  339. {...register("sysTxnDateFrom")}
  340. id="sysTxnDateFrom"
  341. type="date"
  342. label="PNSPS Transaction Date (From)"
  343. ////defaultValue={searchCriteria.dateFrom}
  344. InputProps={{
  345. inputComponent: SysTxnFormDateInputComponent,
  346. }}
  347. onChange={(newValue) => {
  348. setSysTxnMinDate(newValue.target.value);
  349. }}
  350. InputLabelProps={{
  351. shrink: true
  352. }}
  353. sx={{ "& .MuiInputBase-input": {display:"block"} }}
  354. />
  355. </Grid>
  356. <Grid item xs={4}>
  357. <TextField
  358. fullWidth
  359. InputLabelProps={{
  360. shrink: true
  361. }}
  362. {...register("sysTxnDateTo")}
  363. InputProps={{
  364. inputComponent: SysTxnToDateInputComponent,
  365. }}
  366. onChange={(newValue) => {
  367. setsysTxnMaxDate(newValue.target.value);
  368. }}
  369. id="sysTxnDateTo"
  370. type="date"
  371. label="PNSPS Transaction Date (To)"
  372. ////defaultValue={searchCriteria.dateTo}
  373. sx={{ "& .MuiInputBase-input": {display:"block"} }}
  374. />
  375. </Grid>
  376. </Grid>
  377. </Grid>
  378. </Grid>
  379. {/*row 3*/}
  380. <Grid container display="flex" alignItems={"center"}>
  381. <Grid item xs={12} s={12} md={12} lg={12} sx={{ml:3, mr:3, mb:marginBottom}}>
  382. <Grid container spacing={1}>
  383. <Grid item xs={4}>
  384. <TextField
  385. fullWidth
  386. {...register("txnDateFrom")}
  387. id="txnDateFrom"
  388. type="date"
  389. label="FI Transaction Date (From)"
  390. //defaultValue={searchCriteria.dateFrom}
  391. InputProps={{
  392. inputComponent: TxnFormDateInputComponent,
  393. }}
  394. onChange={(newValue) => {
  395. setTxnMinDate(newValue.target.value);
  396. }}
  397. InputLabelProps={{
  398. shrink: true
  399. }}
  400. sx={{ "& .MuiInputBase-input": {display:"block"} }}
  401. />
  402. </Grid>
  403. <Grid item xs={4}>
  404. <TextField
  405. fullWidth
  406. InputLabelProps={{
  407. shrink: true
  408. }}
  409. {...register("txnDateTo")}
  410. InputProps={{
  411. inputComponent: TxnToDateInputComponent,
  412. }}
  413. onChange={(newValue) => {
  414. setTxnMaxDate(newValue.target.value);
  415. }}
  416. id="txnDateTo"
  417. type="date"
  418. label="FI Transaction Date (To)"
  419. //defaultValue={searchCriteria.dateTo}
  420. sx={{ "& .MuiInputBase-input": {display:"block"} }}
  421. />
  422. </Grid>
  423. </Grid>
  424. </Grid>
  425. </Grid>
  426. {/*row 5*/}
  427. <Grid container display="flex" alignItems={"center"}>
  428. <Grid item xs={12} s={12} md={12} lg={12} sx={{ml:3, mr:3, mb:marginBottom}}>
  429. <Grid container spacing={1}>
  430. <Grid item xs={4}>
  431. <TextField
  432. fullWidth
  433. {...register("collDateFrom")}
  434. id="collDateFrom"
  435. type="date"
  436. label="Bank Credit Date (From)"
  437. //defaultValue={searchCriteria.dateFrom}
  438. InputProps={{
  439. inputComponent: CollFormDateInputComponent,
  440. }}
  441. onChange={(newValue) => {
  442. setCollMinDate(newValue.target.value);
  443. }}
  444. InputLabelProps={{
  445. shrink: true
  446. }}
  447. sx={{ "& .MuiInputBase-input": {display:"block"} }}
  448. />
  449. </Grid>
  450. <Grid item xs={4}>
  451. <TextField
  452. fullWidth
  453. InputLabelProps={{
  454. shrink: true
  455. }}
  456. {...register("collDateTo")}
  457. InputProps={{
  458. inputComponent: CollToDateInputComponent,
  459. }}
  460. onChange={(newValue) => {
  461. setCollMaxDate(newValue.target.value);
  462. }}
  463. id="collDateTo"
  464. type="date"
  465. label="Bank Credit Date (To)"
  466. //defaultValue={searchCriteria.dateTo}
  467. sx={{ "& .MuiInputBase-input": {display:"block"} }}
  468. />
  469. </Grid>
  470. </Grid>
  471. </Grid>
  472. </Grid>
  473. <Grid container justifyContent="flex-end" direction="row" alignItems="center" spacing={3}>
  474. {onLoad?
  475. <Grid item sx={{ ml: 3, mb: 3, mr:6 }} >
  476. <LoadingComponent disableText={true} alignItems="flex-start"/>
  477. </Grid>
  478. :
  479. <ThemeProvider theme={PNSPS_BUTTON_THEME}>
  480. <Grid item sx={{ ml: 3, mb: 3, }} >
  481. <Button
  482. variant="contained"
  483. type="submit"
  484. >
  485. View
  486. </Button>
  487. </Grid>
  488. <Grid item sx={{ ml: 3, mb: 3, }} >
  489. <Grid container spacing={3}>
  490. <Grid item sx={{ ml: 3, mr:3 }} >
  491. <Button
  492. variant="contained"
  493. onClick={generateFileHandler("csv")}
  494. >
  495. Generate CSV
  496. </Button>
  497. </Grid>
  498. <Grid item sx={{ ml: 3, }} >
  499. <Button
  500. variant="contained"
  501. onClick={generateFileHandler("pdf")}
  502. >
  503. Generate PDF
  504. </Button>
  505. </Grid>
  506. </Grid>
  507. </Grid>
  508. {/* <Grid item sx={{ ml: 3, mr: 3, mb: 3, }} >
  509. {onDownload?
  510. <LoadingComponent disableText={true} alignItems="flex-start"/>
  511. :
  512. <Button
  513. variant="contained"
  514. onClick={generatePDFHandler}
  515. >
  516. Generate PDF
  517. </Button>
  518. }
  519. </Grid> */}
  520. </ThemeProvider>
  521. }
  522. </Grid>
  523. </Grid>
  524. </form>
  525. </MainCard>
  526. );
  527. };
  528. export default SearchPublicNoticeForm;