// 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 } 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 { lazy } from 'react';
import { notifySaveSuccess } from 'utils/CommonFunction';
import { useIntl } from "react-intl";
import { PNSPS_BUTTON_THEME } from "themes/buttonConst";
import { ThemeProvider } from "@emotion/react";
import { makeStyles } from '@mui/styles';
// ==============================|| DASHBOARD - DEFAULT ||============================== //
const useStyles = makeStyles(() => ({
root: {
position: "relative"
},
display: {
position: "absolute",
top: 2,
left: 12,
bottom: 2,
background: "white",
pointerEvents: "none",
right: 50,
display: "flex",
alignItems: "center",
width:"70%"
},
}));
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());
const [fromDate, setFromDate] = React.useState("dd / mm / yyyy");
const [fromDateValue, setFromDateValue] = React.useState("dd / mm / yyyy");
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) {
setFromDate(currentUserData.brExpiryDate)
setOnReady(true);
}
}, [currentUserData]);
function FormDateInputComponent({ inputRef, ...props }) {
const classes = useStyles();
return (
<>
{DateUtils.dateStr(fromDateValue) == "Invalid Date" ?
fromDateValue
:
DateUtils.dateStr(fromDateValue)}
>
);
}
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("Org. Short Name")),
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 != "dd / mm / yyyy") {
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.creditor?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!=""){
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();
}
});
}
return (
);
};
export default OrganizationCard;