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.
 
 

237 regels
10 KiB

  1. // material-ui
  2. import {
  3. Button,
  4. Grid,
  5. TextField,
  6. Autocomplete,
  7. Typography
  8. } from '@mui/material';
  9. import MainCard from "components/MainCard";
  10. import { useForm } from "react-hook-form";
  11. import * as React from "react";
  12. // import * as DateUtils from "utils/DateUtils";
  13. import {PNSPS_BUTTON_THEME} from "../../themes/buttonConst";
  14. import {ThemeProvider} from "@emotion/react";
  15. // import * as ComboData from "utils/ComboData";
  16. import * as DateUtils from "utils/DateUtils";
  17. import * as ComboData from "utils/ComboData";
  18. import {DatePicker} from "@mui/x-date-pickers/DatePicker";
  19. import dayjs from "dayjs";
  20. import {DemoItem} from "@mui/x-date-pickers/internals/demo";
  21. import {LocalizationProvider} from "@mui/x-date-pickers/LocalizationProvider";
  22. import {AdapterDayjs} from "@mui/x-date-pickers/AdapterDayjs";
  23. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  24. const SearchPublicNoticeForm = ({ applySearch, generateXML, searchCriteria, onGridReady,selectedIds=[] }) => {
  25. // const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom);
  26. const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom);
  27. const [maxDate,setMaxDate] = React.useState(searchCriteria.dateFrom);
  28. const [fromDateValue, setFromDateValue] = React.useState("dd / mm / yyyy");
  29. const [toDateValue, setToDateValue] = React.useState("dd / mm / yyyy");
  30. const [payMethod, setPayMethod] = React.useState(ComboData.payMethod[0]);
  31. // const [status, setStatus] = React.useState(ComboData.paymentStatus[0]);
  32. const marginBottom = 2.5;
  33. const {
  34. register,
  35. handleSubmit,
  36. } = useForm()
  37. React.useEffect(() => {
  38. setFromDateValue(minDate);
  39. }, [minDate]);
  40. React.useEffect(() => {
  41. setToDateValue(maxDate);
  42. }, [maxDate]);
  43. const toPayMethodArray = (opt) => {
  44. if (!opt || opt.type === 'all') return [];
  45. return Array.isArray(opt.type) ? opt.type : [opt.type];
  46. };
  47. const onSubmit = () => {
  48. let sentDateFrom = "";
  49. let sentDateTo = "";
  50. if (fromDateValue != "dd / mm / yyyy") {
  51. sentDateFrom = DateUtils.dateValue(fromDateValue)
  52. }
  53. if (toDateValue != "dd / mm / yyyy") {
  54. sentDateTo = DateUtils.dateValue(toDateValue)
  55. }
  56. const temp = {
  57. // code: data.code,
  58. // transNo: data.transNo,
  59. dateFrom: sentDateFrom,
  60. dateTo: sentDateTo,
  61. paymentId: selectedIds.join(','),
  62. payMethod : toPayMethodArray(payMethod),
  63. // status : (status?.type && status?.type != 'all') ? status?.type : "",
  64. };
  65. applySearch(temp);
  66. };
  67. const generateHandler = () => {
  68. let sentDateFrom = "";
  69. let sentDateTo = "";
  70. if (fromDateValue != "dd / mm / yyyy") {
  71. sentDateFrom = DateUtils.dateValue(fromDateValue)
  72. }
  73. if (toDateValue != "dd / mm / yyyy") {
  74. sentDateTo = DateUtils.dateValue(toDateValue)
  75. }
  76. // const dateTo = getValues("dateTo")
  77. const temp = {
  78. // code: data.code,
  79. // transNo: data.transNo,
  80. dateFrom: sentDateFrom,
  81. dateTo: sentDateTo,
  82. // status : (status?.type && status?.type != 'all') ? status?.type : "",
  83. };
  84. generateXML(temp);
  85. }
  86. return (
  87. <MainCard xs={12} md={12} lg={12}
  88. border={false}
  89. content={false}
  90. >
  91. <form onSubmit={handleSubmit(onSubmit)} >
  92. <Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1}} width="98%">
  93. {/*row 1*/}
  94. <Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:2.5}}>
  95. <Typography variant="h5" >
  96. Credit Date
  97. </Typography>
  98. </Grid>
  99. {/*row 2*/}
  100. <Grid container display="flex" alignItems={"center"}>
  101. <Grid item xs={9} s={6} md={3} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  102. <LocalizationProvider dateAdapter={AdapterDayjs}>
  103. <DemoItem components={['DatePicker']}>
  104. <DatePicker
  105. id="dateFrom"
  106. // onError={(newError) => setReceiptFromError(newError)}
  107. slotProps={{
  108. field: { readOnly: true, },
  109. // textField: {
  110. // helperText: receiptFromErrorMessage,
  111. // },
  112. }}
  113. format="DD/MM/YYYY"
  114. label="From Date"
  115. value={minDate === null ? null : dayjs(minDate)}
  116. maxDate={maxDate === null ? null : dayjs(maxDate)}
  117. onChange={(newValue) => {
  118. // console.log(newValue)
  119. if(newValue!=null){
  120. setMinDate(newValue);
  121. }
  122. }}
  123. />
  124. </DemoItem >
  125. </LocalizationProvider>
  126. </Grid>
  127. <Grid item xs={9} s={6} md={3} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  128. <LocalizationProvider dateAdapter={AdapterDayjs}>
  129. <DemoItem components={['DatePicker']}>
  130. <DatePicker
  131. id="dateTo"
  132. // onError={(newError) => setReceiptFromError(newError)}
  133. slotProps={{
  134. field: { readOnly: true, },
  135. // textField: {
  136. // helperText: receiptFromErrorMessage,
  137. // },
  138. }}
  139. format="DD/MM/YYYY"
  140. label="To Date"
  141. value={maxDate === null ? null : dayjs(maxDate)}
  142. minDate={minDate === null ? null : dayjs(minDate)}
  143. onChange={(newValue) => {
  144. // console.log(newValue)
  145. if(newValue!=null){
  146. setMaxDate(newValue);
  147. }
  148. }}
  149. />
  150. </DemoItem >
  151. </LocalizationProvider>
  152. </Grid>
  153. <Grid item xs={9} s={6} md={3} lg={3} sx={{ ml: 3, mr: 3, mb: marginBottom }}>
  154. <Autocomplete
  155. {...register("payMethod")}
  156. disablePortal={false}
  157. size="small"
  158. id="payMethod"
  159. filterOptions={(options) => options}
  160. options={ComboData.payMethod}
  161. value={payMethod}
  162. getOptionLabel={(option) => option.label}
  163. inputValue={payMethod?.label ? payMethod?.label : ""}
  164. onChange={(event, newValue) => {
  165. if(newValue==null){
  166. setPayMethod(ComboData.payMethod[0]);
  167. }else{
  168. setPayMethod(newValue);
  169. }
  170. }}
  171. sx={{
  172. '& .MuiInputBase-root': { alignItems: 'center' },
  173. '& .MuiAutocomplete-endAdornment': { top: '50%', transform: 'translateY(-50%)' },
  174. '& .MuiOutlinedInput-root': { height: 40 }
  175. }}
  176. renderInput={(params) => (
  177. <TextField {...params}
  178. label="Payment Method"
  179. />
  180. )}
  181. InputLabelProps={{
  182. shrink: true
  183. }}
  184. />
  185. </Grid>
  186. {/* <Grid item xs={9} s={6} md={4} lg={3}>
  187. </Grid> */}
  188. </Grid>
  189. <Grid container justifyContent="flex-end" direction="row" alignItems="center" spacing={3} sx={{ ml: 3, mr: 3, mb: 3, }}>
  190. <ThemeProvider theme={PNSPS_BUTTON_THEME}>
  191. <Grid item >
  192. <Button
  193. variant="contained"
  194. type="submit"
  195. disabled={onGridReady}
  196. >
  197. Search
  198. </Button>
  199. </Grid>
  200. <Grid item >
  201. <Button
  202. variant="contained"
  203. onClick={generateHandler}
  204. >
  205. Generate
  206. </Button>
  207. </Grid>
  208. </ThemeProvider>
  209. </Grid>
  210. </Grid>
  211. </form>
  212. </MainCard>
  213. );
  214. };
  215. export default SearchPublicNoticeForm;