@@ -5,26 +5,35 @@ import { | |||
Typography, | |||
FormLabel, | |||
TextField, | |||
Button, | |||
Stack, | |||
Dialog, DialogTitle, DialogContent, DialogActions, | |||
} from '@mui/material'; | |||
import { useFormik } from 'formik'; | |||
import * as React from "react"; | |||
import * as HttpUtils from "utils/HttpUtils" | |||
import * as UrlUtils from "utils/ApiPathConst" | |||
import * as DateUtils from "utils/DateUtils" | |||
import * as FormatUtils from "utils/FormatUtils" | |||
import { useNavigate } from "react-router-dom"; | |||
import { useParams } from "react-router-dom"; | |||
import Loadable from 'components/Loadable'; | |||
const MainCard = Loadable(React.lazy(() => import('components/MainCard'))); | |||
import * as StatusUtils from "utils/statusUtils/PublicNoteStatusUtils"; | |||
import FileList from "components/FileList" | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const ApplicationDetailCard = ({ | |||
formData, | |||
const ApplicationDetailCard = ({ | |||
formData, | |||
showCancelBtn | |||
// setBackButtonPos | |||
}) => { | |||
const params = useParams(); | |||
const navigate = useNavigate() | |||
const [data, setData] = React.useState({}); | |||
const [cancelPopUp, setCancelPopUp] = React.useState(false); | |||
//const [proofId, setProofId] = React.useState(); | |||
React.useEffect(() => { | |||
@@ -61,8 +70,22 @@ const ApplicationDetailCard = ({ | |||
/>; | |||
} | |||
const confirmCancel = () =>{ | |||
setCancelPopUp(false); | |||
HttpUtils.get({ | |||
url: UrlUtils.CANCEL_PROOF+"/"+params.id, | |||
onSuccess: function(){ | |||
navigate("/proof/reply/"+params.id); | |||
} | |||
}); | |||
} | |||
const doCancel = () =>{ | |||
setCancelPopUp(true); | |||
} | |||
// React.useEffect(()=>{ | |||
// if (document.getElementById("applicationDetailsMainCard")) setBackButtonPos(`${document.getElementById("applicationDetailsMainCard")?.getBoundingClientRect().left / 3}px`) | |||
// if (document.getElementById("applicationDetailsMainCard")) setBackButtonPos(`${document.getElementById("applicationDetailsMainCard")?.getBoundingClientRect().left / 3}px`) | |||
// },[document.getElementById("applicationDetailsMainCard")]) | |||
return ( | |||
@@ -72,7 +95,25 @@ const ApplicationDetailCard = ({ | |||
content={false} | |||
> | |||
<Typography variant="h4" sx={{ textAlign: "left", mb: 2, borderBottom: "1px solid black" }}> | |||
Public Notice: Proofreading Reply | |||
<Stack | |||
direction="row" | |||
justifyContent="space-between" | |||
alignItems="center" | |||
> | |||
Public Notice: Proofreading Reply | |||
<Button | |||
component="span" | |||
variant="contained" | |||
size="large" | |||
color="error" | |||
disabled={showCancelBtn} | |||
onClick={doCancel} | |||
> | |||
<Typography variant="h5">Cancel</Typography> | |||
</Button> | |||
</Stack> | |||
</Typography> | |||
<form> | |||
<Grid container direction="column"> | |||
@@ -237,6 +278,18 @@ const ApplicationDetailCard = ({ | |||
</Grid> | |||
</Grid> | |||
<div> | |||
<Dialog open={cancelPopUp} onClose={() => setCancelPopUp(false)} > | |||
<DialogTitle><Typography variant="h3">Confirm</Typography></DialogTitle> | |||
<DialogContent style={{ display: 'flex', }}> | |||
<Typography variant="h4" style={{ padding: '16px' }}>Are you sure you want to cancel this proof?</Typography> | |||
</DialogContent> | |||
<DialogActions> | |||
<Button onClick={() => setCancelPopUp(false)}><Typography variant="h5">Cancel</Typography></Button> | |||
<Button onClick={() => confirmCancel()}><Typography variant="h5">Confirm</Typography></Button> | |||
</DialogActions> | |||
</Dialog> | |||
</div> | |||
</form> | |||
</MainCard> | |||
); | |||
@@ -14,7 +14,7 @@ import * as DateUtils from "utils/DateUtils" | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
const FormPanel = ({ formData }) => { | |||
const FormPanel = ({ formData, isOverTime }) => { | |||
const [data, setData] = React.useState({}); | |||
const params = useParams(); | |||
@@ -32,17 +32,6 @@ const FormPanel = ({ formData }) => { | |||
const isOverTime = () => { | |||
let returnBeforeDate = DateUtils.convertToDate(formik.values?.returnBeforeDate); | |||
if (!returnBeforeDate) return true; | |||
returnBeforeDate = returnBeforeDate.setHours(14, 0, 0, 0); | |||
let current = new Date(); | |||
return current.getTime() > returnBeforeDate; | |||
} | |||
return ( | |||
<MainCard xs={12} md={12} lg={12} | |||
border={false} | |||
@@ -84,7 +73,7 @@ const FormPanel = ({ formData }) => { | |||
</Grid> | |||
: | |||
( | |||
isOverTime() ? | |||
isOverTime ? | |||
<Grid container direction="column" sx={{ paddingLeft: 4, paddingRight: 4 }} spacing={1}> | |||
<Grid item xs={12} md={12} textAlign="left"> | |||
<Typography variant="h5">The response timed out, please apply again.</Typography> | |||
@@ -36,8 +36,10 @@ const Index = () => { | |||
const params = useParams(); | |||
const navigate = useNavigate() | |||
const [record, setRecord] = React.useState(); | |||
const [record, setRecord] = React.useState({}); | |||
const [onReady, setOnReady] = React.useState(false); | |||
const [isOverTime, setIsOverTime] = React.useState(false); | |||
const [showCancelBtn, setShowCancelBtn] = React.useState(false); | |||
React.useLayoutEffect(() => { | |||
loadForm(); | |||
@@ -71,6 +73,12 @@ const Index = () => { | |||
responseData.data["groupType"] = responseData.data.groupNo.charAt(0); | |||
responseData.data["action"] = responseData.data.replyDate ? responseData.data.action : true; | |||
let returnBeforeDate = DateUtils.convertToDate(responseData.data.returnBeforeDate); | |||
let current = new Date(); | |||
setIsOverTime(current.getTime() > returnBeforeDate.getTime()); | |||
setShowCancelBtn(responseData.data.cancelled || responseData.data.replyDate || current.getTime() > returnBeforeDate.getTime()) | |||
setRecord(responseData.data); | |||
} | |||
}); | |||
@@ -125,6 +133,7 @@ const Index = () => { | |||
<ApplicationDetails | |||
// setBackButtonPos={setBackButtonPos} | |||
formData={record} | |||
showCancelBtn={showCancelBtn} | |||
style={{ | |||
display: "flex", | |||
height: "100%", | |||
@@ -137,6 +146,7 @@ const Index = () => { | |||
<Box xs={12} md={12} sx={{ p: 4, borderRadius: '10px', backgroundColor: '#ffffff' }}> | |||
<ProofForm | |||
formData={record} | |||
isOverTime={isOverTime} | |||
/> | |||
</Box> | |||
</Grid> | |||
@@ -80,6 +80,7 @@ export const GET_PROOF = apiPath+'/proof/details';//GET | |||
export const REPLY_PROOF = apiPath+'/proof/reply';//GET | |||
export const PROOF_CHECK_PRICE = apiPath+'/proof/check-price';//GET | |||
export const GET_PROOF_PAY = apiPath+'/proof/pay-details';//GET | |||
export const CANCEL_PROOF = apiPath+'/proof/cancel';//GET | |||
export const PAYMENT_CREATE = apiPath+'/payment/create';//POST | |||
@@ -5,21 +5,25 @@ const confirm = {color:"#22a13f", eng:"Confirmed", cht:"可以付印"} | |||
const unable = {color:"#d9372b", eng:"Re-proofing", cht:"未能付印"} | |||
const timeOut = {color:"#8a8784", eng:"No Reply", cht:"回覆逾時"} | |||
const pendingReply = {color:"#f5a83d", eng:"Pending Reply", cht:"未回覆"} | |||
const cancel = {color:"#000", textColor:"#fff", eng:"Cancelled", cht:"已取消"} | |||
export function getStatus_Cht(params) { | |||
let status = getStatus(params); | |||
return getStatusTag({color: status.color, text:status.cht }) | |||
return getStatusTag({color: status.color, textColor:status.textColor, text:status.cht }) | |||
} | |||
export function getStatus_Eng(params) { | |||
let status = getStatus(params); | |||
return getStatusTag({color: status.color, text:status.eng }) | |||
return getStatusTag({color: status.color, textColor:status.textColor, text:status.eng }) | |||
} | |||
function getStatus(params) { | |||
let replyDate = params.row?params.row.replyDate:params.replyDate; | |||
let action = params.row?params.row.action:params.action; | |||
let returnBeforeDate = params.row?params.row.returnBeforeDate:params.returnBeforeDate; | |||
let isCancelled = params.row?params.row.cancelled:params.cancelled; | |||
if(isCancelled) return cancel; | |||
if(replyDate){ | |||
return action?confirm:unable; | |||