| @@ -1,5 +1,5 @@ | |||
| // material-ui | |||
| import * as React from 'react'; | |||
| import { useState, useEffect, useMemo } from 'react'; | |||
| import { | |||
| Grid, | |||
| Typography, | |||
| @@ -14,27 +14,33 @@ import * as StatusUtils from "utils/statusUtils/DnStatus"; | |||
| import { useNavigate } from "react-router-dom"; | |||
| import { FiDataGrid } from "components/FiDataGrid"; | |||
| import { notifyDownloadSuccess } from 'utils/CommonFunction'; | |||
| import * as UrlUtils from "utils/ApiPathConst"; | |||
| import { | |||
| DEMAND_NOTE_EXPORT, | |||
| DEMAND_NOTE_SEND, | |||
| DEMAND_NOTE_ATTACH, | |||
| DEMAND_NOTE_MARK_PAID, | |||
| DEMAND_NOTE_LIST_ALL | |||
| } from "utils/ApiPathConst"; | |||
| import * as HttpUtils from "utils/HttpUtils"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| import { PNSPS_BUTTON_THEME } from "themes/buttonConst"; | |||
| import { ThemeProvider } from "@emotion/react"; | |||
| import { isGrantedAny } from "auth/utils"; | |||
| // ==============================|| EVENT TABLE ||============================== // | |||
| export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| const [isConfirmPopUp, setConfirmPopUp] = React.useState(false); | |||
| const [isSendPopUp, setSendPopUp] = React.useState(false); | |||
| const [isErrorPopUp, setIsErrorPopUp] = React.useState(false); | |||
| const [selectonWarning, setSelectonWarning] = React.useState(false); | |||
| const [wait, setWait] = React.useState(false); | |||
| const [isConfirmPopUp, setConfirmPopUp] = useState(false); | |||
| const [isSendPopUp, setSendPopUp] = useState(false); | |||
| const [isErrorPopUp, setIsErrorPopUp] = useState(false); | |||
| const [selectonWarning, setSelectonWarning] = useState(false); | |||
| const [wait, setWait] = useState(false); | |||
| const [rows, setRows] = React.useState([]); | |||
| const [_searchCriteria, set_searchCriteria] = React.useState(searchCriteria); | |||
| const [selectedRowItems, setSelectedRowItems] = React.useState([]); | |||
| const [rows, setRows] = useState([]); | |||
| const [_searchCriteria, set_searchCriteria] = useState(searchCriteria); | |||
| const [selectedRowItems, setSelectedRowItems] = useState([]); | |||
| const navigate = useNavigate() | |||
| React.useEffect(() => { | |||
| useEffect(() => { | |||
| set_searchCriteria(searchCriteria); | |||
| }, [searchCriteria]); | |||
| @@ -42,7 +48,7 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| navigate('/paymentPage/demandNote/details/' + params.id); | |||
| }; | |||
| const findReadyToSend=()=>{ | |||
| const findReadyToSend = () => { | |||
| const temp = { | |||
| readySend: true | |||
| }; | |||
| @@ -66,7 +72,7 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| } | |||
| HttpUtils.fileDownload({ | |||
| method: 'post', | |||
| url: UrlUtils.DEMAND_NOTE_EXPORT, | |||
| url: DEMAND_NOTE_EXPORT, | |||
| params: { | |||
| dnIdList: idList | |||
| }, | |||
| @@ -98,7 +104,7 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| idList.push(datas[i].id); | |||
| } | |||
| HttpUtils.post({ | |||
| url: UrlUtils.DEMAND_NOTE_SEND, | |||
| url: DEMAND_NOTE_SEND, | |||
| params: { | |||
| dnIdList: idList | |||
| }, | |||
| @@ -121,7 +127,7 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| } | |||
| let file = event.target.files[0]; | |||
| HttpUtils.postWithFiles({ | |||
| url: UrlUtils.DEMAND_NOTE_ATTACH, | |||
| url: DEMAND_NOTE_ATTACH, | |||
| params: { | |||
| dnMap: dnMap | |||
| }, | |||
| @@ -148,7 +154,7 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| idList.push(datas[i].id); | |||
| } | |||
| HttpUtils.post({ | |||
| url: UrlUtils.DEMAND_NOTE_MARK_PAID, | |||
| url: DEMAND_NOTE_MARK_PAID, | |||
| params: { | |||
| dnIdList: idList | |||
| }, | |||
| @@ -173,9 +179,9 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| field: 'contactPerson', | |||
| headerName: 'Organisation', | |||
| minWidth: 300, | |||
| flex:1, | |||
| flex: 1, | |||
| renderCell: (params) => { | |||
| let company = params.row.enCompanyName != null?params.row.enCompanyName: params.row.chCompanyName; | |||
| let company = params.row.enCompanyName != null ? params.row.enCompanyName : params.row.chCompanyName; | |||
| company = company != null ? company : ""; | |||
| /* | |||
| @@ -224,7 +230,7 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| headerName: 'DN No.', | |||
| width: 250, | |||
| renderCell: (params) => { | |||
| return <Button sx={{fontSize: '8px'}} onClick={handleDnClick(params)}><u>{params.row.dnNo}</u></Button>; | |||
| return <Button sx={{ fontSize: '8px' }} onClick={handleDnClick(params)}><u>{params.row.dnNo}</u></Button>; | |||
| }, | |||
| }, | |||
| { | |||
| @@ -235,8 +241,8 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| renderCell: (params) => { | |||
| return (<table> | |||
| <tr><td>Issue:</td><td>{DateUtils.dateStr(params?.row.issueDate)}</td></tr> | |||
| <tr><td>Due:</td><td>{params?.value? DateUtils.dateStr(params?.value):"--"}</td></tr> | |||
| <tr><td>Sent:</td><td>{params.row.sentDate ? <> {DateUtils.datetimeStr(params.row.sentDate)} - {params.row.sentBy} </>: <> To be sent</>}</td></tr> | |||
| <tr><td>Due:</td><td>{params?.value ? DateUtils.dateStr(params?.value) : "--"}</td></tr> | |||
| <tr><td>Sent:</td><td>{params.row.sentDate ? <> {DateUtils.datetimeStr(params.row.sentDate)} - {params.row.sentBy} </> : <> To be sent</>}</td></tr> | |||
| </table>); | |||
| } | |||
| }, | |||
| @@ -263,74 +269,78 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| return ( | |||
| <div style={{ width: '100%' }}> | |||
| <Grid container maxWidth justifyContent="flex-start"> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <input | |||
| id="uploadFileBtn" | |||
| name="file" | |||
| type="file" | |||
| accept=".pdf" | |||
| style={{ display: 'none' }} | |||
| onChange={(event) => { | |||
| const datas = rows?.filter((row) => | |||
| selectedRowItems.includes(row.id) | |||
| ); | |||
| if (datas.length == 0) { | |||
| setSelectonWarning(true); | |||
| document.getElementById("uploadFileBtn").value = ""; | |||
| return; | |||
| } | |||
| doUploadFile(event) | |||
| }} | |||
| /> | |||
| <label htmlFor="uploadFileBtn"> | |||
| <Button | |||
| component="span" | |||
| variant="contained" | |||
| > | |||
| Attach DN | |||
| </Button> | |||
| </label> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={findReadyToSend} | |||
| > | |||
| Ready Send | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={() => setSendPopUp(true)} | |||
| > | |||
| Send DN | |||
| </Button> | |||
| </Grid> | |||
| {isGrantedAny(["MAINTAIN_DEMANDNOTE"]) ? | |||
| <Grid container maxWidth justifyContent="flex-start"> | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <input | |||
| id="uploadFileBtn" | |||
| name="file" | |||
| type="file" | |||
| accept=".pdf" | |||
| style={{ display: 'none' }} | |||
| onChange={(event) => { | |||
| const datas = rows?.filter((row) => | |||
| selectedRowItems.includes(row.id) | |||
| ); | |||
| if (datas.length == 0) { | |||
| setSelectonWarning(true); | |||
| document.getElementById("uploadFileBtn").value = ""; | |||
| return; | |||
| } | |||
| doUploadFile(event) | |||
| }} | |||
| /> | |||
| <label htmlFor="uploadFileBtn"> | |||
| <Button | |||
| component="span" | |||
| variant="contained" | |||
| > | |||
| Attach DN | |||
| </Button> | |||
| </label> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={findReadyToSend} | |||
| > | |||
| Ready Send | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={() => setSendPopUp(true)} | |||
| > | |||
| Send DN | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={() => exportXml()}> | |||
| Export GDNS | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={() => exportXml()}> | |||
| Export GDNS | |||
| </Button> | |||
| </Grid> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={() => setConfirmPopUp(true)} | |||
| > | |||
| Mark as Paid | |||
| </Button> | |||
| <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}> | |||
| <Button | |||
| variant="contained" | |||
| onClick={() => setConfirmPopUp(true)} | |||
| > | |||
| Mark as Paid | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| </Grid> | |||
| : <></> | |||
| } | |||
| <Box sx={{ backgroundColor: "#fff", ml: 2 }} width="98%"> | |||
| <FiDataGrid | |||
| checkboxSelection | |||
| checkboxSelection = {isGrantedAny(["MAINTAIN_DEMANDNOTE"])} | |||
| disableRowSelectionOnClick | |||
| onRowSelectionModelChange={(newSelection) => { | |||
| setSelectedRowItems(newSelection); | |||
| @@ -339,8 +349,8 @@ export default function SearchDemandNote({ searchCriteria, applySearch }) { | |||
| customPageSize={100} | |||
| getRowHeight={() => 'auto'} | |||
| onRowDoubleClick={handleRowDoubleClick} | |||
| doLoad={React.useMemo(() => ({ | |||
| url: UrlUtils.DEMAND_NOTE_LIST_ALL, | |||
| doLoad={useMemo(() => ({ | |||
| url: DEMAND_NOTE_LIST_ALL, | |||
| params: _searchCriteria, | |||
| callback: function (responseData) { | |||
| setRows(responseData?.records); | |||