import { Box, Button, Chip, Divider, Grid, Stack, TextField, ToggleButton, ToggleButtonGroup } from "@mui/material"; import { useFormik } from "formik"; import { useTranslations } from "next-intl"; import * as Yup from "yup"; import SelectBox from "@/core/components/SelectBox"; import PlateNumber from "@/core/components/PlateNumber"; import MuiDatePicker from "@/core/components/MuiDatePicker"; import moment from "jalali-moment"; import useProvince from "@/lib/app/hooks/useProvince"; import useCities from "@/lib/app/hooks/useCities"; import UseEducations from "@/lib/app/hooks/useEducations"; import useOccupations from "@/lib/app/hooks/useOccupations"; import { UPDATE_LOAN } from "@/core/data/apiRoutes"; import { useRequest } from "@witel/webapp-builder"; import { useRouter } from "next/router"; import { useEffect } from "react"; import EditIcon from "@mui/icons-material/Edit"; import * as React from "react"; import useProjectTitle from "@/lib/app/hooks/useProjectTitle"; import useActivityType from "@/lib/app/hooks/useActivityType"; import PriceField from "@/core/components/PriceField"; import useWorkYear from "@/lib/app/hooks/useWorkYear"; const vehicle_amount = { اتوبوس: parseInt(process.env.NEXT_PUBLIC_BUS_AMOUNT), "مینی بوس": parseInt(process.env.NEXT_PUBLIC_MINIBUS_AMOUNT), }; const UpdateFormReal = ({ LoanDetails, LoanId }) => { const t = useTranslations(); const provinceStates = useProvince(); const router = useRouter(); const citiesStates = useCities(); const { projectTitle, isLoadingProjectTitle, errorProjectTitle } = useProjectTitle(); const { activityType, isLoadingActivityType, errorActivityType } = useActivityType(); const { workYear, isLoadingWorkYear, errorWorkYear } = useWorkYear(); const educationStates = UseEducations(); const occupationStates = useOccupations(); const requestServer = useRequest(); const initialValues = { national_serial_number_or_tracking_code: LoanDetails.national_serial_number ? "serial_number" : "tracking_code", national_id: LoanDetails.national_id || "", activity_type: LoanDetails.activity_type_id || "", navgan_plan_id: LoanDetails.navgan_plan_id || "", postal_code: LoanDetails.postal_code || "", user_existing_employment: LoanDetails.user_existing_employment || "", user_committed_employment: LoanDetails.user_committed_employment || "", address: LoanDetails.address || "", birthday: LoanDetails.birthday ? moment(LoanDetails.birthday) : "", navgan_id: LoanDetails.navgan_id || "", province_id: LoanDetails.province_id || "", investment: Number(LoanDetails.investment_amount) || "", requested_facilities: Number(LoanDetails.requested_facility_amount) || "", applicant_payment: Number(LoanDetails.person_share) || "", city_id: LoanDetails.city_id || "", first_name: LoanDetails.first_name || "", last_name: LoanDetails.last_name || "", father_name: LoanDetails.father_name || "", gender: LoanDetails.gender === null ? "" : LoanDetails.gender, occupation_id: LoanDetails.occupation_id || "", navgan_type: LoanDetails.navgan_type || "", vehicle_type: LoanDetails.vehicle_type || "", work_year: LoanDetails.work_year || "", telephone_number: LoanDetails.telephone_number || "", plate_part1: LoanDetails.plate_number.split("-")[0] || "", plate_part2: LoanDetails.plate_number.split("-")[1] || "", plate_part3: LoanDetails.plate_number.split("-")[2] || "", plate_part4: LoanDetails.plate_number.split("-")[3] || "", education_id: LoanDetails.education_id || "", national_serial_number: LoanDetails.national_serial_number ?? "", national_tracking_code: LoanDetails.national_tracking_code ?? "", }; useEffect(() => { citiesStates.setProvinceID(LoanDetails.province_id); }, [LoanDetails.province_id]); const validationSchema = Yup.object().shape({ postal_code: Yup.mixed() .test("max", `${t("ShowLoan.postal_code_max")}`, (value) => value.toString().length === 10) .required(t("ShowLoan.error_message_postal_code")), address: Yup.string().required(t("ShowLoan.error_message_address")), province_id: Yup.string().required(t("ShowLoan.error_message_province_id")), work_year: Yup.string().required(t("ShowLoan.error_message_work_year")), activity_type: Yup.string().required(t("ShowLoan.error_message_activity_type")), requested_facilities: Yup.mixed() .test( "max-amount", `${t("ShowLoan.max_amount", { value: parseInt(vehicle_amount[LoanDetails.vehicle_type]).toLocaleString("en"), })}`, (value) => value <= vehicle_amount[LoanDetails.vehicle_type] ) .required(t("ShowLoan.error_message_requested_facilities")), investment: Yup.string().required(t("ShowLoan.error_message_investment")), navgan_plan_id: Yup.string().required(t("ShowLoan.error_message_navgan_plan_id")), city_id: Yup.string().required(t("ShowLoan.error_message_city_id")), telephone_number: Yup.mixed() .test("max", `${t("ShowLoan.tel_number_max")}`, (value) => { const stringValue = String(value); return stringValue.length === 11; }) .required(t("ShowLoan.error_message_tel_number")), occupation_id: Yup.string().required(t("ShowLoan.error_message_occupation_id")), first_name: Yup.string().required(t("ShowLoan.error_message_first_name")), last_name: Yup.string().required(t("ShowLoan.error_message_last_name")), gender: Yup.string().required(t("ShowLoan.error_message_gender")), user_committed_employment: Yup.string().required(t("ShowLoan.error_message_user_committed_employment")), user_existing_employment: Yup.string().required(t("ShowLoan.error_message_user_existing_employment")), father_name: Yup.string().required(t("ShowLoan.error_message_father_name")), education_id: Yup.string().required(t("ShowLoan.error_message_education_id")), birthday: Yup.string().required(t("ShowLoan.error_message_date_of_birth")), national_serial_number: Yup.string().when( "national_serial_number_or_tracking_code", ([national_serial_number_or_tracking_code], schema) => { return national_serial_number_or_tracking_code === "serial_number" ? schema .test( "max", `${t("LoanRequest.national_serial_number_max")}`, (value) => value && value.toString().length === 10 ) .required(t("ShowLoan.error_message_shenasname_serial")) : schema; } ), national_tracking_code: Yup.string().when( "national_serial_number_or_tracking_code", ([national_serial_number_or_tracking_code], schema) => { return national_serial_number_or_tracking_code === "tracking_code" ? schema .test( "max", `${t("LoanRequest.national_tracking_code_max")}`, (value) => value && value.toString().length === 10 ) .required(t("ShowLoan.error_message_tracking_code")) : schema; } ), }); const handleSubmit = async (values, props) => { props.setSubmitting(true); const formData = new FormData(); if (values.national_serial_number_or_tracking_code === "serial_number") { formData.append("national_serial_number", values.national_serial_number); } else { formData.append("national_tracking_code", values.national_tracking_code); } formData.append("birthday", values.birthday.locale("en").format("YYYY-MM-DD")); formData.append("postal_code", values.postal_code); formData.append("work_year", values.work_year); formData.append("navgan_plan_id", values.navgan_plan_id); formData.append("activity_type_id", values.activity_type); formData.append("first_name", values.first_name); formData.append("requested_facility_amount", Number(values.requested_facilities)); formData.append("investment_amount", Number(values.investment)); formData.append("person_share", Number(values.applicant_payment)); formData.append("user_committed_employment", values.user_committed_employment); formData.append("user_existing_employment", values.user_existing_employment); formData.append("last_name", values.last_name); formData.append("father_name", values.father_name); formData.append("gender", values.gender); formData.append("city_id", values.city_id); formData.append("telephone_number", values.telephone_number); formData.append("education_id", values.education_id); formData.append("occupation_id", values.occupation_id); formData.append("address", values.address); await requestServer(UPDATE_LOAN + LoanId, "post", { auth: true, notification: true, data: formData, }) .then(() => { router.push("/dashboard/followUp-loan"); }) .catch(() => {}) .finally(() => { props.setSubmitting(false); }); }; const formik = useFormik({ initialValues, validationSchema, onSubmit: handleSubmit, }); const handleAmountChange = (event) => { if (!isNaN(event.target.value)) { formik.setFieldValue("requested_facilities", event.target.value).then(() => { formik.setFieldTouched("applicant_payment", false, false); formik.setFieldValue("applicant_payment", Math.floor(event.target.value * 0.2)); }); } else { formik.setFieldValue("requested_facilities", formik.values.requested_facilities); } }; return ( <> { formik.setFieldValue("activity_type", event.target.value); }} setFieldTouched={formik.setFieldTouched} error={formik.touched.activity_type && Boolean(formik.errors.activity_type)} helperText={formik.touched.activity_type && formik.errors.activity_type} onBlur={formik.handleBlur("activity_type")} /> { const inputValue = event.target.value; if (isNaN(Number(inputValue))) { return; } formik.handleChange({ target: { name: "postal_code", value: inputValue, }, }); }} error={!!(formik.touched.postal_code && formik.errors.postal_code)} fullWidth onBlur={formik.handleBlur("postal_code")} helperText={formik.touched.postal_code ? formik.errors.postal_code : null} /> { formik.setFieldValue("navgan_type", event.target.value); }} setFieldTouched={formik.setFieldTouched} error={formik.touched.navgan_type && Boolean(formik.errors.navgan_type)} helperText={formik.touched.navgan_type && formik.errors.navgan_type} onBlur={formik.handleBlur("navgan_type")} /> formik.setFieldValue("vehicle_type", event.target.value)} error={formik.touched.vehicle_type && Boolean(formik.errors.vehicle_type)} helperText={formik.touched.vehicle_type && formik.errors.vehicle_type} onBlur={formik.handleBlur("vehicle_type")} /> { if (value === null) return; formik.handleChange({ target: { name: "national_serial_number_or_tracking_code", value: value, }, }); value === "serial_number" ? formik.setFieldValue( "national_tracking_code", formik.initialValues.national_tracking_code, false ) : formik.setFieldValue( "national_serial_number", formik.initialValues.national_serial_number, false ); }} > {t("ShowLoan.text_field_shenasname_serial")} {t("ShowLoan.text_field_national_trackin_code")} {formik.values.national_serial_number_or_tracking_code === "serial_number" ? ( { const inputValue = e.target.value; const regex = /^[A-Za-z0-9]*$/; if (regex.test(inputValue)) { formik.setFieldValue("national_serial_number", inputValue); } }} /> ) : ( { const inputValue = event.target.value; if (isNaN(Number(inputValue))) { return; } formik.handleChange({ target: { name: "national_tracking_code", value: inputValue, }, }); }} /> )} {provinceStates.provinceList.length !== 0 ? ( { formik.setFieldValue("province_id", event.target.value); citiesStates.setProvinceID(event.target.value); formik.setFieldTouched("city_id", false, false); formik.setFieldValue("city_id", ""); }} setFieldTouched={formik.setFieldTouched} error={formik.touched.province_id && Boolean(formik.errors.province_id)} helperText={formik.touched.province_id && formik.errors.province_id} onBlur={formik.handleBlur("province_id")} /> ) : ( )} {citiesStates.cityList.length !== 0 ? ( formik.setFieldValue("city_id", event.target.value)} setFieldTouched={formik.setFieldTouched} error={formik.touched.city_id && Boolean(formik.errors.city_id)} helperText={formik.touched.city_id && formik.errors.city_id} onBlur={formik.handleBlur("city_id")} /> ) : ( )} { const inputValue = event.target.value; if (isNaN(Number(inputValue))) { return; } formik.handleChange({ target: { name: "telephone_number", value: inputValue, }, }); }} label={t("ShowLoan.text_field_tel_number")} placeholder={t("ShowLoan.text_field_enter_your_tel_number")} fullWidth onBlur={formik.handleBlur("telephone_number")} error={formik.touched.telephone_number && Boolean(formik.errors.telephone_number)} helperText={formik.touched.telephone_number && formik.errors.telephone_number} /> { formik.setFieldValue("work_year", event.target.value); }} setFieldTouched={formik.setFieldTouched} error={formik.touched.work_year && Boolean(formik.errors.work_year)} helperText={formik.touched.work_year && formik.errors.work_year} onBlur={formik.handleBlur("work_year")} /> {educationStates.educationsList.length !== 0 ? ( { formik.setFieldValue("education_id", event.target.value); }} setFieldTouched={formik.setFieldTouched} error={formik.touched.education_id && Boolean(formik.errors.education_id)} helperText={formik.touched.education_id && formik.errors.education_id} onBlur={formik.handleBlur("education_id")} /> ) : ( )} {occupationStates.occupationsList.length !== 0 ? ( { formik.setFieldValue("occupation_id", event.target.value); }} setFieldTouched={formik.setFieldTouched} error={formik.touched.occupation_id && Boolean(formik.errors.occupation_id)} helperText={formik.touched.occupation_id && formik.errors.occupation_id} onBlur={formik.handleBlur("occupation_id")} /> ) : ( )} { const inputValue = event.target.value; if (isNaN(Number(inputValue))) { return; } formik.handleChange({ target: { name: "user_committed_employment", value: inputValue, }, }); }} fullWidth helperText={ formik.touched.user_committed_employment ? formik.errors.user_committed_employment : null } onBlur={formik.handleBlur("user_committed_employment")} /> { const inputValue = event.target.value; if (isNaN(Number(inputValue))) { return; } formik.handleChange({ target: { name: "user_existing_employment", value: inputValue, }, }); }} fullWidth helperText={ formik.touched.user_existing_employment ? formik.errors.user_existing_employment : null } onBlur={formik.handleBlur("user_existing_employment")} /> { const inputValue = event.target.value; if (isNaN(Number(inputValue))) { return; } formik.setFieldValue("investment", event.target.value); }} disabled={LoanDetails.state_id !== 17} onBlur={formik.handleBlur("investment")} error={formik.touched.investment && Boolean(formik.errors.investment)} helperText={formik.touched.investment && formik.errors.investment} fullWidth /> {LoanDetails.state_id === 17 && ( )} ); }; export default UpdateFormReal;