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"; 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 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, address: LoanDetails.address, birthday: LoanDetails.birthday ? moment(LoanDetails.birthday) : "", navgan_id: LoanDetails.navgan_id, province_id: LoanDetails.province_id, city_id: LoanDetails.city_id, first_name: LoanDetails.first_name, last_name: LoanDetails.last_name, father_name: LoanDetails.father_name, gender: LoanDetails.gender, occupation_id : LoanDetails.occupation_id, navgan_type: LoanDetails.navgan_type, vehicle_type: LoanDetails.vehicle_type, 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")), activity_type: Yup.string().required(t("ShowLoan.error_message_activity_type")), 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")), 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.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.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("navgan_plan_id", values.navgan_plan_id); formData.append("activity_type", values.activity_type); formData.append("first_name", values.first_name); formData.append("last_name", values.last_name); formData.append("father_name", values.father_name); formData.append("gender", values.gender); formData.append("province_id", LoanDetails.province_id); formData.append("city_id", LoanDetails.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/navgan/followUp-loan"); }).catch(() => { }).finally(() => { props.setSubmitting(false); }) }; const formik = useFormik({ initialValues, validationSchema, onSubmit: handleSubmit, }); 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 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" ? () : ()} {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} /> {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")} /> : } {LoanDetails.state_id === 17 && ( )} ); }; export default UpdateFormReal;