// material-ui import { Grid, Button, Checkbox, FormControlLabel, Typography, Dialog, DialogTitle, DialogContent, DialogActions, FormHelperText, TextField, } from '@mui/material'; // import { FormControlLabel } from '@material-ui/core'; import MainCard from "components/MainCard"; import * as React from "react"; import { useFormik } from 'formik'; import { useForm } from "react-hook-form"; import * as yup from 'yup'; import { useEffect, useState, lazy } from "react"; import * as DateUtils from 'utils/DateUtils'; import * as HttpUtils from 'utils/HttpUtils'; import * as UrlUtils from "utils/ApiPathConst"; import * as FieldUtils from "utils/FieldUtils"; import * as ComboData from "utils/ComboData"; const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); import Loadable from 'components/Loadable'; import { notifySaveSuccess } from 'utils/CommonFunction'; import { useIntl } from "react-intl"; import { PNSPS_BUTTON_THEME } from "themes/buttonConst"; import { ThemeProvider } from "@emotion/react"; import { isGrantedAny } from "auth/utils"; import { DatePicker } from "@mui/x-date-pickers/DatePicker"; import dayjs from "dayjs"; import { DemoItem } from "@mui/x-date-pickers/internals/demo"; import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; // ==============================|| DASHBOARD - DEFAULT ||============================== // const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { const intl = useIntl(); const [creditorConfirmPopUp, setCreditorConfirmPopUp] = React.useState(false); const [nonCreditorConfirmPopUp, setNonCreditorConfirmPopUp] = React.useState(false); const [currentUserData, setCurrentUserData] = useState({}); const [editMode, setEditMode] = useState(false); const [createMode, setCreateMode] = useState(false); const [onReady, setOnReady] = useState(false); const [errorMsg, setErrorMsg] = useState(""); const [minDate] = React.useState(new Date().setDate(new Date().getDate() + 1)); const [fromDate, setFromDate] = React.useState(null); const [currentFromDate, setCurrentFromDate] = React.useState(null); const [fromDateValue, setFromDateValue] = React.useState(null); const { register, handleSubmit, reset } = useForm() React.useEffect(() => { setFromDateValue(fromDate); }, [fromDate]); useEffect(() => { //if state data are ready and assign to different field // console.log(currentApplicationDetailData) if (Object.keys(currentUserData).length > 0) { console.log(currentUserData) if (DateUtils.dateValue(currentUserData.brExpiryDate) > DateUtils.dateValue(minDate)) { setFromDate(currentUserData.brExpiryDate); } else { setCurrentFromDate(currentUserData.brExpiryDate); // setErrorMsg("Please select a date after today.") } setOnReady(true); } }, [currentUserData]); function displayErrorMsg(errorMsg) { return {errorMsg} } function getMaxErrStr(num, fieldname) { return displayErrorMsg(intl.formatMessage({ id: 'noMoreThenNWords' }, { num: num, fieldname: fieldname ? intl.formatMessage({ id: fieldname }) + ": " : "" })); } function getRequiredErrStr(fieldname) { return displayErrorMsg(intl.formatMessage({ id: 'require' }, { fieldname: fieldname ? intl.formatMessage({ id: fieldname }) : "" })); } const formik = useFormik({ enableReinitialize: true, initialValues: currentUserData, validationSchema: yup.object().shape({ enCompanyName: yup.string().max(255, getMaxErrStr(255)).required(displayErrorMsg(intl.formatMessage({ id: 'userRequireEnglishName' }))), chCompanyName: yup.string().max(255, displayErrorMsg(intl.formatMessage({ id: 'userRequireChineseName' }))).nullable(), orgShortName: yup.string().max(24, getMaxErrStr(24)).required(getRequiredErrStr("orgShortName")), addressLine1: yup.string().max(40, getMaxErrStr(40)).required(displayErrorMsg(intl.formatMessage({ id: 'validateAddressLine1' }))), addressLine2: yup.string().max(40, getMaxErrStr(40)), addressLine3: yup.string().max(40, getMaxErrStr(40)), contactPerson: yup.string().max(60, getMaxErrStr(60)).required(getRequiredErrStr("contactPerson")), fax_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({ id: 'requireDialingCode' }))).nullable(), tel_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({ id: 'requireDialingCode' }))), phoneNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({ id: 'requiredValidNumber' }))).required(displayErrorMsg(intl.formatMessage({ id: 'requireContactNumber' }))), faxNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({ id: 'require8Number' }))).nullable(), brExpiryDate: yup.string().min(8).required(displayErrorMsg(intl.formatMessage({ id: 'pleaseFillInBusinessRegCertValidityDate' }))), brNo: yup.string().required(displayErrorMsg(intl.formatMessage({ id: 'pleaseFillInBusinessRegCertNumber' }))).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(intl.formatMessage({ id: 'pleaseFillInValidBusinessRegCertNumber' }))), function (value) { var brNo_pattern = /[0-9]{8}/ if (value !== undefined) { if (value.match(brNo_pattern)) { return true } else { return false } } }), }), onSubmit: (values) => { if (values.country == null) { setErrorMsg(intl.formatMessage({ id: 'pleaseFillInCountry' })) } else { if (values.country.type == "hongKong" && values.district == null) { setErrorMsg(intl.formatMessage({ id: 'pleaseFillInDistrict' })) } else { let sentDateFrom = ""; if (fromDateValue == null) { setErrorMsg(intl.formatMessage({ id: 'pleaseFillInBusinessRegCertValidityDate' })) } else { sentDateFrom = DateUtils.dateValue(fromDateValue) HttpUtils.post({ url: UrlUtils.POST_ORG_SAVE_PATH, params: { id: id > 0 ? id : null, enCompanyName: values.enCompanyName, chCompanyName: values.chCompanyName, orgShortName: values.orgShortName === "N/A" ? "" : values.orgShortName, brNo: values.brNo, // brExpiryDate: values.brExpiryDate, brExpiryDate: sentDateFrom, enCompanyNameTemp: values.enCompanyNameTemp, chCompanyNameTemp: values.chCompanyNameTemp, brExpiryDateTemp: values.brExpiryDateTemp, contactPerson: values.contactPerson, contactTel: { countryCode: values.tel_countryCode, phoneNumber: values.phoneNumber }, faxNo: { countryCode: values.fax_countryCode, faxNumber: values.faxNumber }, addressTemp: { country: values.country.type, district: values.district?.type, addressLine1: values.addressLine1, addressLine2: values.addressLine2, addressLine3: values.addressLine3, }, creditor: values.creditor, }, onSuccess: function () { notifySaveSuccess() loadDataFun(); setEditMode(false); } }); } } } } }); useEffect(() => { setEditModeFun(editMode); }, [editMode]); useEffect(() => { if (Object.keys(userData).length > 0) { setCreateMode(id <= 0); setEditMode(id <= 0); setCurrentUserData(userData); } }, [userData]); // useEffect(() => { // if (Object.keys(userData).length > 0) { // if(userData.creditor === undefined||userData.creditor === null){ // userData.creditor = false // } // setCurrentUserData(userData); // } // }, []); const onEditClick = () => { setEditMode(true); }; const onSubmit = (data) => { let sentOrgShortName = ""; if (data.orgShortName != null && data.orgShortName != "" && data.orgShortName != "N/A") { sentOrgShortName = data.orgShortName if (sentOrgShortName.length <= 24) { const temp = { orgShortName: sentOrgShortName, }; markAsCreditor(temp); } else { alert("Organisation Short Name must not exceed 24 characters.") } } else { alert("Please enter Organisation Short Name for Demand Note.") } }; function resetForm() { reset(); } const markAsCreditor = (temp) => { setCreditorConfirmPopUp(false); HttpUtils.post({ url: UrlUtils.GET_ORG_MARK_AS_CREDITOR + "/" + id, params: temp, onSuccess: () => { resetForm(); loadDataFun(); } }); } const markAsNonCreditor = () => { setNonCreditorConfirmPopUp(false); HttpUtils.get({ url: UrlUtils.GET_ORG_MARK_AS_NON_CREDITOR + "/" + id, onSuccess: () => { loadDataFun(); } }); } const sendDn_terminationOfCredit = () => { setNonCreditorConfirmPopUp(false); HttpUtils.get({ url: UrlUtils.GET_SEND_TERMINATION_OF_CREDIT + "/" + id, onSuccess: () => { loadDataFun(); } }); } return (
{/*top*/} {isGrantedAny("MAINTAIN_ORG") ? {editMode ? <> {createMode ? <> : <> } : <> { currentUserData.creditor ? : <> } } : <> } {/*top*/} {!onReady ? : Organisation Details {errorMsg} {FieldUtils.getTextField({ label: FieldUtils.notNullFieldLabel("BR No.:"), valueName: "brNo", disabled: (!editMode && !createMode), form: formik })} } label="is Credit Client" name="creditor" onChange={() => { formik.setFieldValue("creditor", !formik.values.creditor); }} disabled={true} //disabled={!editMode && !createMode} /> {FieldUtils.getTextField({ label: FieldUtils.notNullFieldLabel("Name (Eng):"), valueName: "enCompanyName", disabled: (!editMode && !createMode), form: formik })} {FieldUtils.getTextField({ label: "Name (Ch):", valueName: "chCompanyName", disabled: (!editMode && !createMode), form: formik })} {FieldUtils.notNullFieldLabel("Expiry Date:")} {(!editMode && !createMode) ? : { // console.log(newValue) // setErrorMsg("") if (DateUtils.dateValue(newValue) > DateUtils.dateValue(new Date())) { setFromDate(newValue); } else { // setErrorMsg("Please select a date after today.") } }} /> } { fromDate == null ? (!editMode && !createMode) ? // // Please select a date after today. // null : {intl.formatMessage({ id: 'pleaseFillInBusinessRegCertValidityDate' })} : null } {FieldUtils.getTextField({ label: FieldUtils.notNullFieldLabel("Contact Person:"), valueName: "contactPerson", disabled: (!editMode && !createMode), form: formik })} {FieldUtils.getPhoneField({ label: FieldUtils.notNullFieldLabel("Contact Tel:"), valueName: { code: "tel_countryCode", num: "phoneNumber" }, disabled: (!editMode && !createMode), form: formik })} {FieldUtils.getPhoneField({ label: "Fax No:", valueName: { code: "fax_countryCode", num: "faxNumber" }, disabled: (!editMode && !createMode), form: formik })} {FieldUtils.getComboField({ label: FieldUtils.notNullFieldLabel("Country:"), valueName: "country", disabled: (!editMode && !createMode), dataList: ComboData.country, getOptionLabel: (option) => option.type ? intl.formatMessage({ id: option.type }) : "", form: formik })} {FieldUtils.getComboField({ label: FieldUtils.notNullFieldLabel("District:"), valueName: "district", disabled: (!editMode && !createMode), dataList: ComboData.district, getOptionLabel: (option) => option.type ? intl.formatMessage({ id: option.type }) : "", form: formik })} { currentUserData.creditor ? {FieldUtils.getTextField({ label: FieldUtils.notNullFieldLabel("Org. Short Name:"), valueName: "orgShortName", disabled: (!editMode && !createMode), form: formik })} : null } {FieldUtils.getAddressField({ label: FieldUtils.notNullFieldLabel("Address:"), valueName: ["addressLine1", "addressLine2", "addressLine3"], disabled: (!editMode && !createMode), form: formik })} }
setCreditorConfirmPopUp(false)} PaperProps={{ sx: { minWidth: '40vw', maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } } }} >
Confirm Are you sure mark as Credit Client? Please Enter Organisation Short Name for Credit Client (Used for Demand Note) {/* */}
setNonCreditorConfirmPopUp(false)} PaperProps={{ sx: { minWidth: '40vw', maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } } }} > Confirm Are you sure mark as Non-Credit Client?
); }; export default OrganizationCard;