// material-ui import { FormControl, Button, Grid, // InputAdornment, Typography, FormLabel, OutlinedInput, Stack, Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material'; // import MainCard from "../../components/MainCard"; const MainCard = Loadable(lazy(() => import('components/MainCard'))); import { useForm } from "react-hook-form"; import { useNavigate } from "react-router-dom"; import { useEffect, useState, lazy } from "react"; // import Checkbox from "@mui/material/Checkbox"; import Loadable from 'components/Loadable'; const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); // import {useParams} from "react-router-dom"; import * as HttpUtils from "utils/HttpUtils" import * as UrlUtils from "utils/ApiPathConst" import * as StatusUtils from "utils/statusUtils/PublicNoteStatusUtils"; import * as DateUtils from "utils/DateUtils"; import * as FormatUtils from "utils/FormatUtils"; import { isORGLoggedIn, } from "utils/Utils"; // import BorderColorOutlinedIcon from '@mui/icons-material/BorderColorOutlined'; // import DoneIcon from '@mui/icons-material/Done'; import CloseIcon from '@mui/icons-material/Close'; import EditNoteIcon from '@mui/icons-material/EditNote'; import DownloadIcon from '@mui/icons-material/Download'; import { PNSPS_BUTTON_THEME } from "../../../themes/buttonConst"; import { ThemeProvider } from "@emotion/react"; import { FormattedMessage, useIntl } from "react-intl"; // ==============================|| DASHBOARD - DEFAULT ||============================== // const ApplicationDetailCard = ( { applicationDetailData, setStatus, fee } ) => { const [isPopUp, setIsPopUp] = useState(false); const [errorText, setErrorText] = useState(""); const [errorPopUp, setErrorPopUp] = useState(false); const [paymentHoldedErrText, setPaymentHoldedErrText] = useState(""); const [paymentHoldedErr, setPaymentHoldedErr] = useState(false); // const params = useParams(); const [currentApplicationDetailData, setCurrentApplicationDetailData] = useState({}); const [companyName, setCompanyName] = useState({}); const [fileDetail, setfileDetail] = useState({}); const [onReady, setOnReady] = useState(false); const [issueNum, setIssueNum] = useState(""); const [issueDate, setIssueDate] = useState(""); const { register, // getValues } = useForm(); const navigate = useNavigate(); const intl = useIntl(); useEffect(() => { //if user data from parent are not null // console.log(applicationDetailData) if (Object.keys(applicationDetailData)?.length > 0 && applicationDetailData.data !== null) { setCurrentApplicationDetailData(applicationDetailData.data); setCompanyName(applicationDetailData.companyName); setfileDetail(applicationDetailData.fileDetail); setIssueNum(applicationDetailData.gazetteIssueDetail.volume + "/" + applicationDetailData.gazetteIssueDetail.issueYear + " No. " + applicationDetailData.gazetteIssueDetail.issueNo); setIssueDate(DateUtils.dateFormat(applicationDetailData.gazetteIssueDetail.issueDate, "D MMM YYYY (ddd)")); } }, [applicationDetailData]); useEffect(() => { //if state data are ready and assign to different field // console.log(currentApplicationDetailData) if (Object.keys(currentApplicationDetailData)?.length > 0) { setOnReady(true); } }, [currentApplicationDetailData]); const onDownloadClick = () => () => { HttpUtils.fileDownload({ fileId: fileDetail?.id, skey: fileDetail?.skey, filename: fileDetail?.filename, }); }; const cancelledClick = () => () => { setStatus("cancel") }; const checkExprityDate = () => { HttpUtils.post({ url: UrlUtils.POST_CHECK_APP_EXPRITY_DATE, params: { ids: [currentApplicationDetailData.id] }, onSuccess: (responData) => { if (responData.success == true) { let appIdList = [currentApplicationDetailData.id] handlePaymentCheck(appIdList) return; } setErrorText(intl.formatMessage({ id: "MSG.expiredApp" })); setErrorPopUp(true); } }); }; function doPayment() { setIsPopUp(false); let appIdList = [currentApplicationDetailData.id] navigate('/paymentPage', { state: { amount: fee, appIdList: appIdList } }); } const handlePaymentCheck = (appIdList) => { HttpUtils.post({ url: UrlUtils.PAYMENT_CHECK, params: { appIds: appIdList }, onSuccess: (responseData) => { const latestData = {}; responseData.forEach(item => { const { appId, timeDiff } = item; if (latestData[appId] === undefined || timeDiff < latestData[appId].timeDiff) { latestData[appId] = item; } }); const latestDataObjects = Object.values(latestData); 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)); const combinedAppIdsArray = [...appIdsNotInData, ...filteredAppIds]; const readyToPayment = appIdList.every(appId => combinedAppIdsArray.includes(appId)); if (readyToPayment) { setIsPopUp(true); return; } else { const appIdsInData = appIdList.filter(appId => !combinedAppIdsArray.some(item => item === appId)); const HoldingApplication = latestDataObjects.filter(item => appIdsInData.includes(item.appId)); const resultString = HoldingApplication.map(item => item.appNo).join(' , '); setPaymentHoldedErrText(resultString); // setPaymentHoldedErrText(intl.formatMessage({ id: 'MSG.paymentHolded' }, { appNo: record.appNo })); setPaymentHoldedErr(true); } } }); }; return ( !onReady ? : { currentApplicationDetailData.status == "confirmed" ? { checkExprityDate(true) }} disabled={currentApplicationDetailData.status == "rejected" || currentApplicationDetailData.status == "cancelled" || currentApplicationDetailData.status == "paid" || currentApplicationDetailData.creditor} startIcon={} aria-label={intl.formatMessage({ id: 'payFor' })} > : null } } aria-label={intl.formatMessage({ id: 'cancel' })} > : : {currentApplicationDetailData.status ? StatusUtils.getStatusByTextIntl(currentApplicationDetailData.status, currentApplicationDetailData.creditor, intl) : ""} { currentApplicationDetailData.reason ? : {currentApplicationDetailData.reason} : "" } : {currentApplicationDetailData.orgId === null ? : } : : : : { fee > 0 ? (HK$): : <>> } : : {fileDetail?.filename} } > {isORGLoggedIn() ? : : null } : setIsPopUp(false)} PaperProps={{ sx: { minWidth: '40vw', maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '30vw' }, maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '50vh' } } }} > (HK$): {FormatUtils.currencyFormat(fee)} setIsPopUp(false)} aria-label={intl.formatMessage({ id: 'close' })} > doPayment()} aria-label={intl.formatMessage({ id: 'confirm' })} > setErrorPopUp(false)} PaperProps={{ sx: { minWidth: '40vw', maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } } }} > { errorText } setErrorPopUp(false)} aria-label={intl.formatMessage({ id: 'close' })} > setPaymentHoldedErr(false)} PaperProps={{ sx: { minWidth: '40vw', maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } } }} > setPaymentHoldedErr(false)} aria-label={intl.formatMessage({ id: 'close' })}> ); }; export default ApplicationDetailCard;