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 && (
}
disabled={formik.isSubmitting}
>
{t("ShowLoan.button_submit")}
)}
>
);
};
export default UpdateFormReal;