// material-ui import { Dialog, DialogTitle, DialogContent, DialogActions, Typography, Autocomplete, CardContent, Grid, Stack, TextField, FormLabel, Button } from '@mui/material'; import * as UrlUtils from "utils/ApiPathConst"; import * as HttpUtils from "utils/HttpUtils"; import * as DateUtils from "utils/DateUtils" import MainCard from "components/MainCard"; import * as ComboData from "utils/ComboData"; import * as React from "react"; import { useFormik } from 'formik'; import { useNavigate } from "react-router-dom"; import Loadable from 'components/Loadable'; import { notifySaveSuccess } from 'utils/CommonFunction'; const UploadFileTable = Loadable(React.lazy(() => import('./UploadFileTable'))); const FormPanel = ({ formData }) => { const [data, setData] = React.useState({}); const [columnPrice, setColumnPrice] = React.useState(ComboData.proofPrice[0]); const [attachments, setAttachments] = React.useState([]); const [checkCode, setCheckCode] = React.useState(""); const [expectedCode, setExpectedCode] = React.useState(""); const [wait, setWait] = React.useState(false); const [isWarningPopUp, setIsWarningPopUp] = React.useState(false); const [warningText, setWarningText] = React.useState(""); const [saving, setSaving] = React.useState(false); const [proofPaymentDeadlineMin, setProofPaymentDeadlineMin] = React.useState({}); const [reviseDeadlineMin, setReviseDeadlineMin] = React.useState({}); const navigate = useNavigate() React.useEffect(() => { if (formData) { setData(formData); if (formData.groupType == "Private Bill") { setColumnPrice(ComboData.proofPrice[1]) formData['length'] = 18; } setProofPaymentDeadlineMin(formData.proofPaymentDeadline); setReviseDeadlineMin(formData.reviseDeadline); setExpectedCode(formData.groupNo.substr(1,formData.groupNo.length)+"-"+formData.issueNo+"-"+formData.issueYear.toString().substr(2, formData.issueYear.toString().length)); } }, [formData]); React.useEffect(() => { if (!attachments || attachments.length <= 0) { formik.setFieldValue("length", 0); formik.setFieldValue("noOfPages", 0); formik.setFieldValue("fee", 0); return; } doCalculate(); }, [attachments]); const doCalculate = () => { setWait(true); if (!attachments || attachments.length <= 0) { setWarningText("Unable to calculate, please upload a valid document."); setIsWarningPopUp(true); setWait(false); return; } HttpUtils.postWithFiles({ url: UrlUtils.PROOF_CHECK_PRICE, params: { appId: data.id, }, files: attachments, onSuccess: function (responseData) { if (responseData.data.detail) { setWarningText("Unable to calculate, please upload a valid document or input manually."); setIsWarningPopUp(true); setWait(false); return; } formik.setFieldValue("length", responseData.data.length); let colValue = 0; setColumnPrice(ComboData.proofPrice.find(obj => { colValue = obj.value; return obj.colCount === responseData.data.column })); formik.setFieldValue("noOfPages", responseData.data.total_no_of_page); formik.setFieldValue("fee", (data.groupType == "Private Bill" ? 6552 * responseData.data.total_no_of_page : responseData.data.length * colValue)); if (data.groupType == "Private Bill" && responseData.data.file.length > 0) { let attachmentList = attachments; for (let i = 0; i < responseData.data.file.length; i++) { let file = responseData.data.file[i]; attachmentList.find(item => item.name == file.filename)["no_of_page"] = file.no_of_page; } setAttachments(attachmentList); } setCheckCode(responseData.data.check_code); setWait(false); }, onError: function () { // console.log(error) setWarningText("Unable to calculate, please input manually."); setIsWarningPopUp(true); setWait(false); } }); } const formik = useFormik({ enableReinitialize: true, initialValues: data, onSubmit: values => { setSaving(true); if (!attachments || attachments.length <= 0) { setWarningText("Please upload file."); setIsWarningPopUp(true); setSaving(false); return; } if (!values.length|| values.length <= 0) { setWarningText("Column should > 0"); setIsWarningPopUp(true); setSaving(false); return; } if(formik.values.groupType == "Private Bill" ){ if (!values.noOfPages || values.noOfPages <= 0) { setWarningText("Page should > 0"); setIsWarningPopUp(true); setSaving(false); return; } } // console.log(values); HttpUtils.postWithFiles({ url: UrlUtils.CREATE_PROOF, params: { appId: values.id, fee: values.fee, length: values.length, colCount: columnPrice.colCount, noOfPages: values.noOfPages, reviseDeadline: DateUtils.convertToDate(values.reviseDeadline).getTime(), proofPaymentDeadline: DateUtils.convertToDate(values.proofPaymentDeadline).getTime() }, files: attachments, onSuccess: function (responeData) { if (responeData.success == true) { notifySaveSuccess() navigate("/proof/search"); } else { let msg = responeData.msg; if (msg === "haveActiveProof") { msg = "Action Failed: There is already a pending payment and proofreading record for client review." } else if (msg === "haveProofed") { msg = "Action Failed: Already proofed." } setWarningText(msg); setIsWarningPopUp(true); } } }); } }); const readFile = (event) => { let file = event.target.files[0]; if (file) { if (!file.name.toLowerCase().substr(file.name.length - 4).includes(".pdf")) { setWarningText("Please upload a valid file (File format: .pdf)."); setIsWarningPopUp(true); document.getElementById("uploadFileBtn").value = ""; return; } if (file.size >= (10 * 1024 * 1034)) { setWarningText("The file size for uploading should be less than 10MB"); setIsWarningPopUp(true); return; } file['id'] = attachments.length; setAttachments([ ...attachments, file ]); document.getElementById("uploadFileBtn").value = ""; } } return (
{/*row 1*/} Proof {/*row 2*/} Deadline for online manuscript revision: Deadline for online confirm proof: = (formik.values.groupType == "Private Bill" ? 2 : 1)} onChange={(event) => { readFile(event) }} /> { wait ? Calculating, please wait ... : } { formik.values.groupType == "Private Bill" ? { const value = parseInt(event.target.value); formik.setFieldValue("noOfPages", value); formik.setFieldValue("fee", 6552 * value); }} variant="outlined" sx={ { "& .MuiInputBase-input.Mui-disabled": { WebkitTextFillColor: "#000000", background: "#f8f8f8", }, width: '15%' } } /> pages x ${formik.values.price ? formik.values.price : "6,552"} : { let value = parseInt(event.target.value); formik.setFieldValue("length", value); formik.setFieldValue("fee", columnPrice.value * value); }} name="length" value={formik.values["length"]} variant="outlined" sx={ { "& .MuiInputBase-input.Mui-disabled": { WebkitTextFillColor: "#000000", background: "#f8f8f8", }, width: '15%' } } /> cm x option.label ? option.label : ""} onChange={(event, newValue) => { setColumnPrice(newValue) formik.values["fee"] = newValue.value * formik.values.length; }} renderInput={(params) => ( )} /> } Necessary fee: $
setIsWarningPopUp(false)} PaperProps={{ sx: { minWidth: '40vw', maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } } }} > Warning {warningText}
setWait(false)} PaperProps={{ sx: { minWidth: '40vw', maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } } }} > Calculating, please wait ...
); }; export default FormPanel;