@@ -14,6 +14,7 @@ | |||
"@mui/icons-material": "^5.14.1", | |||
"@mui/lab": "^5.0.0-alpha.139", | |||
"@mui/material": "^5.10.6", | |||
"@mui/styles": "^5.15.14", | |||
"@mui/x-data-grid": "^6.11.1", | |||
"@mui/x-date-pickers": "^6.12.0", | |||
"@reduxjs/toolkit": "^1.8.5", | |||
@@ -1,12 +1,12 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button, | |||
Box | |||
} from '@mui/material'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import { useNavigate } from "react-router-dom"; | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function SearchPublicNoticeTable({ recordList }) { | |||
@@ -17,11 +17,6 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
setRows(recordList); | |||
}, [recordList]); | |||
const handleEditClick = (params) => () => { | |||
navigate('/setting/announcement/details/' + params.id); | |||
}; | |||
const columns = [ | |||
{ | |||
field: 'announceDate', | |||
@@ -29,7 +24,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
width: 250, | |||
cellClassName: 'announceDate', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{DateUtils.datetimeStr(params?.value)}</u></Button>; | |||
return clickableLink('/setting/announcement/details/' + params.id, DateUtils.datetimeStr(params?.value)); | |||
}, | |||
}, | |||
{ | |||
@@ -79,7 +79,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria}) => { | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -96,7 +96,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria}) => { | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -126,9 +126,10 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria}) => { | |||
<Grid item sx={{ ml: 3 }}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -32,8 +32,8 @@ const UserSearchPage_Individual = () => { | |||
const [record, setRecord] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate() - 90)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate() - 90)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -21,7 +21,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
width: 250, | |||
cellClassName: 'announceDate', | |||
renderCell: (params) => { | |||
return DateUtils.dateStr(params?.value); | |||
return DateUtils.dateValue(params?.value); | |||
}, | |||
}, | |||
{ | |||
@@ -82,7 +82,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -103,7 +103,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -32,8 +32,8 @@ const BackgroundHead = { | |||
const UserSearchPage_Individual = () => { | |||
const [record, setRecord] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate() - 90)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate() - 90)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -107,7 +107,7 @@ const AuditLogSearchForm = ({ applySearch, searchCriteria}) => { | |||
defaultValue={searchCriteria.modifiedFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -129,7 +129,7 @@ const AuditLogSearchForm = ({ applySearch, searchCriteria}) => { | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
console.log(newValue) | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="modifiedTo" | |||
type="date" | |||
@@ -163,9 +163,10 @@ const AuditLogSearchForm = ({ applySearch, searchCriteria}) => { | |||
<Grid item sx={{ ml: 3, mr: 3, mb: 3,}}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
<Grid item sx={{ ml: 3, mb: 3 }}> | |||
@@ -27,6 +27,7 @@ export default function AuditLogTable({recordList}) { | |||
field: 'modified', | |||
headerName: 'Date', | |||
flex: isMdOrLg ? 1 : undefined, | |||
minWidth: 200, | |||
valueGetter:(params)=>{ | |||
return DateUtils.datetimeStr(params?.value); | |||
} | |||
@@ -36,36 +37,42 @@ export default function AuditLogTable({recordList}) { | |||
field: 'modifiedByName', | |||
headerName: 'Username', | |||
flex: isMdOrLg ? 1 : undefined, | |||
minWidth: 80, | |||
}, | |||
{ | |||
id: 'tableName', | |||
field: 'tableName', | |||
headerName: 'Table Name', | |||
flex: isMdOrLg ? 1 : undefined, | |||
minWidth: 80, | |||
}, | |||
{ | |||
id: 'ref', | |||
field: 'ref', | |||
headerName: 'Ref', | |||
flex: isMdOrLg ? 1 : undefined, | |||
minWidth: 80, | |||
}, | |||
{ | |||
id: 'actionType', | |||
field: 'actionType', | |||
headerName: 'Action', | |||
flex: isMdOrLg ? 1 : undefined, | |||
minWidth: 80, | |||
}, | |||
{ | |||
id: 'oldData', | |||
field: 'oldData', | |||
headerName: 'Old Data', | |||
flex: isMdOrLg ? 2 : undefined, | |||
flex: isMdOrLg ? 5 : undefined, | |||
minWidth: 300, | |||
}, | |||
{ | |||
id: 'newData', | |||
field: 'newData', | |||
headerName: 'New Data', | |||
flex: isMdOrLg ? 2 : undefined, | |||
flex: isMdOrLg ? 5 : undefined, | |||
minWidth: 300, | |||
}, | |||
]; | |||
@@ -33,8 +33,8 @@ const BackgroundHead = { | |||
const AuditLogPage = () => { | |||
const [record, setRecord] = useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
modifiedTo: DateUtils.dateStr(new Date()), | |||
modifiedFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
modifiedTo: DateUtils.dateValue(new Date()), | |||
modifiedFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [onReady, setOnReady] = useState(false); | |||
const [changelocked, setChangeLocked] = React.useState(false); | |||
@@ -1,12 +1,10 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button | |||
} from '@mui/material'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as FormatUtils from "utils/FormatUtils"; | |||
import * as PublicNoteStatusUtils from "utils/statusUtils/PublicNoteStatusUtils" | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function SearchPublicNoticeTable({ recordList }) { | |||
@@ -42,14 +40,16 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'appNo', | |||
headerName: 'App No.', | |||
flex: 1, | |||
minWidth: 150, | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.appNo}</u></Button>; | |||
return clickableLink('/application/' + params.row.id, params.row.appNo) | |||
}, | |||
}, | |||
{ | |||
field: 'status', | |||
headerName: 'Status', | |||
flex: 1, | |||
minWidth: 200, | |||
renderCell: (params) => { | |||
return PublicNoteStatusUtils.getStatusByTextEng(params.row.status, params.row.creditor); | |||
} | |||
@@ -58,6 +58,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'date', | |||
headerName: 'Submit Date', | |||
flex: 1, | |||
minWidth: 200, | |||
renderCell: (params) => { | |||
return DateUtils.datetimeStr(params.row.created); | |||
} | |||
@@ -67,6 +68,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'contactPerson', | |||
headerName: 'Contact Person', | |||
flex: 1, | |||
minWidth: 200, | |||
renderCell: (params) => { | |||
let company = params.row.enCompanyName != null?params.row.enCompanyName: params.row.chCompanyName; | |||
company = company != null ? company : ""; | |||
@@ -97,6 +99,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'groupNo', | |||
headerName: 'Gazette Group', | |||
flex: 1, | |||
minWidth: 150, | |||
valueGetter: (params) => { | |||
return (params?.value) ? (params?.value) : ""; | |||
} | |||
@@ -106,6 +109,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'fee', | |||
headerName: 'Amount($)', | |||
flex: 1, | |||
minWidth: 150, | |||
valueGetter: (params) => { | |||
return FormatUtils.currencyFormat(params?.value); | |||
} | |||
@@ -14,8 +14,8 @@ import * as UrlUtils from "utils/ApiPathConst"; | |||
import * as HttpUtils from "utils/HttpUtils"; | |||
import { useNavigate } from "react-router-dom"; | |||
import { notifyDownloadSuccess } from 'utils/CommonFunction'; | |||
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 { useIntl } from "react-intl"; | |||
@@ -28,7 +28,7 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
const [failText, setFailText] = React.useState(""); | |||
const [confirmPopUp, setConfirmPopUp] = React.useState(false); | |||
const [dueDate, setDueDate] = React.useState(DateUtils.dateStr(DateUtils.dateStr((new Date().setDate(new Date().getDate() +1))))); | |||
const [dueDate, setDueDate] = React.useState(DateUtils.dateValue(DateUtils.dateValue((new Date().setDate(new Date().getDate() + 1))))); | |||
const [isSuccessPopUp, setIsSuccessPopUp] = React.useState(false); | |||
const [resultCount, setResultCount] = React.useState(0); | |||
@@ -91,16 +91,16 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
setIsFailPopUp(true); | |||
return; | |||
} else { | |||
setDueDate(DateUtils.dateStr((new Date().setDate(new Date().getDate() +1)))); | |||
setDueDate(DateUtils.dateValue((new Date().setDate(new Date().getDate() + 1)))); | |||
setConfirmPopUp(true); | |||
} | |||
}; | |||
const doDnCreate=()=>{ | |||
const doDnCreate = () => { | |||
setConfirmPopUp(false); | |||
HttpUtils.post({ | |||
url: UrlUtils.DEMAND_NOTE_CREATE + "/" + issueSelected.id, | |||
params:{ | |||
params: { | |||
dueDate: dueDate | |||
}, | |||
onSuccess: function (responseData) { | |||
@@ -113,7 +113,7 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
const fileDownload = () => { | |||
HttpUtils.fileDownload({ | |||
method:'post', | |||
method: 'post', | |||
url: UrlUtils.DEMAND_NOTE_EXPORT, | |||
params: { | |||
"dnIdList": dnIdList | |||
@@ -126,7 +126,7 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
const onNavigate = () => { | |||
setIsSuccessPopUp(false); | |||
if(resultCount > 0) | |||
if (resultCount > 0) | |||
navigate('/paymentPage/demandNote'); | |||
}; | |||
@@ -148,17 +148,16 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
<form> | |||
{/*row 1*/} | |||
<Grid container sx={{ backgroundColor: '#ffffff', ml: 2, mt: 1}} width="98%"> | |||
<Grid container sx={{ backgroundColor: '#ffffff', pt:4, pl:4, pb:4 }} width="98%" spacing={3} > | |||
{/*row 1*/} | |||
<Grid item justifyContent="space-between" alignItems="center" sx={{mt:1,ml:3,mb:2.5}}> | |||
<Grid item justifyContent="space-between" alignItems="center" > | |||
<Typography variant="h5" > | |||
Please Select Gazette Issue : | |||
</Typography> | |||
</Grid> | |||
{/*row 2*/} | |||
<Grid container display="flex" alignItems={"center"} sx={{mb:3}}> | |||
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3 }}> | |||
<Grid item xs={9} s={6} md={5} lg={3}> | |||
<Autocomplete | |||
disablePortal | |||
size="small" | |||
@@ -182,39 +181,31 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
)} | |||
/> | |||
</Grid> | |||
{/* <Grid item sx={{ ml: 3, mr: 3}} > | |||
<Button | |||
size="large" | |||
variant="contained" | |||
onClick={onPreView} | |||
sx={{ | |||
textTransform: 'capitalize', | |||
alignItems: 'end' | |||
}}> | |||
<Typography variant="h5">Preview</Typography> | |||
</Button> | |||
</Grid> */} | |||
<Grid item sx={{ ml: 3, mr: 3 }} > | |||
<Grid item > | |||
<ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
<Button | |||
variant="contained" | |||
onClick={onSubmit} | |||
color="success" | |||
> | |||
Create | |||
</Button> | |||
<Button | |||
variant="contained" | |||
onClick={onSubmit} | |||
color="success" | |||
minWidth={150} | |||
> | |||
Create | |||
</Button> | |||
</ThemeProvider> | |||
</Grid> | |||
<Grid item sx={{ ml: 3, mr: 3 }} > | |||
<Typography variant="h5">Pending Payment: {paymentCount}</Typography> | |||
</Grid> | |||
<Grid item > | |||
<Grid container display="flex" alignItems={"center"} spacing={3}> | |||
<Grid item > | |||
<Typography variant="h5">Pending Payment: {paymentCount}</Typography> | |||
</Grid> | |||
<Grid item sx={{ ml: 3, mr: 3 }} > | |||
<Typography variant="h5">Pending Publish: {publishCount}</Typography> | |||
<Grid item > | |||
<Typography variant="h5">Pending Publish: {publishCount}</Typography> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
</form> | |||
<div> | |||
<Dialog | |||
@@ -254,22 +245,22 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
<Grid container alignItems={"center"}> | |||
<Grid item md={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
<Typography variant="h4" style={{ padding: '16px' }}>Due Date: </Typography> | |||
</Grid> | |||
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
<TextField | |||
fullWidth | |||
type="date" | |||
defaultValue={dueDate} | |||
InputProps={{ inputProps: { min: DateUtils.dateStr(new Date()) } }} | |||
onChange={(newValue) => { | |||
setDueDate(newValue.currentTarget.value) | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
}} | |||
/> | |||
</Grid> | |||
<TextField | |||
fullWidth | |||
type="date" | |||
defaultValue={dueDate} | |||
InputProps={{ inputProps: { min: DateUtils.dateValue(new Date()) } }} | |||
onChange={(newValue) => { | |||
setDueDate(newValue.currentTarget.value) | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
}} | |||
/> | |||
</Grid> | |||
</Grid> | |||
</DialogContent> | |||
<DialogActions> | |||
@@ -300,7 +291,7 @@ const SearchPublicNoticeForm = ({ applySearch, issueComboData, _paymentCount, _p | |||
<Grid item md={12}> | |||
<Button | |||
size="large" | |||
onClick={()=>fileDownload()} | |||
onClick={() => fileDownload()} | |||
sx={{ | |||
textTransform: 'capitalize', | |||
alignItems: 'end' | |||
@@ -127,24 +127,24 @@ const DnDetailCard = ({ data }) => { | |||
{getDisplayField("Sent on", "")} | |||
</Grid> | |||
<Grid container direction="row" justifyContent="space-between" alignItems="center"> | |||
{getDisplayField("Reminder 1", DateUtils.dateStr(dnData.expectReminder1))} | |||
{getDisplayField("Reminder 1", dnData?.expectReminder1 ? DateUtils.dateValue(dnData.expectReminder1):"--")} | |||
{getDisplayField("Reminder 1", dnData?.reminder1 ? DateUtils.datetimeStr(dnData.reminder1) : "--")} | |||
</Grid> | |||
<Grid container direction="row" justifyContent="space-between" alignItems="center"> | |||
{getDisplayField("Reminder 2", DateUtils.dateStr(dnData.expectReminder2))} | |||
{getDisplayField("Reminder 2", dnData?.expectReminder2 ? DateUtils.dateValue(dnData.expectReminder2):"--")} | |||
{getDisplayField("Reminder 2", dnData?.reminder2 ? DateUtils.datetimeStr(dnData.reminder2) : "--")} | |||
</Grid> | |||
<Grid container direction="row" justifyContent="space-between" alignItems="center"> | |||
{getDisplayField("Reminder 3", DateUtils.dateStr(dnData.expectReminder3))} | |||
{getDisplayField("Reminder 3", dnData?.expectReminder3 ? DateUtils.dateValue(dnData.expectReminder3):"--")} | |||
{getDisplayField("Reminder 3", dnData?.reminder3 ? DateUtils.datetimeStr(dnData.reminder3) : "--")} | |||
</Grid> | |||
<Grid container direction="row" justifyContent="space-between" alignItems="center"> | |||
{getDisplayField("Reminder 4", DateUtils.dateStr(dnData.expectReminder4))} | |||
{getDisplayField("Reminder 4", dnData?.expectReminder4 ? DateUtils.dateValue(dnData.expectReminder4):"--")} | |||
{getDisplayField("Reminder 4", dnData?.reminder4 ? DateUtils.datetimeStr(dnData.reminder4) : "--")} | |||
</Grid> | |||
<Grid container direction="row" justifyContent="space-between" alignItems="center"> | |||
{getDisplayField("Reminder Final", DateUtils.dateStr(dnData.expectReminderFinal))} | |||
{getDisplayField("Reminder Final", dnData?.expectReminderFinal ? DateUtils.dateValue(dnData.expectReminderFinal):"--")} | |||
{getDisplayField("Reminder Final", dnData?.reminderFinal ? DateUtils.datetimeStr(dnData.reminderFinal) : "--")} | |||
</Grid> | |||
@@ -49,7 +49,7 @@ const DemandNote_index = () => { | |||
url: `${DEMAND_NOTE_LOAD}/${params.id}`, | |||
onSuccess: (response) => { | |||
response["issueDate"] = DateUtils.dateStr(response["issueDate"]); | |||
response["issueDate"] = DateUtils.dateValue(response["issueDate"]); | |||
response["sentDate"] = response["sentDate"]?DateUtils.datetimeStr(response["sentDate"]):""; | |||
response["gazetteIssueDate"] = DateUtils.datetimeStr(response["gazetteIssueDate"]); | |||
response["contactFaxNo"] =JSON.parse(response["contactFaxNo"]); | |||
@@ -233,8 +233,8 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
width: 300, | |||
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>Issue:</td><td>{DateUtils.dateValue(params?.row.issueDate)}</td></tr> | |||
<tr><td>Due:</td><td>{params?.value? DateUtils.dateValue(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>); | |||
} | |||
@@ -21,13 +21,11 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
}) => { | |||
const [type, setType] = React.useState([]); | |||
// const [status, setStatus] = React.useState({ key: 0, label: 'All', type: 'all' }); | |||
const [orgSelected, setOrgSelected] = React.useState({}); | |||
const [orgCombo, setOrgCombo] = React.useState(); | |||
const [issueSelected, setIssueSelected] = React.useState({}); | |||
const [issueCombo, setIssueCombo] = React.useState([]); | |||
const [selectedStatus, setSelectedStatus] = React.useState([]); | |||
const [selectedLabelsString, setSelectedLabelsString] = React.useState(''); | |||
const [selectedStatus, setSelectedStatus] = React.useState(ComboData.denmandNoteStatus[0]); | |||
const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom); | |||
const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
@@ -41,7 +39,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
const { reset, register, handleSubmit } = useForm() | |||
const onSubmit = (data) => { | |||
data.status = selectedLabelsString | |||
data.status = selectedStatus?.type; | |||
let typeArray = []; | |||
for (let i = 0; i < type.length; i++) { | |||
@@ -57,7 +55,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
dateTo: data.dateTo, | |||
dueDateFrom: data.dueDateFrom, | |||
dueDateTo: data.dueDateTo, | |||
status: (data.status === '' || data.status.includes("all")) ? "" : data.status, | |||
status: (data?.status === '' || data?.status?.includes("all")) ? "" : data.status, | |||
}; | |||
applySearch(temp); | |||
}; | |||
@@ -77,9 +75,9 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
function resetForm() { | |||
setType([]); | |||
// setStatus({ key: 0, label: 'All', type: 'all' }); | |||
setOrgSelected({}); | |||
setIssueSelected({}); | |||
setSelectedStatus(ComboData.denmandNoteStatus[0]); | |||
reset(); | |||
} | |||
@@ -136,9 +134,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
inputValue={(issueSelected?.id) ? getIssueLabel(issueSelected) : ""} | |||
getOptionLabel={(option) => getIssueLabel(option)} | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
setIssueSelected(newValue); | |||
} | |||
setIssueSelected(newValue); | |||
}} | |||
renderInput={(params) => ( | |||
<TextField {...params} | |||
@@ -176,9 +172,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
value={orgSelected} | |||
inputValue={(orgSelected?.label) ? orgSelected?.label : ""} | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
setOrgSelected(newValue); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
<TextField {...params} | |||
@@ -219,7 +213,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -236,7 +230,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -259,7 +253,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
defaultValue={searchCriteria.dueDateFrom} | |||
InputProps={{ inputProps: { max: maxDueDate } }} | |||
onChange={(newValue) => { | |||
setMinDueDate(DateUtils.dateStr(newValue)); | |||
setMinDueDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -277,7 +271,7 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
{...register("dueDateTo")} | |||
InputProps={{ inputProps: { min: minDueDate } }} | |||
onChange={(newValue) => { | |||
setMaxDueDate(DateUtils.dateStr(newValue)); | |||
setMaxDueDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dueDateTo" | |||
type="date" | |||
@@ -291,25 +285,16 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
<Autocomplete | |||
multiple | |||
size="small" | |||
{...register("status")} | |||
id="status" | |||
options={ComboData.denmandNoteStatus} | |||
value={selectedStatus} | |||
onChange={(event, newValue) => { | |||
const findAllIndex = newValue.findIndex((ele) => { | |||
return ele.type === "all" | |||
}) | |||
if (findAllIndex > -1) { | |||
setSelectedStatus([newValue[findAllIndex]]); | |||
setSelectedLabelsString('all') | |||
} else { | |||
const selectedLabels = newValue.map(option => option.type); | |||
const selectedLabelsString = `${selectedLabels.join(',')}`; | |||
if(newValue==null){ | |||
setSelectedStatus(ComboData.denmandNoteStatus[0]); | |||
}else{ | |||
setSelectedStatus(newValue); | |||
setSelectedLabelsString(selectedLabelsString); | |||
} | |||
}} | |||
getOptionLabel={(option) => option.label} | |||
@@ -335,9 +320,10 @@ const SearchDemandNoteForm = ({ applySearch, orgComboData, searchCriteria, issue | |||
<Grid item sx={{ ml: 3, mb:3 }}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -36,10 +36,10 @@ const UserSearchPage_Individual = () => { | |||
const [orgCombo, setOrgCombo] = React.useState([]); | |||
const [issueCombo, setIssueCombo] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate() - 14)), | |||
dueDateTo: DateUtils.dateStr(new Date()), | |||
dueDateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate() - 14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate() - 14)), | |||
dueDateTo: DateUtils.dateValue(new Date()), | |||
dueDateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate() - 14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -3,10 +3,12 @@ import * as React from 'react'; | |||
import { | |||
Button, | |||
Box, | |||
useMediaQuery | |||
} from '@mui/material'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as StatusUtils from "utils/statusUtils/DnStatus"; | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import {useTheme} from "@emotion/react"; | |||
import * as HttpUtils from "utils/HttpUtils"; | |||
import {useIntl} from "react-intl"; | |||
@@ -15,6 +17,8 @@ import {useIntl} from "react-intl"; | |||
export default function SearchDemandNote({ recordList }) { | |||
const [rows, setRows] = React.useState(recordList); | |||
const intl = useIntl(); | |||
const theme = useTheme(); | |||
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||
React.useEffect(() => { | |||
setRows(recordList); | |||
@@ -32,26 +36,30 @@ export default function SearchDemandNote({ recordList }) { | |||
{ | |||
field: 'dnNo', | |||
headerName: intl.formatMessage({id: 'paymentRecordId'}), | |||
width: 200, | |||
width: isMdOrLg ? 'auto' : 200, | |||
flex: isMdOrLg ? 1 : undefined, | |||
}, | |||
{ | |||
field: 'appNo', | |||
headerName: intl.formatMessage({id: 'applicationId'}), | |||
width: 150, | |||
width: isMdOrLg ? 'auto' : 150, | |||
flex: isMdOrLg ? 1 : undefined, | |||
}, | |||
{ | |||
id: 'issueDate', | |||
field: 'issueDate', | |||
headerName: intl.formatMessage({id: 'receiptDate'}), | |||
width: 175, | |||
width: isMdOrLg ? 'auto' : 175, | |||
flex: isMdOrLg ? 1 : undefined, | |||
valueGetter: (params) => { | |||
return DateUtils.dateStr(params?.value); | |||
return DateUtils.dateValue(params?.value); | |||
} | |||
}, | |||
{ | |||
field: 'status', | |||
headerName: intl.formatMessage({id: 'status'}), | |||
width: 175, | |||
width: isMdOrLg ? 'auto' : 175, | |||
flex: isMdOrLg ? 1 : undefined, | |||
renderCell: (params) => { | |||
return [StatusUtils.getStatus_Cht(params)] | |||
}, | |||
@@ -59,15 +67,17 @@ export default function SearchDemandNote({ recordList }) { | |||
{ | |||
field: 'sentDate', | |||
headerName: intl.formatMessage({id: 'sendDate'}), | |||
flex: 1, | |||
width: isMdOrLg ? 'auto' : 200, | |||
flex: isMdOrLg ? 1 : undefined, | |||
valueGetter: (params) => { | |||
return params?.value ? DateUtils.datetimeStr(params?.value) + " - " + params.row.sentBy : ""; | |||
return params?.value ? DateUtils.datetimeStr(params?.value):""; | |||
} | |||
}, | |||
{ | |||
field: 'filename', | |||
headerName: intl.formatMessage({id: 'files'}), | |||
flex: 1, | |||
width: isMdOrLg ? 'auto' : 300, | |||
flex: isMdOrLg ? 1 : undefined, | |||
renderCell: (params) => { | |||
return <Button onClick={onDownloadClick(params)}><u>{params.row.filename}</u></Button>; | |||
}, | |||
@@ -12,42 +12,121 @@ import * as React from "react"; | |||
import * as ComboData from "utils/ComboData"; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as FormatUtils from "utils/FormatUtils"; | |||
import {FormattedMessage, useIntl} from "react-intl"; | |||
import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
import {ThemeProvider} from "@emotion/react"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
import { FormattedMessage, useIntl } from "react-intl"; | |||
import { PNSPS_BUTTON_THEME } from "../../../themes/buttonConst"; | |||
import { ThemeProvider } from "@emotion/react"; | |||
import { makeStyles } from '@mui/styles'; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const useStyles = makeStyles(() => ({ | |||
root: { | |||
position: "relative" | |||
}, | |||
display: { | |||
position: "absolute", | |||
top: 2, | |||
left: 12, | |||
bottom: 2, | |||
background: "white", | |||
pointerEvents: "none", | |||
right: 50, | |||
display: "flex", | |||
alignItems: "center" | |||
}, | |||
})); | |||
const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
}) => { | |||
const intl = useIntl(); | |||
const { locale } = intl; | |||
const [type, setType] = React.useState([]); | |||
const [issueSelected, setIssueSelected] = React.useState({ key: 0, i18nLabel: 'all', labelCht: '全部', label: 'All', type: 'all' }); | |||
const [issueSelected, setIssueSelected] = React.useState({ key: 0, i18nLabel: 'all', labelCht: '全部', label: 'All', type: 'all' }); | |||
const [issueCombo, setIssueCombo] = React.useState([]); | |||
const [selectedStatus, setSelectedStatus] = React.useState({}); | |||
const [selectedStatus, setSelectedStatus] = React.useState(ComboData.denmandNoteStatus_Public[0]); | |||
const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom); | |||
const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
const [fromDateValue, setFromDateValue] = React.useState("dd / mm / yyyy"); | |||
const [toDateValue, setToDateValue] = React.useState("dd / mm / yyyy"); | |||
React.useEffect(() => { | |||
setFromDateValue(minDate); | |||
}, [minDate]); | |||
React.useEffect(() => { | |||
setToDateValue(maxDate); | |||
}, [maxDate]); | |||
function FormDateInputComponent({ inputRef, ...props }) { | |||
const classes = useStyles(); | |||
return ( | |||
<> | |||
<div className={classes.display}> | |||
{DateUtils.dateStr(fromDateValue) == "Invalid Date" ? | |||
fromDateValue | |||
: | |||
DateUtils.dateStr(fromDateValue)} | |||
</div> | |||
<input | |||
// className={classes.input} | |||
ref={inputRef} | |||
{...props} | |||
// onChange={handleChange} | |||
value={fromDateValue} | |||
max={maxDate} | |||
/> | |||
</> | |||
); | |||
} | |||
function ToDateInputComponent({ inputRef, ...props }) { | |||
const classes = useStyles(); | |||
return ( | |||
<> | |||
<div className={classes.display}> | |||
{DateUtils.dateStr(toDateValue) == "Invalid Date" ? | |||
toDateValue | |||
: | |||
DateUtils.dateStr(toDateValue)} | |||
</div> | |||
<input | |||
// className={classes.input} | |||
ref={inputRef} | |||
{...props} | |||
// onChange={handleChange} | |||
value={toDateValue} | |||
min={minDate} | |||
/> | |||
</> | |||
); | |||
} | |||
const { reset, register, handleSubmit } = useForm() | |||
const onSubmit = (data) => { | |||
let typeArray = []; | |||
let sentDateFrom = ""; | |||
let sentDateTo = ""; | |||
for (let i = 0; i < type.length; i++) { | |||
typeArray.push(type[i].label); | |||
} | |||
if (fromDateValue != "dd / mm / yyyy" && toDateValue != "dd / mm / yyyy") { | |||
sentDateFrom = DateUtils.dateValue(fromDateValue) | |||
sentDateTo = DateUtils.dateValue(toDateValue) | |||
} | |||
const temp = { | |||
appNo: data.appNo, | |||
issueId: issueSelected?.id, | |||
dnNo: data.dnNo, | |||
sentDateFrom: data.dateFrom, | |||
sentDateTo: data.dateTo, | |||
sentDateFrom: sentDateFrom, | |||
sentDateTo: sentDateTo, | |||
status: (selectedStatus?.type && selectedStatus?.type != 'all') ? selectedStatus?.type : "", | |||
}; | |||
// console.log(temp) | |||
applySearch(temp); | |||
}; | |||
@@ -60,7 +139,9 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
function resetForm() { | |||
setType([]); | |||
// setStatus({ key: 0, label: 'All', type: 'all' }); | |||
setOrgSelected({}); | |||
// setOrgSelected({}); | |||
setMinDate(DateUtils.dateValue(new Date().setDate(new Date().getDate()-14))) | |||
setMaxDate(DateUtils.dateValue(new Date())) | |||
setIssueSelected({}); | |||
reset(); | |||
} | |||
@@ -88,6 +169,7 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
+ ", No. " + FormatUtils.zeroPad(issueNo, 2) | |||
+ ", " + DateUtils.dateFormat(issueDate, "D MMM YYYY (ddd)"); | |||
} | |||
return ( | |||
<MainCard xs={12} md={12} lg={12} | |||
border={false} | |||
@@ -102,7 +184,7 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
<CardContent sx={{ px: 2.5, pt: 3 }}> | |||
<Grid item justifyContent="space-between" alignItems="center" > | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="searchForm"/> | |||
<FormattedMessage id="searchForm" /> | |||
</Typography> | |||
</Grid> | |||
</CardContent> | |||
@@ -126,7 +208,7 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
}} | |||
renderInput={(params) => ( | |||
<TextField {...params} | |||
label={intl.formatMessage({id: 'gazetteCount'})} | |||
label={intl.formatMessage({ id: 'gazetteCount' })} | |||
InputLabelProps={{ | |||
shrink: true | |||
}} | |||
@@ -140,7 +222,7 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
fullWidth | |||
{...register("appNo")} | |||
id='appNo' | |||
label={intl.formatMessage({id: 'applicationId'})} | |||
label={intl.formatMessage({ id: 'applicationId' })} | |||
defaultValue={searchCriteria.appNo} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -153,7 +235,7 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
fullWidth | |||
{...register("dnNo")} | |||
id='dnNo' | |||
label={intl.formatMessage({id: 'paymentRecordId'})} | |||
label={intl.formatMessage({ id: 'paymentRecordId' })} | |||
defaultValue={searchCriteria.dnNo} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -167,11 +249,14 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
{...register("dateFrom")} | |||
id="dateFrom" | |||
type="date" | |||
label={intl.formatMessage({id: 'sendDateFrom'})} | |||
label={intl.formatMessage({ id: 'sendDateFrom' })} | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
// InputProps={{ inputProps: { max: maxDate } }} | |||
InputProps={{ | |||
inputComponent: FormDateInputComponent, | |||
}} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(newValue.target.value); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -186,13 +271,15 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
shrink: true | |||
}} | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
InputProps={{ | |||
inputComponent: ToDateInputComponent, | |||
}} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(newValue.target.value); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
label={intl.formatMessage({id: 'sendDateTo'})} | |||
label={intl.formatMessage({ id: 'sendDateTo' })} | |||
defaultValue={searchCriteria.dateTo} | |||
/> | |||
</Grid> | |||
@@ -204,8 +291,8 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
id="status" | |||
size="small" | |||
options={ComboData.denmandNoteStatus_Public} | |||
getOptionLabel={(option) => option?.i18nLabel? intl.formatMessage({ id: option.i18nLabel }) : ""} | |||
inputValue={selectedStatus?.i18nLabel? intl.formatMessage({ id: selectedStatus.i18nLabel }) : ""} | |||
getOptionLabel={(option) => option?.i18nLabel ? intl.formatMessage({ id: option.i18nLabel }) : ""} | |||
inputValue={selectedStatus?.i18nLabel ? intl.formatMessage({ id: selectedStatus.i18nLabel }) : ""} | |||
value={selectedStatus} | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
@@ -215,7 +302,7 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
renderInput={(params) => ( | |||
<TextField | |||
{...params} | |||
label={intl.formatMessage({id: 'status'})} | |||
label={intl.formatMessage({ id: 'status' })} | |||
/> | |||
)} | |||
InputLabelProps={{ | |||
@@ -231,13 +318,13 @@ const SearchDemandNoteForm = ({ applySearch, searchCriteria, issueComboData | |||
{/*last row*/} | |||
<Grid container maxWidth justifyContent="flex-end"> | |||
<ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
<Grid item sx={{mr: 3, mb: 3}}> | |||
<Grid item sx={{ mr: 3, mb: 3 }}> | |||
<Button | |||
color="cancel" | |||
variant="contained" | |||
onClick={resetForm} | |||
> | |||
<FormattedMessage id="reset"/> | |||
<FormattedMessage id="reset" /> | |||
</Button> | |||
</Grid> | |||
@@ -36,8 +36,8 @@ const UserSearchPage_Individual = () => { | |||
const [orgCombo, setOrgCombo] = React.useState([]); | |||
const [issueCombo, setIssueCombo] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate() - 14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate() - 14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -45,36 +45,42 @@ export default function EmailTemplateTable({ recordList }) { | |||
field: 'tempKey', | |||
headerName: 'Key', | |||
flex: 1, | |||
minWidth: 250, | |||
}, | |||
{ | |||
id: 'description', | |||
field: 'description', | |||
headerName: 'Description', | |||
flex: 1, | |||
minWidth: 350, | |||
}, | |||
{ | |||
id: 'params', | |||
field: 'params', | |||
headerName: 'Parameters', | |||
flex: 1, | |||
minWidth: 250, | |||
}, | |||
{ | |||
id: 'subjectCht', | |||
field: 'subjectCht', | |||
headerName: 'Subject (Cht)', | |||
flex: 1, | |||
minWidth: 400, | |||
}, | |||
{ | |||
id: 'subjectChs', | |||
field: 'subjectChs', | |||
headerName: 'Subject (Chs)', | |||
flex: 1, | |||
minWidth: 350, | |||
}, | |||
{ | |||
id: 'subjectEng', | |||
field: 'subjectEng', | |||
headerName: 'Subject (Eng)', | |||
flex: 1, | |||
minWidth: 350, | |||
}, | |||
]; | |||
@@ -37,15 +37,6 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
}; | |||
const columns = [ | |||
// { | |||
// field: 'actions', | |||
// headerName: 'Trans. No.', | |||
// flex: 1, | |||
// cellClassName: 'actions', | |||
// renderCell: (params) => { | |||
// return <Button onClick={handleEditClick(params)}><u>{params.row.transNo}</u></Button>; | |||
// }, | |||
// }, | |||
{ | |||
id: 'paymentMethod', | |||
field: 'paymentMethod', | |||
@@ -78,7 +78,7 @@ const SearchPublicNoticeForm = ({ applySearch, generateXML, searchCriteria }) => | |||
max: maxDate, | |||
} }} | |||
// onChange={(newValue) => { | |||
// setMinDate(DateUtils.dateStr(newValue)); | |||
// setMinDate(DateUtils.dateValue(newValue)); | |||
// }} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -95,7 +95,7 @@ const SearchPublicNoticeForm = ({ applySearch, generateXML, searchCriteria }) => | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -32,8 +32,8 @@ const Index = () => { | |||
const [record,setRecord] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateFrom: DateUtils.dateStr(new Date()), | |||
// dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
dateFrom: DateUtils.dateValue(new Date()), | |||
// dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -25,6 +25,7 @@ export default function GazetteIssueTable({ recordList }) { | |||
field: 'issueYear', | |||
headerName: 'Year', | |||
flex: 1, | |||
minWidth: 100, | |||
renderCell: (params) => { | |||
return <div style={{ margin: 4 }}>{params.row.issueYear}</div> | |||
}, | |||
@@ -34,6 +35,7 @@ export default function GazetteIssueTable({ recordList }) { | |||
field: 'volume', | |||
headerName: 'Volume', | |||
flex: 1, | |||
minWidth: 100, | |||
renderCell: (params) => { | |||
return <div style={{ margin: 4 }}>{params.row.volume}</div> | |||
}, | |||
@@ -43,6 +45,7 @@ export default function GazetteIssueTable({ recordList }) { | |||
field: 'issueNo', | |||
headerName: 'Issue No', | |||
flex: 1, | |||
minWidth: 100, | |||
renderCell: (params) => { | |||
return <div style={{ margin: 4 }}>{params.row.issueNo}</div> | |||
}, | |||
@@ -52,6 +55,7 @@ export default function GazetteIssueTable({ recordList }) { | |||
field: 'issueDate', | |||
headerName: 'Issue Date', | |||
flex: 2, | |||
minWidth: 150, | |||
renderCell: (params) => { | |||
let issueDate = params.row.issueDate; | |||
return <div style={{ margin: 4 }}>{dateStr(issueDate)}</div> | |||
@@ -62,6 +66,7 @@ export default function GazetteIssueTable({ recordList }) { | |||
field: 'closingDate', | |||
headerName: 'Closing Date', | |||
flex: 2, | |||
minWidth: 150, | |||
renderCell: (params) => { | |||
let closingDate = params.row.closingDate; | |||
return <div style={{ margin: 4 }}>{dateStr(closingDate)}</div> | |||
@@ -72,6 +77,7 @@ export default function GazetteIssueTable({ recordList }) { | |||
field: 'issueDesc', | |||
headerName: 'Description', | |||
flex: 2, | |||
minWidth: 200, | |||
}, | |||
]; | |||
@@ -98,7 +98,7 @@ const SearchGazetteIssueForm = ({ applyExport, comboData, waitDownload}) => { | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -96,7 +96,7 @@ const SearchGazetteIssueForm = ({ applySearch, comboData}) => { | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -44,12 +44,12 @@ const Index = () => { | |||
// const navigate = useNavigate() | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
year: dateStr_Year(new Date()), | |||
// dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
// dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [exportCriteria, setExportCriteria] = React.useState({ | |||
// year: dateStr_Year(new Date()), | |||
// dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
// dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [attachments, setAttachments] = React.useState([]); | |||
@@ -96,7 +96,7 @@ const SearchHolidayForm = ({ applySearch, comboData}) => { | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -44,7 +44,7 @@ const Index = () => { | |||
// const navigate = useNavigate() | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
year: dateStr_Year(new Date()), | |||
// dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
// dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [attachments, setAttachments] = React.useState([]); | |||
const [waitImport, setWaitImport] = React.useState(false); | |||
@@ -1,11 +1,10 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button} from '@mui/material'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import { useNavigate } from "react-router-dom"; | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import {useIntl} from "react-intl"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function MsgTable({ recordList }) { | |||
@@ -53,7 +52,7 @@ export default function MsgTable({ recordList }) { | |||
flex: 1 , | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.subject}</u></Button>; | |||
return clickableLink('/msg/details/' + params.row.id, params.row.subject); | |||
}, | |||
}, | |||
]; | |||
@@ -99,7 +99,7 @@ const SearchForm = ({ applySearch, searchCriteria }) => { | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -120,7 +120,7 @@ const SearchForm = ({ applySearch, searchCriteria }) => { | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
aria-label={intl.formatMessage({id: 'dateTo'})} | |||
id="dateTo" | |||
@@ -33,8 +33,8 @@ const Index = () => { | |||
const [record,setRecord] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -342,7 +342,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
id="brExpiryDate" | |||
name="brExpiryDate" | |||
type="date" | |||
inputProps={{ min: DateUtils.dateStr(new Date()) }} | |||
inputProps={{ min: DateUtils.dateValue(new Date()) }} | |||
error={Boolean(formik.errors["brExpiryDate"])} | |||
helperText={formik.errors["brExpiryDate"] ? formik.errors["brExpiryDate"] : ''} | |||
onChange={formik.handleChange} | |||
@@ -84,7 +84,7 @@ const OrganizationDetailPage = () => { | |||
response.data["faxNumber"] = response.data.faxNo?.faxNumber; | |||
response.data["fax_countryCode"] = response.data.faxNo?.countryCode; | |||
response.data["brExpiryDate"] = response.data.brExpiryDate ? DateUtils.dateStr(response.data.brExpiryDate) : ""; | |||
response.data["brExpiryDate"] = response.data.brExpiryDate ? DateUtils.dateValue(response.data.brExpiryDate) : ""; | |||
setFormData(response.data) | |||
setList(response.historyList) | |||
} | |||
@@ -109,7 +109,7 @@ const OrganizationDetailPage = () => { | |||
response.data["faxNumber"] = response.data.faxNo?.faxNumber; | |||
response.data["fax_countryCode"] = response.data.faxNo?.countryCode; | |||
response.data["brExpiryDate"] = response.data.brExpiryDate ? DateUtils.dateStr(response.data.brExpiryDate) : ""; | |||
response.data["brExpiryDate"] = response.data.brExpiryDate ? DateUtils.dateValue(response.data.brExpiryDate) : ""; | |||
setFormData(response.data) | |||
setList(response.historyList) | |||
} | |||
@@ -212,7 +212,7 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||
id="brExpiryDate" | |||
name="brExpiryDate" | |||
type="date" | |||
inputProps={{ min: DateUtils.dateStr(new Date()) }} | |||
inputProps={{ min: DateUtils.dateValue(new Date()) }} | |||
error={Boolean(formik.errors["brExpiryDate"])} | |||
helperText={formik.errors["brExpiryDate"] ? formik.errors["brExpiryDate"] : ''} | |||
onChange={formik.handleChange} | |||
@@ -58,7 +58,7 @@ const OrganizationDetailPage_FromUser = () => { | |||
response.data["faxNumber"] = response.data.faxNo?.faxNumber; | |||
response.data["fax_countryCode"] = response.data.faxNo?.countryCode; | |||
response.data["brExpiryDate"] = response.data.brExpiryDate?DateUtils.dateStr(response.data.brExpiryDate): ""; | |||
response.data["brExpiryDate"] = response.data.brExpiryDate?DateUtils.dateValue(response.data.brExpiryDate): ""; | |||
setFormData(response.data) | |||
} | |||
}); | |||
@@ -22,7 +22,7 @@ import {ThemeProvider} from "@emotion/react"; | |||
const OrganizationSearchForm = ({ applySearch }) => { | |||
const [type, setType] = useState([]); | |||
const [creditorSelected, setCreditorSelected] = React.useState({ key: 0, labelCht: '全部', label: 'All', type: 'all' }); | |||
const [creditorSelected, setCreditorSelected] = React.useState(ComboData.CreditorStatus[0]); | |||
const { reset, register, handleSubmit } = useForm() | |||
const onSubmit = (data) => { | |||
@@ -47,6 +47,7 @@ const OrganizationSearchForm = ({ applySearch }) => { | |||
function resetForm() { | |||
setType([]); | |||
setCreditorSelected(ComboData.CreditorStatus[0]); | |||
reset(); | |||
} | |||
@@ -117,7 +118,12 @@ const OrganizationSearchForm = ({ applySearch }) => { | |||
options={ComboData.CreditorStatus} | |||
value={creditorSelected} | |||
onChange={(event, newValue) => { | |||
setCreditorSelected(newValue); | |||
if(newValue == null){ | |||
setCreditorSelected(ComboData.CreditorStatus[0]); | |||
}else{ | |||
setCreditorSelected(newValue); | |||
} | |||
}} | |||
getOptionLabel={(option) => option.label} | |||
renderInput={(params) => ( | |||
@@ -150,9 +156,10 @@ const OrganizationSearchForm = ({ applySearch }) => { | |||
<Grid item sx={{ mr: 3, mb: 3}}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -46,24 +46,28 @@ export default function OrganizationTable({ recordList }) { | |||
field: 'brNo', | |||
headerName: 'BR No.', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'enCompanyName', | |||
field: 'enCompanyName', | |||
headerName: 'Name (Eng)', | |||
flex: 1, | |||
minWidth: 200, | |||
}, | |||
{ | |||
id: 'chCompanyName', | |||
field: 'chCompanyName', | |||
headerName: 'Name (Ch)', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'contactTel', | |||
field: 'contactTel', | |||
headerName: 'Phone', | |||
flex: 1, | |||
minWidth: 150, | |||
renderCell: (params) => { | |||
let phone = JSON.parse(params.value); | |||
let contact = ""; | |||
@@ -78,8 +82,9 @@ export default function OrganizationTable({ recordList }) { | |||
field: 'brExpiryDate', | |||
headerName: 'BR Expiry Date', | |||
flex: 1, | |||
minWidth: 150, | |||
valueGetter: (params) => { | |||
return DateUtils.dateStr(params?.value); | |||
return DateUtils.dateValue(params?.value); | |||
} | |||
}, | |||
{ | |||
@@ -87,6 +92,7 @@ export default function OrganizationTable({ recordList }) { | |||
field: 'creditor', | |||
headerName: 'Credit Client', | |||
width: 150, | |||
minWidth: 150, | |||
valueGetter: (params) => { | |||
return params?.value?"Yes":""; | |||
} | |||
@@ -43,11 +43,11 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
flex: 1, | |||
renderCell: (params) => { | |||
let appNo = params.row.appNo; | |||
// console.log(params) | |||
console.log(params.row) | |||
return <div style={{ margin: 4, textAlign:"left"}}>Gazette Supplement No. 6 <br/> | |||
{isORGLoggedIn()?<>Care Of: {params.row.careOf}<br /></>:null} | |||
App No: {appNo}<br/> | |||
Issue Date: {DateUtils.dateStr(params.row.issueDate)}<br/> | |||
Issue Date: {DateUtils.dateValue(params.row.issueDate)}<br/> | |||
Length: {params.row.length+ " cm"}</div> | |||
}, | |||
}, | |||
@@ -74,7 +74,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
<FormattedMessage id="gazetteSampleName"/><br/> | |||
{isORGLoggedIn()?<><FormattedMessage id="careOf"/>: {params.row.careOf}<br /></>:null} | |||
<FormattedMessage id="applicationId"/>: {appNo}<br/> | |||
<FormattedMessage id="gazetteDate"/>: {locale === 'en' ? DateUtils.dateStr(params.row.issueDate) : DateUtils.dateStr_Cht(params.row.issueDate)}<br/> | |||
<FormattedMessage id="gazetteDate"/>: {locale === 'en' ? DateUtils.dateValue(params.row.issueDate) : DateUtils.dateStr_Cht(params.row.issueDate)}<br/> | |||
<FormattedMessage id="gazetteLength"/>: {params.row.length+ " cm"}</div> | |||
}, | |||
}, | |||
@@ -1,13 +1,11 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button | |||
} from '@mui/material'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as FormatUtils from "utils/FormatUtils" | |||
import * as PaymentStatus from "utils/statusUtils/PaymentStatus" | |||
import { useNavigate } from "react-router-dom"; | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function SearchPublicNoticeTable({ recordList }) { | |||
@@ -44,18 +42,20 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'appNos', | |||
headerName: 'Application No.', | |||
flex: 1, | |||
minWidth: 150, | |||
renderCell: (params) => { | |||
let appNo = params.row.appNos; | |||
return <div style={{ margin: 4 }}>{appNo}</div> | |||
return <div style={{ marginTop: 2, marginBottom: 2 }}>{appNo}</div> | |||
}, | |||
}, | |||
{ | |||
field: 'actions', | |||
headerName: 'Transaction No.', | |||
flex: 1, | |||
minWidth: 200, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.transNo}</u></Button>; | |||
return clickableLink('/paymentPage/details/' + params.row.id, params.row.transNo); | |||
}, | |||
}, | |||
{ | |||
@@ -63,6 +63,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'transDateTime', | |||
headerName: 'Transaction Date', | |||
flex: 1, | |||
minWidth: 150, | |||
valueGetter: (params) => { | |||
return DateUtils.dateStr(params?.value); | |||
} | |||
@@ -36,6 +36,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
}; | |||
function resetForm() { | |||
setStatus(ComboData.paymentStatus[0]); | |||
reset(); | |||
} | |||
@@ -82,7 +83,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -98,7 +99,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -134,7 +135,9 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
getOptionLabel={(option) => option.label} | |||
inputValue={status?.label ? status?.label : ""} | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
if(newValue==null){ | |||
setStatus(ComboData.paymentStatus[0]); | |||
}else{ | |||
setStatus(newValue); | |||
} | |||
}} | |||
@@ -32,8 +32,8 @@ const Index = () => { | |||
const [record,setRecord] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -1,7 +1,7 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button, useMediaQuery | |||
useMediaQuery | |||
} from '@mui/material'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as FormatUtils from "utils/FormatUtils" | |||
@@ -10,6 +10,7 @@ import { useNavigate } from "react-router-dom"; | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import {useTheme} from "@emotion/react"; | |||
import {useIntl} from "react-intl"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function SearchPublicNoticeTable({ recordList }) { | |||
@@ -40,10 +41,6 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
setRows(recordList); | |||
}, [recordList]); | |||
const handleEditClick = (params) => () => { | |||
navigate('/paymentPage/details/' + params.row.id); | |||
}; | |||
const handleEditDoubleClick = (params) =>{ | |||
navigate('/paymentPage/details/' + params.row.id); | |||
}; | |||
@@ -56,7 +53,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
flex: isMdOrLg ? 1 : undefined, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.transNo}</u></Button>; | |||
return clickableLink('/paymentPage/details/' + params.row.id, params.row.transNo); | |||
}, | |||
}, | |||
{ | |||
@@ -14,8 +14,24 @@ import * as ComboData from "utils/ComboData"; | |||
import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
import {ThemeProvider} from "@emotion/react"; | |||
import {FormattedMessage, useIntl} from "react-intl"; | |||
import { makeStyles } from '@mui/styles'; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const useStyles = makeStyles(() => ({ | |||
root: { | |||
position: "relative" | |||
}, | |||
display: { | |||
position: "absolute", | |||
top: 2, | |||
left: 12, | |||
bottom: 2, | |||
background: "white", | |||
pointerEvents: "none", | |||
right: 50, | |||
display: "flex", | |||
alignItems: "center" | |||
}, | |||
})); | |||
const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
const intl = useIntl(); | |||
@@ -23,6 +39,62 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
const [status, setStatus] = React.useState(ComboData.paymentStatus[0]); | |||
const [fromDateValue, setFromDateValue] = React.useState("dd / mm / yyyy"); | |||
const [toDateValue, setToDateValue] = React.useState("dd / mm / yyyy"); | |||
React.useEffect(() => { | |||
// console.log(minDate) | |||
setFromDateValue(minDate); | |||
}, [minDate]); | |||
React.useEffect(() => { | |||
setToDateValue(maxDate); | |||
}, [maxDate]); | |||
function FormDateInputComponent({inputRef, ...props }) { | |||
const classes = useStyles(); | |||
return ( | |||
<> | |||
<div className={classes.display}> | |||
{DateUtils.dateStr(fromDateValue)=="Invalid Date"? | |||
fromDateValue | |||
: | |||
DateUtils.dateStr(fromDateValue)} | |||
</div> | |||
<input | |||
// className={classes.input} | |||
ref={inputRef} | |||
{...props} | |||
// onChange={handleChange} | |||
value={fromDateValue} | |||
max= {maxDate} | |||
/> | |||
</> | |||
); | |||
} | |||
function ToDateInputComponent({inputRef, ...props }) { | |||
const classes = useStyles(); | |||
return ( | |||
<> | |||
<div className={classes.display}> | |||
{DateUtils.dateStr(toDateValue)=="Invalid Date"? | |||
toDateValue | |||
: | |||
DateUtils.dateStr(toDateValue)} | |||
</div> | |||
<input | |||
// className={classes.input} | |||
ref={inputRef} | |||
{...props} | |||
// onChange={handleChange} | |||
value={toDateValue} | |||
min = {minDate} | |||
/> | |||
</> | |||
); | |||
} | |||
const _sx = { | |||
padding: "4 2 4 2", | |||
boxShadow: 1, | |||
@@ -42,17 +114,25 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
const { reset, register, handleSubmit } = useForm() | |||
const onSubmit = (data) => { | |||
let sentDateFrom = ""; | |||
let sentDateTo = ""; | |||
if( fromDateValue!="dd / mm / yyyy"&&toDateValue!="dd / mm / yyyy"){ | |||
sentDateFrom = DateUtils.dateValue(fromDateValue) | |||
sentDateTo = DateUtils.dateValue(toDateValue) | |||
} | |||
const temp = { | |||
code: data.code, | |||
transNo: data.transNo, | |||
dateFrom: data.dateFrom, | |||
dateTo: data.dateTo, | |||
dateFrom: sentDateFrom, | |||
dateTo: sentDateTo, | |||
status : (status?.type && status?.type != 'all') ? status?.type : "", | |||
}; | |||
applySearch(temp); | |||
}; | |||
function resetForm() { | |||
setMinDate(DateUtils.dateValue(new Date().setDate(new Date().getDate()-14))) | |||
setMaxDate(DateUtils.dateValue(new Date())) | |||
reset(); | |||
} | |||
@@ -100,9 +180,11 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
type="date" | |||
label={intl.formatMessage({id: 'payDateFrom'})} | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
InputProps={{ | |||
inputComponent: FormDateInputComponent, | |||
}} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(newValue.target.value); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -117,9 +199,11 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
shrink: true | |||
}} | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
InputProps={{ | |||
inputComponent: ToDateInputComponent, | |||
}} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(newValue.target.value); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -144,6 +228,8 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
setStatus(newValue); | |||
}else{ | |||
setStatus(ComboData.paymentStatus[0]); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
@@ -33,8 +33,8 @@ const Index = () => { | |||
const [record,setRecord] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -55,7 +55,7 @@ const Index = () => { | |||
responseData.data["fax_countryCode"] = JSON.parse(responseData.data.contactFaxNo).countryCode; | |||
responseData.data["issueNoStr"] = responseData.data.issueVolume + "/" + responseData.data.issueYear + " No. " + responseData.data.issueNo | |||
responseData.data["issueDate"] = DateUtils.dateStr(responseData.data.issueDate); | |||
responseData.data["issueDate"] = DateUtils.dateValue(responseData.data.issueDate); | |||
responseData.data["groupType"] = responseData.data.groupTitle; | |||
@@ -100,7 +100,7 @@ const Index = () => { | |||
}); | |||
const latestDataObjects = Object.values(latestData); | |||
const filteredData = latestDataObjects.filter(item => item.timeDiff > 20 && item.status !== "APPR"); | |||
const filteredData = latestDataObjects.filter(item => item.timeDiff > 20 || item.status !== "APPR"); | |||
const filteredAppIds = filteredData.map(item => item.appId); | |||
const appIdsNotInData = appIdList.filter(appId => !latestDataObjects.some(item => item.appId === appId)); | |||
@@ -88,10 +88,17 @@ const Index = () => { | |||
<Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | |||
我們已收到你已確定申請編號: {record?.appNo} 的稿件校對確定及可付印的指示,並將安排刊登於憲報 | |||
期數 {record?.appNo} 年 {record?.issueVolume} 卷 第 {record?.issueNo} 期內。 | |||
<FormattedMessage | |||
id='MSG.pay_credity1' | |||
values={{ | |||
appNo: record?.appNo, | |||
year: record?.issueYear, | |||
issueVolume: record?.issueVolume, | |||
issueNo: record?.issueNo | |||
}} | |||
/> | |||
<br/><br/> | |||
此公共啟事申請的費用將於下期發出的繳費發票時收取,請依時繳費。 | |||
<FormattedMessage id="MSG.pay_credity2"/> | |||
</Typography> | |||
<Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}> | |||
@@ -67,7 +67,7 @@ const FormPanel = ({ formData }) => { | |||
} | |||
if (isOverTime()) { | |||
setWarningText("回覆逾時,請重新申請。"); | |||
setWarningText(intl.formatMessage({id: 'MSG.proofOutOfTime'})); | |||
setIsWarningPopUp(true); | |||
return; | |||
} | |||
@@ -80,7 +80,12 @@ const FormPanel = ({ formData }) => { | |||
vaild: values.vaild, | |||
}, | |||
files: attachments ? attachments : [], | |||
onSuccess: function () { | |||
onSuccess: function (responseData) { | |||
if(responseData.msg){ | |||
setWarningText(intl.formatMessage({id: 'MSG.proofOutOfTime'})); | |||
setIsWarningPopUp(true); | |||
return; | |||
} | |||
notifyActionSuccess("提交成功!") | |||
if (actionValue) { | |||
navigate("/proof/pay/" + params.id); | |||
@@ -127,10 +132,10 @@ const FormPanel = ({ formData }) => { | |||
} | |||
const isOverTime = () => { | |||
let proofPaymentDeadline = DateUtils.convertToDate(formik.values?.proofPaymentDeadline); | |||
if (!proofPaymentDeadline) return true; | |||
let reviseDeadline = DateUtils.convertToDate(formik.values?.reviseDeadline); | |||
if (!reviseDeadline) return true; | |||
let current = new Date(); | |||
return current.getTime() > proofPaymentDeadline; | |||
return current.getTime() > reviseDeadline; | |||
} | |||
@@ -154,7 +159,7 @@ const FormPanel = ({ formData }) => { | |||
<FormattedMessage id="proofReplyDate" /> : | |||
{ | |||
locale === 'en' ? | |||
DateUtils.dateStr(formik.values.replyDate) | |||
DateUtils.dateValue(formik.values.replyDate) | |||
: | |||
DateUtils.datetimeStr_Cht(formik.values.replyDate) | |||
} | |||
@@ -1,13 +1,11 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button, | |||
} from '@mui/material'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as FormatUtils from "utils/FormatUtils" | |||
import * as ProofStatus from "utils/statusUtils/ProofStatus"; | |||
import { useNavigate } from "react-router-dom"; | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function SearchPublicNoticeTable({ recordList }) { | |||
@@ -18,10 +16,6 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
setRows(recordList); | |||
}, [recordList]); | |||
const handleEditClick = (params) => () => { | |||
navigate('/proof/reply/' + params.row.id); | |||
}; | |||
const columns = [ | |||
{ | |||
field: 'actions', | |||
@@ -29,7 +23,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
width: 170, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.refNo}</u></Button>; | |||
return clickableLink('/proof/reply/' + params.row.id, params.row.refNo); | |||
}, | |||
}, | |||
{ | |||
@@ -52,6 +46,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
id: 'actions', | |||
headerName: 'Status', | |||
flex: 1, | |||
minWidth: 100, | |||
renderCell: (params) => { | |||
return ProofStatus.getStatus_Eng(params); | |||
}, | |||
@@ -61,6 +56,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'created', | |||
headerName: 'Proof Issue Date', | |||
flex: 1, | |||
minWidth: 200, | |||
valueGetter: (params) => { | |||
return DateUtils.datetimeStr(params?.value); | |||
} | |||
@@ -70,6 +66,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'replyDate', | |||
headerName: 'Confirmed/ Return Date', | |||
flex: 1, | |||
minWidth: 200, | |||
valueGetter: (params) => { | |||
return params?.value ? DateUtils.datetimeStr(params?.value) : ""; | |||
} | |||
@@ -79,6 +76,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'contactPerson', | |||
headerName: 'Client', | |||
flex: 1, | |||
minWidth: 200, | |||
renderCell: (params) => { | |||
let company = params.row.enCompanyName != null?params.row.enCompanyName: params.row.chCompanyName; | |||
company = company != null ? company : ""; | |||
@@ -109,6 +107,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'groupTitle', | |||
headerName: 'Gazette Group', | |||
flex: 1, | |||
minWidth: 200, | |||
valueGetter: (params) => { | |||
return (params?.value) ? (params?.value) : ""; | |||
} | |||
@@ -118,6 +117,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
field: 'fee', | |||
headerName: 'Amount ($)', | |||
flex: 1, | |||
minWidth: 200, | |||
valueGetter: (params) => { | |||
return (params?.value) ? "$ " + FormatUtils.currencyFormat(params?.value) : ""; | |||
} | |||
@@ -210,7 +210,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -227,7 +227,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -315,9 +315,10 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
<Grid item sx={{ ml: 3, mb: 3 }}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -34,8 +34,8 @@ const UserSearchPage_Individual = () => { | |||
const [orgCombo, setOrgCombo] = React.useState([]); | |||
const [issueCombo, setIssueCombo] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate() - 14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate() - 14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -1,7 +1,7 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button, useMediaQuery | |||
useMediaQuery | |||
} from '@mui/material'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as FormatUtils from "utils/FormatUtils" | |||
@@ -13,6 +13,7 @@ import { | |||
} from "utils/Utils"; | |||
import {useTheme} from "@emotion/react"; | |||
import {useIntl} from "react-intl"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function SearchPublicNoticeTable({ recordList }) { | |||
@@ -43,9 +44,6 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
setRows(recordList); | |||
}, [recordList]); | |||
const handleEditClick = (params) => () => { | |||
navigate('/proof/reply/' + params.row.id); | |||
}; | |||
/*eslint no-irregular-whitespace: ["error", { "skipComments": true }]*/ | |||
/*const getGroupTitle = (title) => { | |||
@@ -94,19 +92,19 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
{ | |||
field: 'actions', | |||
headerName: intl.formatMessage({id: 'proofId'}), | |||
width: isMdOrLg ? 'auto' : 250, | |||
width: isMdOrLg ? 'auto' : 200, | |||
flex: isMdOrLg ? 1.5 : undefined, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.refNo}</u></Button>; | |||
return clickableLink('/proof/reply/' + params.row.id,params.row.refNo); | |||
}, | |||
}, | |||
{ | |||
id: 'appId', | |||
field: 'appId', | |||
headerName: isORGLoggedIn()?intl.formatMessage({id: 'gazetteCount3'}):intl.formatMessage({id: 'gazetteCount2'}), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
width: isMdOrLg ? 'auto' : 330, | |||
flex: isMdOrLg ? 2 : undefined, | |||
renderCell: (params) => { | |||
// let appNo = params.row.appNo; | |||
// let code = params.row.groupNo; | |||
@@ -120,7 +118,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
id: 'created', | |||
field: 'created', | |||
headerName: intl.formatMessage({id: 'proofDate'}), | |||
width: isMdOrLg ? 'auto' : 250, | |||
width: isMdOrLg ? 'auto' : 200, | |||
flex: isMdOrLg ? 1.5 : undefined, | |||
valueGetter: (params) => { | |||
return DateUtils.datetimeStr(params?.value); | |||
@@ -130,7 +128,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
id: 'proofPaymentDeadline', | |||
field: 'proofPaymentDeadline', | |||
headerName: intl.formatMessage({id: 'replyBefore'}), | |||
width: isMdOrLg ? 'auto' : 250, | |||
width: isMdOrLg ? 'auto' : 200, | |||
flex: isMdOrLg ? 1.5 : undefined, | |||
valueGetter: (params) => { | |||
let proofPaymentDeadline = DateUtils.convertToDate(params?.value); | |||
@@ -142,7 +140,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
id: 'replyDate', | |||
field: 'replyDate', | |||
headerName: intl.formatMessage({id: 'replyDate'}), | |||
width: isMdOrLg ? 'auto' : 250, | |||
width: isMdOrLg ? 'auto' : 200, | |||
flex: isMdOrLg ? 1.5 : undefined, | |||
valueGetter: (params) => { | |||
return params?.value ? DateUtils.datetimeStr(params?.value) : ""; | |||
@@ -161,8 +159,8 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
id: 'fee', | |||
field: 'fee', | |||
headerName: intl.formatMessage({id: 'fee'}), | |||
width: isMdOrLg ? 'auto' : 250, | |||
flex: isMdOrLg ? 1.5 : undefined, | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
valueGetter: (params) => { | |||
return (params?.value) ? "$ " + FormatUtils.currencyFormat(params?.value) : ""; | |||
} | |||
@@ -15,8 +15,24 @@ import * as FormatUtils from "utils/FormatUtils"; | |||
import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
import {ThemeProvider} from "@emotion/react"; | |||
import {FormattedMessage, useIntl} from "react-intl"; | |||
import { makeStyles } from '@mui/styles'; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const useStyles = makeStyles(() => ({ | |||
root: { | |||
position: "relative" | |||
}, | |||
display: { | |||
position: "absolute", | |||
top: 2, | |||
left: 12, | |||
bottom: 2, | |||
background: "white", | |||
pointerEvents: "none", | |||
right: 50, | |||
display: "flex", | |||
alignItems: "center" | |||
}, | |||
})); | |||
const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
}) => { | |||
@@ -31,6 +47,60 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom); | |||
const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
const [fromDateValue, setFromDateValue] = React.useState("dd / mm / yyyy"); | |||
const [toDateValue, setToDateValue] = React.useState("dd / mm / yyyy"); | |||
React.useEffect(() => { | |||
setFromDateValue(minDate); | |||
}, [minDate]); | |||
React.useEffect(() => { | |||
setToDateValue(maxDate); | |||
}, [maxDate]); | |||
function FormDateInputComponent({ inputRef, ...props }) { | |||
const classes = useStyles(); | |||
return ( | |||
<> | |||
<div className={classes.display}> | |||
{DateUtils.dateStr(fromDateValue) == "Invalid Date" ? | |||
fromDateValue | |||
: | |||
DateUtils.dateStr(fromDateValue)} | |||
</div> | |||
<input | |||
// className={classes.input} | |||
ref={inputRef} | |||
{...props} | |||
// onChange={handleChange} | |||
value={fromDateValue} | |||
max={maxDate} | |||
/> | |||
</> | |||
); | |||
} | |||
function ToDateInputComponent({ inputRef, ...props }) { | |||
const classes = useStyles(); | |||
return ( | |||
<> | |||
<div className={classes.display}> | |||
{DateUtils.dateStr(toDateValue) == "Invalid Date" ? | |||
toDateValue | |||
: | |||
DateUtils.dateStr(toDateValue)} | |||
</div> | |||
<input | |||
// className={classes.input} | |||
ref={inputRef} | |||
{...props} | |||
// onChange={handleChange} | |||
value={toDateValue} | |||
min={minDate} | |||
/> | |||
</> | |||
); | |||
} | |||
const _sx = { | |||
padding: "4 2 4 2", | |||
@@ -50,20 +120,26 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
const { reset, register, handleSubmit } = useForm() | |||
const onSubmit = (data) => { | |||
let typeArray = []; | |||
let sentDateFrom = ""; | |||
let sentDateTo = ""; | |||
for (let i = 0; i < type.length; i++) { | |||
typeArray.push(type[i].label); | |||
} | |||
if (fromDateValue != "dd / mm / yyyy" && toDateValue != "dd / mm / yyyy") { | |||
sentDateFrom = DateUtils.dateValue(fromDateValue) | |||
sentDateTo = DateUtils.dateValue(toDateValue) | |||
} | |||
const temp = { | |||
refNo: data.refNo, | |||
code: data.code, | |||
issueId: issueSelected?.id, | |||
gazettGroup: groupSelected?.type, | |||
dateFrom: data.dateFrom, | |||
dateTo: data.dateTo, | |||
dateFrom: sentDateFrom, | |||
dateTo: sentDateTo, | |||
//contact: data.contact, | |||
replyed: (status?.type && status?.type != 'all') ? status?.type : "", | |||
}; | |||
@@ -82,6 +158,8 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
setStatus(ComboData.proofStatus[0]); | |||
setIssueSelected({}); | |||
setGroupSelected({}); | |||
setMinDate(DateUtils.dateValue(new Date().setDate(new Date().getDate()-14))) | |||
setMaxDate(DateUtils.dateValue(new Date())) | |||
reset(); | |||
} | |||
@@ -210,9 +288,11 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
type="date" | |||
label={intl.formatMessage({id: 'proofDateFrom'})} | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
InputProps={{ | |||
inputComponent: FormDateInputComponent, | |||
}} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(newValue.target.value); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -227,9 +307,11 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
shrink: true | |||
}} | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
InputProps={{ | |||
inputComponent: ToDateInputComponent, | |||
}} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(newValue.target.value); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -268,6 +350,8 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, issueComboData | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
setStatus(newValue); | |||
}else{ | |||
setStatus(ComboData.proofStatus[0]); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
@@ -34,8 +34,8 @@ const UserSearchPage_Individual = () => { | |||
const [record,setRecord] = React.useState([]); | |||
const [issueCombo,setIssueCombo] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -374,7 +374,7 @@ const ApplicationDetailCard = ( | |||
<Grid item xs={12} md={8} lg={8}> | |||
<Stack direction="row"> | |||
<FormControl variant="outlined" sx={{ width: '25%' }} disabled > | |||
<FormControl variant="outlined" sx={{ width: '25%', minWidth: 100, }} disabled > | |||
<OutlinedInput | |||
size="small" | |||
{...register("contactTelNo.countryCode", | |||
@@ -459,7 +459,7 @@ const ApplicationDetailCard = ( | |||
<Grid item xs={12} md={8} lg={8}> | |||
<Stack direction="row"> | |||
<FormControl variant="outlined" sx={{ width: '25%' }} disabled> | |||
<FormControl variant="outlined" sx={{ width: '25%', minWidth: 100, }} disabled> | |||
<OutlinedInput | |||
size="small" | |||
{...register("contactFaxNo.countryCode", | |||
@@ -24,6 +24,7 @@ import ContentPasteSearchIcon from '@mui/icons-material/ContentPasteSearch'; | |||
import CheckCircleOutline from '@mui/icons-material/CheckCircleOutline'; | |||
import HighlightOff from '@mui/icons-material/HighlightOff'; | |||
// import {useNavigate} from "react-router-dom"; | |||
import * as DateUtils from "utils/DateUtils"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const ClientDetailCard = ( | |||
@@ -35,6 +36,9 @@ const ClientDetailCard = ( | |||
) => { | |||
// const params = useParams(); | |||
const [currentApplicationDetailData, setCurrentApplicationDetailData] = useState({}); | |||
const [orgDetailData, setOrgDetailData] = useState({}); | |||
const [brExpiryDate,setBrExpiryDate] = useState(""); | |||
const [brNo,setBrNo] = useState(""); | |||
const [onReady, setOnReady] = useState(false); | |||
const [companyName, setCompanyName] = useState({ enCompanyName: "", chCompanyName: "" }); | |||
const { register, | |||
@@ -46,6 +50,9 @@ const ClientDetailCard = ( | |||
//if user data from parent are not null | |||
if (Object.keys(applicationDetailData).length > 0 && applicationDetailData !== undefined) { | |||
setCurrentApplicationDetailData(applicationDetailData.userData); | |||
if (!applicationDetailData.orgDetail == null){ | |||
setOrgDetailData(applicationDetailData.orgDetail.data); | |||
} | |||
if (!applicationDetailData.companyName1 == null) { | |||
setCompanyName(applicationDetailData.companyName); | |||
} else { | |||
@@ -62,9 +69,42 @@ const ClientDetailCard = ( | |||
//if state data are ready and assign to different field | |||
// console.log(currentApplicationDetailData) | |||
if (Object.keys(currentApplicationDetailData).length > 0) { | |||
setOnReady(true); | |||
if( currentApplicationDetailData.orgId!=null){ | |||
if (Object.keys(orgDetailData).length > 0) { | |||
setBrExpiryDate(DateUtils.dateValue(orgDetailData.brExpiryDate)); | |||
setBrNo(orgDetailData.brNo); | |||
setOnReady(true); | |||
}else{ | |||
setBrExpiryDate(DateUtils.dateValue(currentApplicationDetailData.brExpiryDate)); | |||
setBrNo(currentApplicationDetailData.brNo); | |||
setOnReady(true); | |||
} | |||
}else{ | |||
setOnReady(true); | |||
} | |||
} | |||
}, [currentApplicationDetailData]); | |||
useEffect(() => { | |||
if (brNo != undefined && brNo.length > 0) { | |||
console.log(brExpiryDate) | |||
var currentDate = new Date(); // Current date | |||
var targetDate = new Date(brExpiryDate); // Target date | |||
if (targetDate < currentDate) { | |||
alert("The BR is expired.") | |||
} else { | |||
var timeDiff = Math.abs(currentDate.getTime()-targetDate.getTime()); | |||
console.log(timeDiff) | |||
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); | |||
console.log(diffDays) | |||
if (diffDays <= 7&&diffDays > 0){ | |||
alert("The BR is expiring.") | |||
} | |||
} | |||
setOnReady(true); | |||
} | |||
}, [brNo]); | |||
const handleViewClick = () => () => { | |||
console.log(currentApplicationDetailData) | |||
@@ -244,6 +284,56 @@ const ClientDetailCard = ( | |||
</FormControl> | |||
</Grid> | |||
</Grid> | |||
<Grid container direction="column" justifyContent="flex-start" | |||
alignItems="flex-start"> | |||
<Grid item xs={12} md={12} lg={12} mb={1} | |||
sx={{ display: 'flex', alignItems: 'center' }}> | |||
<FormLabel><Typography variant="h5">BR No:</Typography></FormLabel> | |||
</Grid> | |||
<Grid item xs={12} md={12} lg={12} mb={1} sx={{ width: '100%' }} > | |||
<FormControl variant="outlined" sx={{ width: '100%' }} disabled > | |||
<OutlinedInput | |||
size="small" | |||
{...register("brNo", | |||
{ | |||
value: brNo, | |||
})} | |||
id='brNo' | |||
sx={{ | |||
"& .MuiInputBase-input.Mui-disabled": { | |||
WebkitTextFillColor: "#000000", | |||
background: "#f8f8f8", | |||
}, | |||
}} | |||
/> | |||
</FormControl> | |||
</Grid> | |||
</Grid> | |||
<Grid container direction="column" justifyContent="flex-start" | |||
alignItems="flex-start"> | |||
<Grid item xs={12} md={12} lg={12} mb={1} | |||
sx={{ display: 'flex', alignItems: 'center' }}> | |||
<FormLabel><Typography variant="h5">BR Expiry Date:</Typography></FormLabel> | |||
</Grid> | |||
<Grid item xs={12} md={12} lg={12} mb={1} sx={{ width: '100%' }} > | |||
<FormControl variant="outlined" sx={{ width: '100%' }} disabled > | |||
<OutlinedInput | |||
size="small" | |||
{...register("brExpiryDate", | |||
{ | |||
value: brExpiryDate, | |||
})} | |||
id='brExpiryDate' | |||
sx={{ | |||
"& .MuiInputBase-input.Mui-disabled": { | |||
WebkitTextFillColor: "#000000", | |||
background: "#f8f8f8", | |||
}, | |||
}} | |||
/> | |||
</FormControl> | |||
</Grid> | |||
</Grid> | |||
<Grid container direction="column" justifyContent="flex-start" | |||
alignItems="flex-start"> | |||
<Grid item xs={12} md={12} lg={12} mb={1} | |||
@@ -410,7 +410,7 @@ const PublicNoticeDetail_GLD = () => { | |||
<Grid item xs={12} md={12} lg={3} xl={3} sx={{ mt: { xs: -3, sm: -3 } }}> | |||
<Grid container> | |||
<Grid item xs={12} md={12}> | |||
<Box xs={12} md={12} height='800px' sx={{ ml: 2, mt: 3, mb: 3, mr: { xs: 2, sm: 2 }, borderRadius: '10px', backgroundColor: '#ffffff' }}> | |||
<Box xs={12} md={12} sx={{ ml: 2, mt: 3, mb: 3, mr: { xs: 2, sm: 2 }, borderRadius: '10px', backgroundColor: '#ffffff' }}> | |||
<ClientDetailCard | |||
// updateUserObject={updateUserObject} | |||
applicationDetailData={applicationDetailData} | |||
@@ -1,27 +1,22 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button, useMediaQuery | |||
useMediaQuery | |||
} from '@mui/material'; | |||
import { useNavigate } from "react-router-dom"; | |||
import {FiDataGrid} from "components/FiDataGrid"; | |||
import * as FormatUtils from "utils/FormatUtils" | |||
import * as DateUtils from "utils/DateUtils" | |||
import * as PaymentStatus from "utils/statusUtils/PaymentStatus" | |||
import {useTheme} from "@emotion/react"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// import * as StatusUtils from "./PublicNoteStatusUtils"; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function SubmittedTab({ rows }) { | |||
const navigate = useNavigate() | |||
const theme = useTheme(); | |||
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||
const handleEditClick = (params) => () => { | |||
navigate('/paymentPage/details/' + params.row.id); | |||
}; | |||
const columns = [ | |||
{ | |||
field: 'actions', | |||
@@ -30,7 +25,7 @@ export default function SubmittedTab({ rows }) { | |||
flex: isMdOrLg ? 1 : undefined, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.transNo}</u></Button>; | |||
return clickableLink('/paymentPage/details/' + params.row.id, params.row.transNo); | |||
}, | |||
}, | |||
{ | |||
@@ -1,13 +1,12 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button, useMediaQuery, | |||
useMediaQuery, | |||
} from '@mui/material'; | |||
import { | |||
GridActionsCellItem, | |||
} from "@mui/x-data-grid"; | |||
import * as Icon from 'utils/IconUtils'; | |||
import { useNavigate } from "react-router-dom"; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as ProofStatus from "utils/statusUtils/ProofStatus"; | |||
import {FiDataGrid} from "components/FiDataGrid"; | |||
@@ -15,18 +14,14 @@ import * as FormatUtils from "utils/FormatUtils" | |||
import * as HttpUtils from "utils/HttpUtils" | |||
import * as UrlUtils from "utils/ApiPathConst" | |||
import {useTheme} from "@emotion/react"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function ProofTab({rows}) { | |||
const navigate = useNavigate() | |||
const theme = useTheme(); | |||
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||
const handleEditClick = (params) => () => { | |||
navigate('/proof/reply/' + params.row.id); | |||
}; | |||
const onDownloadClick = (params) => () => { | |||
HttpUtils.fileDownload({ | |||
url: UrlUtils.GEN_GAZETTE_PROOF+"/"+params.row.id, | |||
@@ -42,7 +37,7 @@ export default function ProofTab({rows}) { | |||
flex: isMdOrLg ? 1 : undefined, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.refNo}</u></Button>; | |||
return clickableLink('/proof/reply/' + params.row.id, params.row.refNo); | |||
}, | |||
}, | |||
{ | |||
@@ -149,7 +149,7 @@ const ApplicationDetailCard = ( | |||
}); | |||
const latestDataObjects = Object.values(latestData); | |||
const filteredData = latestDataObjects.filter(item => item.timeDiff > 20 && item.status !== "APPR"); | |||
const filteredData = latestDataObjects.filter(item => item.timeDiff > 20 || item.status !== "APPR"); | |||
const filteredAppIds = filteredData.map(item => item.appId); | |||
const appIdsNotInData = appIdList.filter(appId => !latestDataObjects.some(item => item.appId === appId)); | |||
@@ -1,31 +1,26 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button, useMediaQuery | |||
useMediaQuery | |||
} from '@mui/material'; | |||
import { useNavigate } from "react-router-dom"; | |||
import {FiDataGrid} from "components/FiDataGrid"; | |||
import * as FormatUtils from "utils/FormatUtils" | |||
import * as DateUtils from "utils/DateUtils" | |||
import * as PaymentStatus from "utils/statusUtils/PaymentStatus" | |||
import {useTheme} from "@emotion/react"; | |||
import {useIntl} from "react-intl"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// import * as StatusUtils from "./PublicNoteStatusUtils"; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function SubmittedTab({ rows }) { | |||
const navigate = useNavigate() | |||
const theme = useTheme(); | |||
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||
const intl = useIntl(); | |||
const { locale } = intl; | |||
const handleEditClick = (params) => () => { | |||
navigate('/paymentPage/details/' + params.row.id); | |||
}; | |||
const columns = [ | |||
{ | |||
field: 'actions', | |||
@@ -34,7 +29,7 @@ export default function SubmittedTab({ rows }) { | |||
flex: isMdOrLg ? 1 : undefined, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.transNo}</u></Button>; | |||
return clickableLink('/paymentPage/details/' + params.row.id, params.row.transNo); | |||
}, | |||
}, | |||
{ | |||
@@ -1,27 +1,23 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
Button, useMediaQuery, | |||
useMediaQuery, | |||
} from '@mui/material'; | |||
import { useNavigate } from "react-router-dom"; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as ProofStatus from "utils/statusUtils/ProofStatus"; | |||
import {FiDataGrid} from "components/FiDataGrid"; | |||
import * as FormatUtils from "utils/FormatUtils" | |||
import {useTheme} from "@emotion/react"; | |||
import {useIntl} from "react-intl"; | |||
import { clickableLink } from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function ProofTab({rows}) { | |||
const intl = useIntl(); | |||
const navigate = useNavigate() | |||
const theme = useTheme(); | |||
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||
const { locale } = intl; | |||
const handleEditClick = (params) => () => { | |||
navigate('/proof/reply/' + params.row.id); | |||
}; | |||
const columns = [ | |||
{ | |||
@@ -31,7 +27,7 @@ export default function ProofTab({rows}) { | |||
width: 200, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.refNo}</u></Button>; | |||
return clickableLink('/proof/reply/' + params.row.id, params.row.refNo); | |||
}, | |||
}, | |||
{ | |||
@@ -138,7 +138,7 @@ export default function SubmittedTab({ rows }) { | |||
}); | |||
const latestDataObjects = Object.values(latestData); | |||
const filteredData = latestDataObjects.filter(item => item.timeDiff > 20 && item.status !== "APPR"); | |||
const filteredData = latestDataObjects.filter(item => item.timeDiff > 20 || item.status !== "APPR"); | |||
const filteredAppIds = filteredData.map(item => item.appId); | |||
const appIdsNotInData = appIdList.filter(appId => !latestDataObjects.some(item => item.appId === appId)); | |||
@@ -1,4 +1,4 @@ | |||
// material-ui | |||
// material-uistatus | |||
import { | |||
Button, | |||
Grid, TextField, | |||
@@ -16,33 +16,111 @@ import { | |||
import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
import {ThemeProvider} from "@emotion/react"; | |||
import {FormattedMessage, useIntl} from "react-intl"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
import { makeStyles } from '@mui/styles'; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const useStyles = makeStyles(() => ({ | |||
root: { | |||
position: "relative" | |||
}, | |||
display: { | |||
position: "absolute", | |||
top: 2, | |||
left: 12, | |||
bottom: 2, | |||
background: "white", | |||
pointerEvents: "none", | |||
right: 50, | |||
display: "flex", | |||
alignItems: "center" | |||
}, | |||
})); | |||
const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
const intl = useIntl(); | |||
const [type, setType] = React.useState([]); | |||
const [status, setStatus] = React.useState([{ key: 0, label: 'all', type: 'all' }]); | |||
const [status, setStatus] = React.useState(localStorage.getItem('userData').creditor?ComboData.publicNoticeStatic_Creditor[0]:ComboData.publicNoticeStatic[0]); | |||
const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom); | |||
const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
const [selectedLabelsString, setSelectedLabelsString] = React.useState(''); | |||
const [fromDateValue, setFromDateValue] = React.useState("dd / mm / yyyy"); | |||
const [toDateValue, setToDateValue] = React.useState("dd / mm / yyyy"); | |||
// const [selectedLabelsString, setSelectedLabelsString] = React.useState(''); | |||
const { reset, register, handleSubmit } = useForm() | |||
const marginBottom = 2.5; | |||
React.useEffect(() => { | |||
setFromDateValue(minDate); | |||
}, [minDate]); | |||
React.useEffect(() => { | |||
setToDateValue(maxDate); | |||
}, [maxDate]); | |||
function FormDateInputComponent({ inputRef, ...props }) { | |||
const classes = useStyles(); | |||
return ( | |||
<> | |||
<div className={classes.display}> | |||
{DateUtils.dateStr(fromDateValue) == "Invalid Date" ? | |||
fromDateValue | |||
: | |||
DateUtils.dateStr(fromDateValue)} | |||
</div> | |||
<input | |||
// className={classes.input} | |||
ref={inputRef} | |||
{...props} | |||
// onChange={handleChange} | |||
value={fromDateValue} | |||
max={maxDate} | |||
/> | |||
</> | |||
); | |||
} | |||
function ToDateInputComponent({ inputRef, ...props }) { | |||
const classes = useStyles(); | |||
return ( | |||
<> | |||
<div className={classes.display}> | |||
{DateUtils.dateStr(toDateValue) == "Invalid Date" ? | |||
toDateValue | |||
: | |||
DateUtils.dateStr(toDateValue)} | |||
</div> | |||
<input | |||
// className={classes.input} | |||
ref={inputRef} | |||
{...props} | |||
// onChange={handleChange} | |||
value={toDateValue} | |||
min={minDate} | |||
/> | |||
</> | |||
); | |||
} | |||
const onSubmit = (data) => { | |||
data.status = selectedLabelsString | |||
data.status = status.type; | |||
let typeArray = []; | |||
let sentDateFrom = ""; | |||
let sentDateTo = ""; | |||
for (let i = 0; i < type.length; i++) { | |||
typeArray.push(type[i].label); | |||
} | |||
if (fromDateValue != "dd / mm / yyyy" && toDateValue != "dd / mm / yyyy") { | |||
sentDateFrom = DateUtils.dateValue(fromDateValue) | |||
sentDateTo = DateUtils.dateValue(toDateValue) | |||
} | |||
const temp = { | |||
appNo: data.appNo, | |||
dateFrom: data.dateFrom, | |||
dateTo: data.dateTo, | |||
dateFrom: sentDateFrom, | |||
dateTo: sentDateTo, | |||
contact: data.contact, | |||
careOf: data.careOf?data.careOf:"", | |||
status: (data.status === "" || data.status.includes('all')) ? "" : data.status, | |||
@@ -52,7 +130,9 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
function resetForm() { | |||
setType([]); | |||
setStatus([{ key: 0, label: 'All', labelCht: "全部", type: 'all' }]); | |||
setStatus(localStorage.getItem('userData').creditor?ComboData.publicNoticeStatic_Creditor[0]:ComboData.publicNoticeStatic[0]); | |||
setMinDate(DateUtils.dateValue(new Date().setDate(new Date().getDate()-14))) | |||
setMaxDate(DateUtils.dateValue(new Date())) | |||
reset(); | |||
} | |||
@@ -90,12 +170,15 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
{...register("dateFrom")} | |||
id="dateFrom" | |||
type="date" | |||
format="DD/MM/YYYY" | |||
aria-label={intl.formatMessage({id: 'submitDateFrom'})} | |||
label={intl.formatMessage({id: 'submitDateFrom'})} | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
InputProps={{ | |||
inputComponent: FormDateInputComponent, | |||
}} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(newValue.target.value); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -112,12 +195,15 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
{...register("dateTo")} | |||
id="dateTo" | |||
type="date" | |||
// format="DD/MM/YYYY" | |||
aria-label={intl.formatMessage({id: 'submitDateTo'})} | |||
label={intl.formatMessage({id: 'submitDateTo'})} | |||
defaultValue={searchCriteria.dateTo} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
InputProps={{ | |||
inputComponent: ToDateInputComponent, | |||
}} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(newValue.target.value); | |||
}} | |||
/> | |||
</Grid> | |||
@@ -137,7 +223,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
</Grid>:null | |||
} | |||
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
{/* <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
<TextField | |||
fullWidth | |||
{...register("contact")} | |||
@@ -149,9 +235,44 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
shrink: true | |||
}} | |||
/> | |||
</Grid> */} | |||
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
<Autocomplete | |||
{...register("status")} | |||
id="status" | |||
size="small" | |||
// filterOptions={(options)=>options} | |||
options={ | |||
localStorage.getItem('userData').creditor ? | |||
ComboData.publicNoticeStatic_Creditor : | |||
ComboData.publicNoticeStatic | |||
} | |||
value={status} | |||
// inputValue={status?.labelCht} | |||
getOptionLabel={(option) => intl.formatMessage({id: option.label})} | |||
onChange={(event, newValue) => { | |||
if(newValue ==null){ | |||
setStatus(localStorage.getItem('userData').creditor?ComboData.publicNoticeStatic_Creditor[0]:ComboData.publicNoticeStatic[0]); | |||
}else{ | |||
setStatus(newValue); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
<TextField {...params} | |||
label={intl.formatMessage({id: 'status'})} | |||
aria-label={intl.formatMessage({id: 'status'})} | |||
InputLabelProps={{ | |||
shrink: true | |||
}} | |||
/> | |||
)} | |||
// InputLabelProps={{ | |||
// shrink: true | |||
// }} | |||
/> | |||
</Grid> | |||
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
{/* <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
<Autocomplete | |||
multiple | |||
{...register("status")} | |||
@@ -198,15 +319,8 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
// shrink: true | |||
// }} | |||
/> | |||
</Grid> | |||
{/*<Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:3}}>*/} | |||
{/* <TextField*/} | |||
{/* fullWidth*/} | |||
{/* {...register("subDivisionId")}*/} | |||
{/* id="subDivision"*/} | |||
{/* label="Sub-Division"*/} | |||
{/* />*/} | |||
{/*</Grid>*/} | |||
</Grid> */} | |||
</Grid> | |||
@@ -18,8 +18,8 @@ const UserSearchPage_Individual = () => { | |||
const [record,setRecord] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
React.useEffect(() => { | |||
@@ -1,6 +1,7 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { | |||
//Link, | |||
Button, | |||
Grid, | |||
Typography, | |||
@@ -14,7 +15,7 @@ import * as FormatUtils from "utils/FormatUtils"; | |||
import * as StatusUtils from "utils/statusUtils/PublicNoteStatusUtils"; | |||
import { useNavigate } from "react-router-dom"; | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import { notifyActionSuccess } from 'utils/CommonFunction'; | |||
import { notifyActionSuccess, clickableLink } from 'utils/CommonFunction'; | |||
import { FormattedMessage, useIntl } from "react-intl"; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
@@ -34,9 +35,6 @@ export default function SearchPublicNoticeTable({ recordList, reloadFunction }) | |||
setRows(recordList); | |||
}, [recordList]); | |||
const handleEditClick = (params) => () => { | |||
navigate('/application/' + params.id); | |||
}; | |||
const columns = [ | |||
@@ -46,7 +44,7 @@ export default function SearchPublicNoticeTable({ recordList, reloadFunction }) | |||
width: 150, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.appNo}</u></Button>; | |||
return clickableLink('/application/' + params.id, params.row.appNo); | |||
}, | |||
}, | |||
{ | |||
@@ -63,6 +61,7 @@ export default function SearchPublicNoticeTable({ recordList, reloadFunction }) | |||
field: 'created', | |||
headerName: 'Submit Date', | |||
flex: 1, | |||
minWidth: 200, | |||
valueGetter: (params) => { | |||
return DateUtils.datetimeStr(params?.value); | |||
} | |||
@@ -71,6 +70,7 @@ export default function SearchPublicNoticeTable({ recordList, reloadFunction }) | |||
id: 'contactPerson', | |||
field: 'contactPerson', | |||
headerName: 'Client', | |||
minWidth: 250, | |||
flex: 2, | |||
renderCell: (params) => { | |||
let company = params.row.enCompanyName != null ? params.row.enCompanyName : params.row.chCompanyName; | |||
@@ -102,6 +102,7 @@ export default function SearchPublicNoticeTable({ recordList, reloadFunction }) | |||
field: 'groupNo', | |||
headerName: 'Gazette Code', | |||
flex: 0.5, | |||
minWidth: 150, | |||
valueGetter: (params) => { | |||
return (params?.value) ? (params?.value) : ""; | |||
} | |||
@@ -111,6 +112,7 @@ export default function SearchPublicNoticeTable({ recordList, reloadFunction }) | |||
field: 'issueId', | |||
headerName: 'Gazette Issue No.', | |||
flex: 1.5, | |||
minWidth: 350, | |||
valueGetter: (params) => { | |||
return params.row.issueYear | |||
+ " Vol. " + FormatUtils.zeroPad(params.row.issueVolume, 3) | |||
@@ -26,8 +26,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
const [orgCombo, setOrgCombo] = React.useState(); | |||
const [issueSelected, setIssueSelected] = React.useState({}); | |||
const [issueCombo, setIssueCombo] = React.useState([]); | |||
const [selectedStatus, setSelectedStatus] = React.useState([]); | |||
const [selectedLabelsString, setSelectedLabelsString] = React.useState(''); | |||
const [selectedStatus, setSelectedStatus] = React.useState({key: 0, label: 'All', type: 'all'}); | |||
const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom); | |||
const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
@@ -38,7 +37,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
const marginBottom = 2.5; | |||
const { reset, register, handleSubmit } = useForm() | |||
const onSubmit = (data) => { | |||
data.status = selectedLabelsString | |||
data.status = selectedStatus?.type | |||
let typeArray = []; | |||
for (let i = 0; i < type.length; i++) { | |||
@@ -50,7 +49,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
dateFrom: data.dateFrom, | |||
dateTo: data.dateTo, | |||
contact: data.contact, | |||
status: (data.status === '' || data.status.includes("all")) ? "" : data.status, | |||
status: (data.status === '' || data.status?.includes("all")) ? "" : data.status, | |||
orgId: (orgSelected?.key && orgSelected?.key > 0) ? orgSelected?.key : "", | |||
issueId: issueSelected?.id, | |||
groupNo: data.groupNo, | |||
@@ -75,7 +74,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
// setStatus({ key: 0, label: 'All', type: 'all' }); | |||
setOrgSelected({}); | |||
setIssueSelected({}); | |||
setSelectedStatus([]); | |||
setSelectedStatus({key: 0, label: 'All', type: 'all'}); | |||
reset(); | |||
} | |||
@@ -145,7 +144,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: maxDate } }} | |||
onChange={(newValue) => { | |||
setMinDate(DateUtils.dateStr(newValue)); | |||
setMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -162,7 +161,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
{...register("dateTo")} | |||
InputProps={{ inputProps: { min: minDate } }} | |||
onChange={(newValue) => { | |||
setMaxDate(DateUtils.dateStr(newValue)); | |||
setMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="dateTo" | |||
type="date" | |||
@@ -188,29 +187,31 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
</Grid> | |||
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: marginBottom }}> | |||
<Autocomplete | |||
{...register("status")} | |||
id="status" | |||
size="small" | |||
options={ComboData.publicNoticeStatic_GLD} | |||
value={selectedStatus} | |||
onChange={(event, newValue) => { | |||
if(newValue==null){ | |||
setSelectedStatus(ComboData.publicNoticeStatic_GLD[0]); | |||
}else{ | |||
setSelectedStatus(newValue); | |||
} | |||
}} | |||
getOptionLabel={(option) => option.label} | |||
renderInput={(params) => ( | |||
<TextField | |||
{...params} | |||
label="Status" | |||
InputLabelProps={{ | |||
shrink: true | |||
}} | |||
/> | |||
)} | |||
/> | |||
{/* <Autocomplete | |||
{...register("status")} | |||
disablePortal | |||
id="status" | |||
filterOptions={(options) => options} | |||
options={ComboData.publicNoticeStatic_GLD} | |||
value={status} | |||
inputValue={status?.label} | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
setStatus(newValue); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
<TextField {...params} | |||
label="Status" | |||
/> | |||
)} | |||
InputLabelProps={{ | |||
shrink: true | |||
}} | |||
/> */} | |||
<Autocomplete | |||
multiple | |||
{...register("status")} | |||
id="status" | |||
@@ -242,7 +243,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
}} | |||
/> | |||
)} | |||
/> | |||
/> */} | |||
</Grid> | |||
{ | |||
@@ -257,9 +258,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
value={orgSelected} | |||
inputValue={(orgSelected?.label) ? orgSelected?.label : ""} | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
setOrgSelected(newValue); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
<TextField {...params} | |||
@@ -285,9 +284,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
inputValue={(issueSelected?.id) ? getIssueLabel(issueSelected) : ""} | |||
getOptionLabel={(option) => getIssueLabel(option)} | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
setIssueSelected(newValue); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
<TextField {...params} | |||
@@ -320,9 +317,10 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss | |||
<Grid item sx={{ ml: 3 }}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -34,8 +34,8 @@ const UserSearchPage_Individual = () => { | |||
const [orgCombo, setOrgCombo] = React.useState([]); | |||
const [issueCombo, setIssueCombo] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
dateTo: DateUtils.dateStr(new Date()), | |||
dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate() - 14)), | |||
dateTo: DateUtils.dateValue(new Date()), | |||
dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate() - 14)), | |||
}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
@@ -188,7 +188,7 @@ const SearchPublicNoticeForm = ({ applySearch, generateReport, searchCriteria, o | |||
////defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: sysTxnMaxDate } }} | |||
onChange={(newValue) => { | |||
setSysTxnMinDate(DateUtils.dateStr(newValue)); | |||
setSysTxnMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -204,7 +204,7 @@ const SearchPublicNoticeForm = ({ applySearch, generateReport, searchCriteria, o | |||
{...register("sysTxnDateTo")} | |||
InputProps={{ inputProps: { min: sysTxnMinDate } }} | |||
onChange={(newValue) => { | |||
setsysTxnMaxDate(DateUtils.dateStr(newValue)); | |||
setsysTxnMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="sysTxnDateTo" | |||
type="date" | |||
@@ -230,7 +230,7 @@ const SearchPublicNoticeForm = ({ applySearch, generateReport, searchCriteria, o | |||
//defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: txnMaxDate } }} | |||
onChange={(newValue) => { | |||
setTxnMaxDate(DateUtils.dateStr(newValue)); | |||
setTxnMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -246,7 +246,7 @@ const SearchPublicNoticeForm = ({ applySearch, generateReport, searchCriteria, o | |||
{...register("txnDateTo")} | |||
InputProps={{ inputProps: { min: txnMinDate } }} | |||
onChange={(newValue) => { | |||
setTxnMinDate(DateUtils.dateStr(newValue)); | |||
setTxnMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="txnDateTo" | |||
type="date" | |||
@@ -272,7 +272,7 @@ const SearchPublicNoticeForm = ({ applySearch, generateReport, searchCriteria, o | |||
//defaultValue={searchCriteria.dateFrom} | |||
InputProps={{ inputProps: { max: collMaxDate } }} | |||
onChange={(newValue) => { | |||
setCollMinDate(DateUtils.dateStr(newValue)); | |||
setCollMinDate(DateUtils.dateValue(newValue)); | |||
}} | |||
InputLabelProps={{ | |||
shrink: true | |||
@@ -288,7 +288,7 @@ const SearchPublicNoticeForm = ({ applySearch, generateReport, searchCriteria, o | |||
{...register("collDateTo")} | |||
InputProps={{ inputProps: { min: collMinDate } }} | |||
onChange={(newValue) => { | |||
setCollMaxDate(DateUtils.dateStr(newValue)); | |||
setCollMaxDate(DateUtils.dateValue(newValue)); | |||
}} | |||
id="collDateTo" | |||
type="date" | |||
@@ -33,8 +33,8 @@ const Index = () => { | |||
// const [record,setRecord] = React.useState([]); | |||
const [searchCriteria, setSearchCriteria] = React.useState({ | |||
// dateTo: DateUtils.dateStr(new Date()), | |||
// dateFrom: DateUtils.dateStr(new Date().setDate(new Date().getDate()-14)), | |||
// dateTo: DateUtils.dateValue(new Date()), | |||
// dateFrom: DateUtils.dateValue(new Date().setDate(new Date().getDate()-14)), | |||
}); | |||
const [onReady] = React.useState(true); | |||
const [onDownload, setOnDownload] = React.useState(false); | |||
@@ -42,6 +42,7 @@ const Table = ({onRowClick, dataList}) => { | |||
field: 'value', | |||
headerName: 'Value', | |||
flex: 1, | |||
minWidth: 400, | |||
renderCell:(params)=>{ | |||
return <div dangerouslySetInnerHTML={{__html: params.value}} /> | |||
} | |||
@@ -118,6 +118,7 @@ const UserMaintainPage_Individual = () => { | |||
response.data["preferLocale"] = getObjectByType(ComboData.Locale, "type", response.data?.preferLocale); | |||
// console.log(response.data) | |||
setFormData(response.data); | |||
setLoding(false); | |||
} | |||
}); | |||
} | |||
@@ -98,7 +98,7 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
contactPerson: values.contactPerson, | |||
// enCompanyName: values.enCompanyName, | |||
// chCompanyName: values.chCompanyName, | |||
orgId: values.orgId, | |||
orgId: values.orgId?.id, | |||
// brNo: values.brNo, | |||
// brExpiryDate: values.brExpiryDate, | |||
preferLocale: values.preferLocale.type | |||
@@ -303,6 +303,14 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
<Grid item lg={4}> | |||
{FieldUtils.getComboField({ | |||
label: "Organisation:", | |||
valueName: "orgId", | |||
getOptionLabel: (option) => option.brNo? option.brNo : "", | |||
dataList: orgData, | |||
disabled: (!editMode), | |||
form: formik | |||
})} | |||
{/* {FieldUtils.getComboField({ | |||
label: "Organisation:", | |||
valueName: "orgId", | |||
disabled: (!editMode), | |||
@@ -343,7 +351,7 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
formik.setFieldValue("orgId", newValue.id); | |||
}, | |||
form: formik | |||
})} | |||
})} */} | |||
</Grid> | |||
<Grid item lg={4}> | |||
@@ -90,6 +90,12 @@ const UserMaintainPage_Organization = () => { | |||
loadData(); | |||
} | |||
}, []); | |||
useEffect(() => { | |||
if (orgData.length > 0 && userData["orgId"] != null){ | |||
userData["orgId"] = getObjectByType(orgData, "id", userData["orgId"]); | |||
} | |||
}, [orgData, userData]); | |||
useEffect(() => { | |||
// console.log(userData); | |||
@@ -113,7 +119,7 @@ const UserMaintainPage_Organization = () => { | |||
response.data["contactTel"] = response.orgDetail.data["contactTel"]; | |||
response.data["faxNo"] = response.orgDetail.data["faxNo"]; | |||
response.data["brExpiryDate"] = response.orgDetail.data.brExpiryDate ? DateUtils.dateStr(response.orgDetail.data.brExpiryDate) : ""; | |||
response.data["brExpiryDate"] = response.orgDetail.data.brExpiryDate ? DateUtils.dateValue(response.orgDetail.data.brExpiryDate) : ""; | |||
response.data["brNo"] = response.orgDetail.data.brNo; | |||
response.data["enCompanyName"] = response.orgDetail.data.enCompanyName; | |||
response.data["chCompanyName"] = response.orgDetail.data.chCompanyName; | |||
@@ -123,7 +129,7 @@ const UserMaintainPage_Organization = () => { | |||
response.data["addressBus"] = JSON.parse(response.data["addressBus"]); | |||
response.data["contactTel"] = JSON.parse(response.data["contactTel"]); | |||
response.data["faxNo"] = JSON.parse(response.data["faxNo"]); | |||
response.data["brExpiryDate"] = response.data.brExpiryDate ? DateUtils.dateStr(response.data.brExpiryDate) : ""; | |||
response.data["brExpiryDate"] = response.data.brExpiryDate ? DateUtils.dateValue(response.data.brExpiryDate) : ""; | |||
} | |||
// console.log("2") | |||
// console.log(response.data) | |||
@@ -149,7 +155,7 @@ const UserMaintainPage_Organization = () => { | |||
// response.data["status"] = response.data?.locked?"locked":response.data?.status; | |||
response.data["preferLocale"] = getObjectByType(ComboData.Locale, "type", response.data?.preferLocale); | |||
//response.data["orgId"] = response.data.brExpiryDate?DateUtils.dateStr(response.data.brExpiryDate):""; | |||
//response.data["orgId"] = response.data.brExpiryDate?DateUtils.dateValue(response.data.brExpiryDate):""; | |||
// console.log("3") | |||
// console.log(response.data) | |||
@@ -174,9 +180,10 @@ const UserMaintainPage_Organization = () => { | |||
response.data["fax_countryCode"] = response.data.faxNo?.countryCode; | |||
response.data["preferLocale"] = getObjectByType(ComboData.Locale, "type", response.data?.preferLocale); | |||
//response.data["orgId"] = response.data.brExpiryDate?DateUtils.dateStr(response.data.brExpiryDate):""; | |||
//response.data["orgId"] = response.data.brExpiryDate?DateUtils.dateValue(response.data.brExpiryDate):""; | |||
setUserData(response.data); | |||
setOrgData(response.orgList); | |||
setLoding(false); | |||
// console.log(response.data) | |||
} | |||
}); | |||
@@ -171,9 +171,10 @@ const UserSearchForm = ({ applySearch }) => { | |||
<Grid item sx={{ ml: 3, mr: 3, mb: 3,}}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -1,15 +1,13 @@ | |||
// material-ui | |||
import * as React from 'react'; | |||
import { GridActionsCellItem,} from "@mui/x-data-grid"; | |||
import {FiDataGrid} from "components/FiDataGrid"; | |||
import EditIcon from '@mui/icons-material/Edit'; | |||
import {useEffect} from "react"; | |||
import {useNavigate} from "react-router-dom"; | |||
import { useTheme } from '@mui/material/styles'; | |||
import Checkbox from '@mui/material/Checkbox'; | |||
import * as UrlUtils from "../../../utils/ApiPathConst"; | |||
import * as HttpUtils from '../../../utils/HttpUtils'; | |||
import { notifyLockSuccess, notifyUnlockSuccess } from 'utils/CommonFunction'; | |||
import { notifyLockSuccess, notifyUnlockSuccess , clickableLink} from 'utils/CommonFunction'; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
@@ -23,10 +21,6 @@ export default function UserTable({recordList,setChangeLocked}) { | |||
setRows(recordList); | |||
}, [recordList]); | |||
const handleEditClick = (id) => () => { | |||
navigate('/user/'+ id); | |||
}; | |||
const handleLock = (params) => () => { | |||
setChangeLocked(false) | |||
if (params.row.locked==true){ | |||
@@ -60,29 +54,32 @@ export default function UserTable({recordList,setChangeLocked}) { | |||
}; | |||
const columns = [ | |||
{ | |||
field: 'actions', | |||
type: 'actions', | |||
headerName: 'Actions', | |||
width: 100, | |||
cellClassName: 'actions', | |||
getActions: ({id}) => { | |||
return [ | |||
<GridActionsCellItem | |||
key="OutSave" | |||
icon={<EditIcon/>} | |||
label="Edit" | |||
className="textPrimary" | |||
onClick={handleEditClick(id)} | |||
color="primary" | |||
/>] | |||
}, | |||
}, | |||
// { | |||
// field: 'actions', | |||
// type: 'actions', | |||
// headerName: 'Actions', | |||
// width: 100, | |||
// cellClassName: 'actions', | |||
// getActions: ({id}) => { | |||
// return [ | |||
// <GridActionsCellItem | |||
// key="OutSave" | |||
// icon={<EditIcon/>} | |||
// label="Edit" | |||
// className="textPrimary" | |||
// onClick={handleEditClick(id)} | |||
// color="primary" | |||
// />] | |||
// }, | |||
// }, | |||
{ | |||
id: 'username', | |||
field: 'username', | |||
headerName: 'Username', | |||
flex: 1, | |||
renderCell: (params) => { | |||
return clickableLink('/user/'+ params.row.id, params.row.username); | |||
}, | |||
}, | |||
{ | |||
id: 'enName', | |||
@@ -17,7 +17,7 @@ import {ThemeProvider} from "@emotion/react"; | |||
const UserSearchForm_Individual = ({ applySearch }) => { | |||
const [type, setType] = useState([]); | |||
const [accountFilter, setAccountFilter] = useState("Active"); | |||
const [accountFilter, setAccountFilter] = useState("All"); | |||
const { reset, register, handleSubmit } = useForm() | |||
const onSubmit = (data) => { | |||
@@ -42,6 +42,7 @@ const UserSearchForm_Individual = ({ applySearch }) => { | |||
function resetForm() { | |||
setType([]); | |||
setAccountFilter("All"); | |||
reset(); | |||
} | |||
@@ -120,6 +121,8 @@ const UserSearchForm_Individual = ({ applySearch }) => { | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
setAccountFilter(newValue); | |||
}else{ | |||
setAccountFilter("All"); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
@@ -150,9 +153,10 @@ const UserSearchForm_Individual = ({ applySearch }) => { | |||
<Grid item sx={{ ml: 3, mr: 3, mb: 3 }}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -47,24 +47,28 @@ export default function UserTable_Individual({ recordList }) { | |||
field: 'username', | |||
headerName: 'User Name', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'enName', | |||
field: 'enName', | |||
headerName: 'Name (Eng)', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'chName', | |||
field: 'chName', | |||
headerName: 'Name (Ch)', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'mobileNumber', | |||
field: 'mobileNumber', | |||
headerName: 'Phone', | |||
flex: 1, | |||
minWidth: 150, | |||
valueGetter: (params) => { | |||
if (params.value) { | |||
let tel = JSON.parse(params.value); | |||
@@ -80,12 +84,14 @@ export default function UserTable_Individual({ recordList }) { | |||
field: 'emailAddress', | |||
headerName: 'Email', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'lastLogin', | |||
field: 'lastLogin', | |||
headerName: 'Last Login', | |||
flex: 1, | |||
minWidth: 200, | |||
valueGetter: (params) => { | |||
if (params.value) { | |||
return DateUtils.datetimeStr(params.value); | |||
@@ -98,6 +104,7 @@ export default function UserTable_Individual({ recordList }) { | |||
field: 'locked', | |||
headerName: 'Status', | |||
flex: 1, | |||
minWidth: 100, | |||
valueGetter: (params) => { | |||
if (params.value) { | |||
return "Locked"; | |||
@@ -147,6 +147,8 @@ const UserSearchForm_Organization = ({applySearch}) => { | |||
onChange={(event, newValue) => { | |||
if (newValue !== null){ | |||
setAccountFilter(newValue); | |||
}else{ | |||
setAccountFilter("All"); | |||
} | |||
}} | |||
renderInput={(params) => ( | |||
@@ -177,9 +179,10 @@ const UserSearchForm_Organization = ({applySearch}) => { | |||
<Grid item sx={{ml:3, mr:3, mb:3}}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -51,36 +51,42 @@ export default function UserTable_Organization({recordList}) { | |||
field: 'username', | |||
headerName: 'Username', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'contactPerson', | |||
field: 'contactPerson', | |||
headerName: 'Name', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'enCompanyName', | |||
field: 'enCompanyName', | |||
headerName: 'Company (Eng)', | |||
flex: 1, | |||
minWidth: 200, | |||
}, | |||
{ | |||
id: 'chCompanyName', | |||
field: 'chCompanyName', | |||
headerName: 'Company (Ch)', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'brNo', | |||
field: 'brNo', | |||
headerName: 'BR No.', | |||
flex: 1, | |||
minWidth: 150, | |||
}, | |||
{ | |||
id: 'lastLogin', | |||
field: 'lastLogin', | |||
headerName: 'Last Login', | |||
flex: 1, | |||
minWidth: 200, | |||
valueGetter:(params)=>{ | |||
if(params.value){ | |||
return DateUtils.datetimeStr(params.value); | |||
@@ -93,6 +99,7 @@ export default function UserTable_Organization({recordList}) { | |||
field: 'locked', | |||
headerName: 'Status', | |||
flex: 1, | |||
minWidth: 100, | |||
valueGetter:(params)=>{ | |||
if(params.value){ | |||
return "Locked"; | |||
@@ -302,6 +302,7 @@ const Index = () => { | |||
<Grid item xs={12} md={12} lg={12}> | |||
<TextField | |||
fullWidth | |||
autoFocus | |||
onChange={(e) => { | |||
formik.handleChange(e); | |||
changePassword(e.target.value); | |||
@@ -148,6 +148,7 @@ const ForgotPasswordApplyForm = () => { | |||
value={formik.values.username} | |||
error={Boolean(formik.touched.username && formik.errors.username)} | |||
onBlur={formik.handleBlur} | |||
autoFocus | |||
inputProps={{ | |||
maxLength: 50, | |||
onKeyDown: (e) => { | |||
@@ -309,6 +309,7 @@ const Index = () => { | |||
<Grid item xs={12} md={12} lg={12}> | |||
<TextField | |||
fullWidth | |||
autoFocus | |||
onChange={(e) => { | |||
formik.handleChange(e); | |||
changePassword(e.target.value); | |||
@@ -141,6 +141,7 @@ const ForgotUsernameApplyForm = () => { | |||
<Grid item xs={12} md={12} lg={12} sx={{ mb: 3}} > | |||
<TextField | |||
fullWidth | |||
autoFocus | |||
onChange={formik.handleChange} | |||
id="emailAddress" | |||
name="emailAddress" | |||
@@ -274,6 +274,7 @@ const AuthLoginCustom = () => { | |||
onChange={formik.handleChange} | |||
placeholder="" | |||
fullWidth | |||
autoFocus | |||
value={formik.values.username} | |||
error={Boolean(formik.touched.username && formik.errors.username)} | |||
onBlur={formik.handleBlur} | |||
@@ -624,6 +624,7 @@ const BusCustomFormWizard = (props) => { | |||
}} | |||
placeholder={intl.formatMessage({id: 'userLoginName'})} | |||
fullWidth | |||
autoFocus | |||
error={Boolean((formik.touched.username && formik.errors.username) || checkUsername)} | |||
onBlur={formik.handleBlur} | |||
inputProps={{ | |||
@@ -722,6 +722,7 @@ const CustomFormWizard = (props) => { | |||
}} | |||
placeholder={intl.formatMessage({ id: 'userLoginName' })} | |||
fullWidth | |||
autoFocus | |||
error={Boolean((formik.touched.username && formik.errors.username) || checkUsername)} | |||
onBlur={formik.handleBlur} | |||
inputProps={{ | |||
@@ -463,6 +463,7 @@ const CustomFormWizard = (props) => { | |||
</InputLabel> | |||
<OutlinedInput | |||
fullWidth | |||
autoFocus | |||
error={Boolean(formik.touched.address1 && formik.errors.address1)} | |||
id="address1-signup" | |||
value={formik.values.address1} | |||
@@ -33,7 +33,7 @@ const SearchDemandNoteForm = () => { | |||
list.push( | |||
<Stack direction="column" > | |||
<Typography variant='h4' align="justify"><b>{locale === 'en' ?item.subjectEng:locale === 'zh-HK' ?item.subjectCht:item.subjectChs}</b></Typography> | |||
<Typography align="justify">{DateUtils.dateStr(item.announceDate)}</Typography> | |||
<Typography align="justify">{DateUtils.dateValue(item.announceDate)}</Typography> | |||
<Typography align="justify"sx={{ pt: 1 }}>{locale === 'en' ?item.contentEng:locale === 'zh-HK' ?item.contentCht:item.contentChs}</Typography> | |||
<Divider fullWidth sx={{ pt: 1 }}></Divider> | |||
</Stack> | |||
@@ -1,58 +0,0 @@ | |||
import { Grid, Button, TextField } from '@mui/material'; | |||
import { useState } from 'react'; | |||
import axios from 'axios'; | |||
import { apiPath } from 'auth/utils'; | |||
const TestMailPage = () => { | |||
const [host, setHost] = useState(apiPath+'/test'); | |||
const [mail, setMail] = useState(''); | |||
const [tempKey, setTempKey] = useState(''); | |||
const hostChange = (event) => { | |||
setHost(event.target.value); | |||
}; | |||
const mailChange = (event) => { | |||
setMail(event.target.value); | |||
}; | |||
const tempKeyChange = (event) => { | |||
setTempKey(event.target.value); | |||
}; | |||
const doMailTest = () => { | |||
axios.post(host, { | |||
email: mail, | |||
tempKey: tempKey, | |||
}) | |||
.then((response) => { | |||
console.log(response.data); | |||
// Handle data | |||
}) | |||
.catch((error) => { | |||
console.log(error); | |||
}) | |||
}; | |||
return ( | |||
<Grid | |||
container | |||
alignItems='center' | |||
sx={{ | |||
maxWidth: { xs: 1, lg: 1000 }, | |||
margin: { xs: 2.5, md: 3 }, | |||
'& > *': { | |||
flexGrow: 1, | |||
flexBasis: '100%' | |||
} | |||
}} | |||
spacing={3}> | |||
<Grid item xs={12}><TextField id='hostField' label='Email Api' variant='filled' onChange={hostChange} value={host} fullWidth /></Grid> | |||
<Grid item xs={12}><TextField id='mailField' label='Target Email' variant='filled' onChange={mailChange} value={mail} fullWidth /></Grid> | |||
<Grid item xs={12}><TextField id='mailField' label='Email Template Key' variant='filled' onChange={tempKeyChange} value={tempKey} fullWidth /></Grid> | |||
<Grid item xs={12}><Button variant='contained' onClick={doMailTest}>Test</Button></Grid> | |||
</Grid> | |||
); | |||
}; | |||
export default TestMailPage; |
@@ -94,9 +94,10 @@ const UserGroupSearchForm = ({ applySearch }) => { | |||
<Grid item sx={{mr:3}}> | |||
<Button | |||
variant="contained" | |||
color="cancel" | |||
onClick={resetForm} | |||
> | |||
Clear | |||
Reset | |||
</Button> | |||
</Grid> | |||
@@ -31,7 +31,6 @@ const IAmSmart_AuthCallback = Loadable(lazy(() => import('pages/iAmSmart/AuthCal | |||
const IAmSmart_RegistryCallback = Loadable(lazy(() => import('pages/iAmSmart/RegistryCallback'))); | |||
//TODO: this page for testing only, please remove at prod | |||
const TestMailPage = Loadable(lazy(() => import('pages/pnspsNotifyTest'))); | |||
const VerifyPage = Loadable(lazy(() => import('pages/authentication/Verify'))); | |||
const Testfps = Loadable(lazy(() => import('pages/Payment/FPS/FPSTest'))); | |||
const Payment_FPS_CallBack = Loadable(lazy(() => import('pages/Payment/FPS/fpscallback'))); | |||
@@ -42,10 +41,6 @@ const LoginRoutes = { | |||
path: '/', | |||
element: <MainLayout />, | |||
children: [ | |||
{//TODO: this page for testing only, please remove at prod | |||
path: 'testMailPage', | |||
element: <TestMailPage/> | |||
}, | |||
{ | |||
path: 'login', | |||
element: <AuthLogin /> | |||
@@ -94,10 +89,6 @@ const LoginRoutes = { | |||
path: 'iamsmart/loginSucess', | |||
element: <IAmSmart_SuccessCallback/> | |||
}, | |||
{ | |||
path: 'testMailPage', | |||
element: <TestMailPage/> | |||
}, | |||
{ | |||
path: 'verify/:verifyCode/:email', | |||
element: <VerifyPage/> | |||
@@ -71,6 +71,8 @@ | |||
"MSG.plzSelectApp": "Please select application", | |||
"MSG.actionFail": "Action failed", | |||
"MSG.paymentHolded": "Application number {appNo} is currently in the process of payment. If the payment is unsuccessful, please try again after 20 minutes. We apologise for any inconvenience caused.", | |||
"MSG.pay_credity1": "We have received your confirmed application for proofreading and printing instructions regarding application number {appNo}. We will arrange for its publication with in the Year {year}, Volume {issueVolume}, Issue {issueNo} of the Official Gazette.", | |||
"MSG.pay_credity2": "The fee for this public notice will be consolidated in the next Payment Notice. Please ensure timely payment.", | |||
"registerTitle1": "Become", | |||
"registerTitle2": "Gazette Notice", | |||
@@ -357,8 +359,8 @@ | |||
"paymentHistory": "Payment History", | |||
"proofId": "Proof Code", | |||
"proofDate": "Proofing Date", | |||
"proofDateFrom": "Proofing Date (From)", | |||
"proofDateTo": "Proofing Date (To)", | |||
"proofDateFrom": "Proof Date (From)", | |||
"proofDateTo": "Proof Date (To)", | |||
"replyDate": "Reply Date", | |||
"fee": "Amount ($)", | |||
"payFeeFor": "Pay for", | |||
@@ -393,7 +395,7 @@ | |||
"paymentRefCode": "Payment Reference Number", | |||
"paymentInfoRecord": "Payment Notice Record", | |||
"paymentRecordId": "Payment Record Number", | |||
"paymentRecordId": "Payment Record No.", | |||
"receiptDate": "Issuance Date", | |||
"sendDate": "Send Date", | |||
"sendDateFrom": "Send Date (From)", | |||
@@ -2,7 +2,7 @@ | |||
"en": "English", | |||
"zh-HK": "繁體中文", | |||
"zh-CN": "简体中文", | |||
"language":"語言", | |||
"language":"语言", | |||
"PNSPS": "公共启事提交及缴费系统", | |||
"HKSARGOV": "香港特别行政区政府", | |||
@@ -70,6 +70,8 @@ | |||
"MSG.plzSelectApp": "请选择公共启事。", | |||
"MSG.actionFail": "行动失败", | |||
"MSG.paymentHolded": "申请编号 {appNo} 已正在付款的流程中,如相关付款没有成功,请于20分钟后再尝试付款,不便之处,请见谅!", | |||
"MSG.pay_credity1": "我们已收到你已确定申请编号: {appNo} 的稿件校对确定及可付印的指示,并将安排刊登于宪报期数{year} 年{issueVolume} 卷第{issueNo } 期内。", | |||
"MSG.pay_credity2": "此公共启事申请的费用将于下期发出的缴费发票时收取,请依时缴费。", | |||
"registerTitle1": "立即成为", | |||
"registerTitle2": "宪报刊登公共启事", | |||
@@ -70,6 +70,8 @@ | |||
"MSG.plzSelectApp": "請選擇公共啟事。", | |||
"MSG.actionFail": "行動失敗", | |||
"MSG.paymentHolded": "申請編號 {appNo} 已正在付款的流程中,如相關付款沒有成功,請於20分鐘後再嘗試付款,不便之處,請見諒!", | |||
"MSG.pay_credity1": "我們已收到你已確定申請編號: {appNo} 的稿件校對確定及可付印的指示,並將安排刊登於憲報 期數 {year} 年 {issueVolume} 卷 第 {issueNo} 期內。", | |||
"MSG.pay_credity2": "此公共啟事申請的費用將於下期發出的繳費發票時收取,請依時繳費。", | |||
"registerTitle1": "立即成為", | |||
"registerTitle2": "憲報刊登公共啟事", | |||
@@ -61,14 +61,12 @@ export const publicNoticeStatic_Creditor = [ | |||
{ key: 8, label: 'withdrawn', type: 'withdrawn' }, | |||
]; | |||
export const publicNoticeStatic_GLD = [ | |||
{ key: 0, label: 'All', type: 'all' }, | |||
{ key: 1, label: 'Submitted', type: 'submitted' }, | |||
{ key: 2, label: 'Reviewed', type: 'reviewed' }, | |||
{ key: 3, label: 'Confirmed', type: 'confirmed' }, | |||
{ key: 3, label: 'Paid', type: 'paid' }, | |||
{ key: 4, label: 'Published', type: 'published' }, | |||
{ key: 3, label: 'Pending Publish', type: 'pendingPublish' }, | |||
{ key: 4, label: 'Pending Payment', type: 'pendingPayment' }, | |||
{ key: 5, label: 'Completed', type: 'completed' }, | |||
{ key: 6, label: 'Not Accepted', type: 'notAccepted' }, | |||
{ key: 7, label: 'Re-Submit Required', type: 'resubmit' }, | |||
@@ -77,6 +75,21 @@ export const publicNoticeStatic_GLD = [ | |||
]; | |||
// export const publicNoticeStatic_GLD = [ | |||
// { key: 0, label: 'All', type: 'all' }, | |||
// { key: 1, label: 'Submitted', type: 'submitted' }, | |||
// { key: 2, label: 'Reviewed', type: 'reviewed' }, | |||
// { key: 3, label: 'Confirmed', type: 'confirmed' }, | |||
// { key: 3, label: 'Paid', type: 'paid' }, | |||
// { key: 4, label: 'Published', type: 'published' }, | |||
// { key: 5, label: 'Completed', type: 'completed' }, | |||
// { key: 6, label: 'Not Accepted', type: 'notAccepted' }, | |||
// { key: 7, label: 'Re-Submit Required', type: 'resubmit' }, | |||
// { key: 8, label: 'Cancelled', type: 'cancelled' }, | |||
// { key: 9, label: 'Withdrawn', type: 'withdrawn' }, | |||
// ]; | |||
export const groupTitle = [ | |||
{ key: 1, labelCht: 'A1 - 私人帳單', label: 'A1 - Private Bill', title: 'Private Bill', type: 'A'}, | |||
{ key: 2, labelCht: 'A2 - ???', label: 'A2 - Stock Shares', title: 'Stock Shares', type: 'A'}, | |||