import { useEffect, useState } from "react"; import * as React from "react"; import {getBowserType} from "auth/utils"; // material-ui import { Button, FormLabel, Stack, Typography, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Grid, Box } from '@mui/material'; import { useFormik, FormikProvider } from 'formik'; import * as yup from 'yup'; import Loadable from 'components/Loadable'; const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); import * as FormatUtils from "utils/FormatUtils"; import VisaIcon from "assets/images/icons/visacard.svg"; import MasterIcon from "assets/images/icons/mastercard.svg"; import JcbIcon from "assets/images/icons/jcb.svg"; import UnionPayIcon from "assets/images/icons/unionpay.svg"; import PpsIcon from "assets/images/icons/ppshk.svg"; import FpsIcon from "assets/images/icons/fps.svg"; import {FormattedMessage, useIntl} from "react-intl"; import * as HttpUtils from "utils/HttpUtils" import * as UrlUtils from "utils/ApiPathConst" const MultiPaymentWindow = (props) => { const intl = useIntl(); const windowTitle = intl.formatMessage({id: 'selectPaymentMethod'}); // const [content, setContent] = useState(); const [loadtTransactionData, setLoadtTransactionData] = useState({}); const [loadAvailableMethodData, setLoadAvailableMethodData] = useState([]); const [paymentMethod, setPaymentMethod] = useState(""); const [isLimit, setIsLimit] = useState(false); const [isPPSLimit, setIsPPSLimit] = useState(false); const [transactionData, setTransactionData] = useState({}); const [availableMethodData, setAvailableMethodData] = useState([]); const [fpsClass, setFpsClass] = useState(""); const [visaClass, setVisaClass] = useState(""); const [mastercardClass, setMastercardClass] = useState(""); const [jCBClass, setJCBClass] = useState(""); const [unionPayClass, setUnionPayClass] = useState(""); const [pPSClass, setPPSlass] = useState(""); const [filteredPaymentMethod, setFilteredPaymentMethod] = useState([]); const [onReady, setOnReady] = useState(false); const [paymentHoldedErrText, setPaymentHoldedErrText] = React.useState(""); const [paymentHoldedErr, setPaymentHoldedErr] = React.useState(false); const mobileBrowser = "Mobile"; useEffect(() => { // console.log(props.transactionData) if(Object.keys(props.transactionData).length > 0){ setLoadtTransactionData(props.transactionData) // console.log(props.browserType) } }, [props.transactionData]); useEffect(() => { // console.log(props.availableMethods) if(props.availableMethods.length > 0){ setLoadAvailableMethodData(props.availableMethods) } }, [props.availableMethods]); useEffect(() => { if(Object.keys(loadtTransactionData).length > 0){ setTransactionData(loadtTransactionData) } }, [loadtTransactionData]); useEffect(() => { if(Object.keys(transactionData).length > 0&&props.availableMethods.length > 0){ setLoadAvailableMethodData(props.availableMethods) } }, [transactionData]); useEffect(() => { if(loadAvailableMethodData.length > 0){ setAvailableMethodData(loadAvailableMethodData) } }, [loadAvailableMethodData]); useEffect(() => { if(filteredPaymentMethod!= undefined && filteredPaymentMethod.length>0){ setOnReady(true) } else if(filteredPaymentMethod!= undefined && Object.keys(filteredPaymentMethod).length > 0){ setOnReady(true) } }, [filteredPaymentMethod]); useEffect(() => { const availableMethod = availableMethodData; if(props.availableMethods.length > 0){ const filteringPaymentMethod = availableMethod.filter(obj => { if (obj.supportedcard && obj.supportedcard.includes(paymentMethod)) { return obj.subtype === "CreditCard"; } return obj.subtype === paymentMethod; }); if (isLimit && filteringPaymentMethod!= undefined && filteringPaymentMethod.length>0){ if (paymentMethod == "FPS" || paymentMethod == "PPS"){ filteringPaymentMethod[0].pointstonote = paymentMethod + intl.formatMessage({id: 'paymentLimitPrice1'}) setFilteredPaymentMethod(filteringPaymentMethod[0]); } else if (isLimit) { filteringPaymentMethod[0].pointstonote = paymentMethod + intl.formatMessage({id: 'paymentLimitPrice2'}) setFilteredPaymentMethod(filteringPaymentMethod[0]); } } if (!isLimit && filteringPaymentMethod!= undefined && filteringPaymentMethod.length>0){ setFilteredPaymentMethod(filteringPaymentMethod); } if(isPPSLimit && filteringPaymentMethod!= undefined && filteringPaymentMethod.length>0 && paymentMethod =="PPS"){ filteringPaymentMethod[0].pointstonote = paymentMethod + intl.formatMessage({id: 'paymentLimitPPS'}) setFilteredPaymentMethod(filteringPaymentMethod[0]); } setFpsClass(paymentMethod == "FPS" || paymentMethod == "" ? "" : "grayscale") setVisaClass(paymentMethod == "Visa" || paymentMethod == "" ? "" : "grayscale") setMastercardClass(paymentMethod == "MasterCard" || paymentMethod == "" ? "" : "grayscale") setJCBClass(paymentMethod == "JCB" || paymentMethod == "" ? "" : "grayscale") setUnionPayClass(paymentMethod == "UnionPay" || paymentMethod == "" ? "" : "grayscale") setPPSlass(paymentMethod == "PPS" || paymentMethod == "" ? "" : "grayscale") } }, [paymentMethod]); const selectedPaymentMethodHandle = (method) => () =>{ if (method != paymentMethod){ resetForm() let totalAmount = props.totalAmount; // totalAmount = 99999999.99 // totalAmount = 0.01 const paymentLimitList = props.paymentLimit let limitRecordList; switch (method) { case "Visa": case "JCB": case "MasterCard": limitRecordList = paymentLimitList.creditCardLimitRecord; break; case "FPS": limitRecordList = paymentLimitList.fpsLimitRecord; break; case "PPS": limitRecordList = paymentLimitList.ppsbLimitRecord; break; case "UnionPay": limitRecordList = paymentLimitList.unionPlayLimitRecord; break; default: break; } if (totalAmount >= limitRecordList.minLimit && totalAmount <= limitRecordList.maxLimit) { setIsLimit(false) } else { setIsLimit(true) } if (getBowserType() === "PC_Browser"){ setPaymentMethod(method) props.setSelectedPaymentMethod(method); setIsPPSLimit(false) } else if (getBowserType() !== "PC_Browser" && method !== "PPS"){ setPaymentMethod(method) props.setSelectedPaymentMethod(method); } else { setPaymentMethod(method) setIsPPSLimit(true) } } }; const confirmPaymentHandle = () => () =>{ handlePaymentCheck() }; const handlePaymentCheck = () => { let appIdList = props.appIds // console.log(props.appIds) // console.log(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 filteredData = latestDataObjects.filter(item => item.timeDiff > 30 || item.status == "CANC" || item.status == "REJT"); 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){ props.setConfirmPayment(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); } } }); }; const closeHandle = () => () =>{ resetForm() props.setOpen(false) }; const resetForm = () =>{ setOnReady(false) setPaymentMethod("") setFilteredPaymentMethod([]) setIsLimit(false) setIsPPSLimit(false) }; useEffect(() => { if(props.selectedPaymentMethod === ""){ setPaymentMethod("") } }, [availableMethodData]); const formik = useFormik({ initialValues: ({ username: '', }), validationSchema: yup.object().shape({ }), }); return ( props.setOpen(false)} fullWidth={true} maxWidth={'xl'} fullScreen={props.isFullScreen} > {windowTitle}
: {transactionData.transactionid} {/* 付款金額: HK$ {FormatUtils.currencyFormat(props.totalAmount)} */} {!props.onReady ? :availableMethodData.length>0? : {props.browserType==mobileBrowser? null : } {paymentMethod !=""? {paymentMethod} : null} : }  ($):  {" HK$ " + FormatUtils.currencyFormat(props.totalAmount)} {paymentMethod === "" ? paymentMethod !="" && !onReady ? : null : !isLimit? !onReady? : !isLimit? filteredPaymentMethod.length>0? filteredPaymentMethod.map((availableMethod) => { return ( { availableMethod.pointstonote.map((pointstonote) => { return ( {pointstonote.content} ); }) } ); }) : null : null : !onReady? : {filteredPaymentMethod.pointstonote} }
{ props.onPayment? : }
setPaymentHoldedErr(false)} PaperProps={{ sx: { minWidth: '40vw', maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } } }} >
); }; export default MultiPaymentWindow;