diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json
index 92c7c92..58fe2bb 100644
--- a/public/locales/fa/app.json
+++ b/public/locales/fa/app.json
@@ -170,9 +170,13 @@
"error_message_name": "لطفا نام خود را وارد کنید!",
"error_message_company_name": "لطفا نام شرکت خود را وارد کنید!",
"error_message_first_name": "لطفا نام خود را وارد کنید!",
+ "error_message_boss_first_name": "لطفا نام مدیر عامل را وارد کنید!",
"error_message_last_name": "لطفا نام خانوادگی خود را وارد کنید!",
+ "error_message_boss_last_name": "لطفا نام خانوادگی مدیر عامل را وارد کنید!",
"error_message_gender": "لطفا جنسیت خود را وارد کنید!",
+ "error_message_boss_gender": "لطفا جنسیت مدیر عامل را وارد کنید!",
"error_message_father_name": "لطفا نام پدر خود را وارد کنید!",
+ "error_message_boss_father_name": "لطفا نام پدر مدیر عامل را وارد کنید!",
"error_message_register_number": "لطفا شماره ثبت شرکت خود را وارد کنید!",
"error_message_plate_number": "لطفا شماره پلاک را به درستی وارد کنید!",
"error_message_occupation_id": "لطفا کد شغل را به درستی وارد کنید!",
@@ -187,7 +191,9 @@
"error_message_national_number": "لطفا شناسه ملی شرکت خود را وارد کنید!",
"error_message_date_of_birth": "لطفا تاریخ تولد خود را وارد کنید!",
"error_message_shenasname_serial": "لطفا سریال پشت کارت ملی خود را وارد کنید!",
+ "error_message_boss_national_serial_number": "لطفا سریال پشت کارت ملی مدیر عامل را وارد کنید!",
"error_message_tracking_code": "لطفا کد رهگیری کارت ملی خود را وارد کنید!",
+ "error_message_boss_national_card_tracking_code": "لطفا کد رهگیری کارت ملی مدیر عامل را وارد کنید!",
"error_message_postal_code": "لطفا کد پستی خود را وارد کنید!",
"error_message_national_code": "لطفا کد ملی خود را وارد کنید!",
"error_message_checkedBox": "لطفا کد صحت اطلاعات خود را تایید کنید!",
@@ -203,10 +209,14 @@
"text_field_name": "نام",
"text_field_company_name": "نام شرکت",
"text_field_first_name": "نام",
+ "text_field_boss_first_name": "نام مدیر عامل",
"text_field_last_name": "نام خانوادگی",
+ "text_field_boss_last_name": "نام خانوادگی مدیر عامل",
"text_field_gender": "جنسیت",
+ "text_field_boss_gender": "جنسیت مدیر عامل",
"text_field_register_number": "شماره ثبت شرکت",
"text_field_father_name": "نام پدر",
+ "text_field_boss_father_name": "نام پدر مدیر عامل",
"text_field_plate_part4": "بخش چهارم",
"text_field_plate_part3": "بخش سوم",
"text_field_plate_part2": "بخش دوم",
@@ -219,13 +229,16 @@
"text_field_enter_your_plate_part3": "بخش سوم پلاک را وارد کنید",
"text_field_enter_your_plate_part4": "بخش چهارم پلاک راوارد کنید",
"text_field_enter_your_first_name": "نام خود راوارد کنید",
+ "text_field_enter_your_boss_first_name": "نام مدیر عامل راوارد کنید",
"text_field_enter_your_company_name": "نام شرکت خود راوارد کنید",
"text_field_enter_your_last_name": "نام خانوادگی خود راوارد کنید",
+ "text_field_enter_your_boss_last_name": "نام خانوادگی مدیر عامل راوارد کنید",
"text_field_enter_your_address": "آدرس خود راوارد کنید",
"text_field_enter_your_name": "نام خود را وارد کنید",
"text_field_enter_your_company_postal_code": "کد پستی شرکت را وارد کنید",
"text_field_enter_your_register_number": "شماره ثبت شرکت خود را وارد کنید",
"text_field_enter_your_father_name": "نام پدر خود را وارد کنید",
+ "text_field_enter_your_boss_father_name": "نام پدر مدیر عامل را وارد کنید",
"text_field_enter_your_postal_code": "کد پستی خود را وارد کنید",
"text_field_enter_your_company_tel_number": "تلفن ثابت شرکت خود را وارد کنید",
"text_field_vehicle_type": "نوع وسیله نقلیه",
@@ -243,9 +256,13 @@
"text_field_enter_your_national_id": "کد ملی خود را وارد کنید",
"text_field_enter_your_national_number": "شناسه ملی شرکت خود را وارد کنید",
"text_field_shenasname_serial": "سریال پشت کارت ملی",
+ "text_field_boss_national_serial_number": "سریال پشت کارت ملی مدیر عامل",
"text_field_enter_your_shenasname_serial": "سریال پشت کارت ملی خود را وارد کنید",
+ "text_field_enter_your_boss_national_serial_number": "سریال پشت کارت ملی مدیر عامل را وارد کنید",
"text_field_national_trackin_code": "کد رهگیری کارت ملی",
+ "text_field_boss_national_card_tracking_code": "کد رهگیری کارت ملی مدیر عامل",
"text_field_enter_your_trackin_code": "کد رهگیری کارت ملی خود را وارد کنید",
+ "text_field_enter_your_boss_national_card_tracking_code": "کد رهگیری کارت ملی مدیر عامل را وارد کنید",
"text_field_plate_number": "شماره پلاک",
"text_field_enter_your_plate_number": "شماره پلاک خود را وارد کنید",
"button_submit": "ثبت درخواست",
diff --git a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx
index fa848d5..aa3f9bf 100644
--- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx
+++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx
@@ -29,7 +29,6 @@ import SvgDone from "@/core/components/svgs/SvgDone";
import {SEND_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes";
import {useRouter} from "next/router";
import useLimitedProvince from "@/lib/app/hooks/useLimitedProvince";
-import {TransitionGroup} from 'react-transition-group';
import RealPersonForm from "@/components/dashboard/navgan/add-request-loan/forms/RealPersonForm";
import LegalPersonForm from "@/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm";
@@ -52,17 +51,22 @@ const AddFormComponent = () => {
vehicle_type: "",
province_id: "",
father_name: "",
+ boss_father_name: "",
register_number: "",
gender: "",
first_name: "",
+ boss_first_name: "",
last_name: "",
+ boss_last_name: "",
city_id: "",
navgan_id: "",
national_code: "",
national_number: "",
company_name: "",
national_serial_number: "",
+ boss_national_serial_number: "",
national_card_tracking_code: "",
+ boss_national_card_tracking_code: "",
national_serial_number_or_tracking_code: "national_serial_number",
postal_code: "",
postal_company_code: "",
@@ -96,8 +100,10 @@ const AddFormComponent = () => {
vehicle_type: Yup.string().required(t("LoanRequest.error_message_vehicle_type")),
register_number: Yup.string().required(t("LoanRequest.error_message_register_number")),
father_name: Yup.string().required(t("LoanRequest.error_message_father_name")),
+ boss_father_name: Yup.string().required(t("LoanRequest.error_message_boss_father_name")),
company_name: Yup.string().required(t("LoanRequest.error_message_company_name")),
gender: Yup.string().required(t("LoanRequest.error_message_gender")),
+ boss_gender: Yup.string().required(t("LoanRequest.error_message_boss_gender")),
navgan_type: Yup.string().required(t("LoanRequest.error_message_navgan_type")),
occupation_id: Yup.string().required(t("LoanRequest.error_message_occupation_id")),
education_id: Yup.string().required(t("LoanRequest.error_message_education_id")),
@@ -122,7 +128,9 @@ const AddFormComponent = () => {
province_id: Yup.string().required(t("LoanRequest.error_message_province_id")),
city_id: Yup.string().required(t("LoanRequest.error_message_city_id")),
first_name: Yup.string().required(t("LoanRequest.error_message_first_name")),
+ boss_first_name: Yup.string().required(t("LoanRequest.error_message_boss_first_name")),
last_name: Yup.string().required(t("LoanRequest.error_message_last_name")),
+ boss_last_name: Yup.string().required(t("LoanRequest.error_message_boss_last_name")),
national_code: Yup.mixed()
.test("is-number", `${t("LoanRequest.national_code_number")}`, (value) => !isNaN(value))
.test("positive", `${t("LoanRequest.national_code_positive")}`, (value) => value >= 0)
@@ -138,8 +146,14 @@ const AddFormComponent = () => {
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 === 'national_serial_number' ? schema.required(t("LoanRequest.error_message_shenasname_serial")) : schema
}),
+ boss_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 === 'national_serial_number' ? schema.required(t("LoanRequest.error_message_boss_national_serial_number")) : schema
+ }),
national_card_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 === 'national_card_tracking_code' ? schema.required(t("LoanRequest.error_message_tracking_code")) : schema
+ }),
+ boss_national_card_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 === 'national_card_tracking_code' ? schema.required(t("LoanRequest.error_message_boss_national_card_tracking_code")) : schema
})
});
diff --git a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx
new file mode 100644
index 0000000..b256be3
--- /dev/null
+++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx
@@ -0,0 +1,120 @@
+import {FormControl, FormHelperText} from "@mui/material";
+import {LocalizationProvider} from "@mui/x-date-pickers/LocalizationProvider";
+import {AdapterDateFnsJalali} from "@mui/x-date-pickers/AdapterDateFnsJalali";
+import {faIR} from "@mui/x-date-pickers/locales";
+import moment from "jalali-moment";
+import * as React from "react";
+import {useTranslations} from "next-intl";
+import Button from "@mui/material/Button";
+import {useConfig} from "@witel/webapp-builder";
+import {useMemo, useState} from "react";
+import {DatePicker} from "@mui/x-date-pickers/DatePicker";
+
+function ButtonField(props) {
+ const t = useTranslations();
+ const {
+ setOpen,
+ label,
+ id,
+ disabled,
+ InputProps: { ref } = {},
+ inputProps: { "aria-label": ariaLabel } = {},
+ } = props;
+
+ return (
+
+ );
+}
+
+function ButtonDatePicker(props) {
+ const { config } = useConfig();
+ const t = useTranslations();
+ const [open, setOpen] = useState(false);
+ const dateRange = useMemo(() => {
+ const today = moment();
+ const min = moment(
+ `${config.add_request_loan_birthday_range.min}-01-01`,
+ "jYYYY-jMM-jDD"
+ ).toDate();
+ const max = moment(
+ `${config.add_request_loan_birthday_range.max}-${today.format(
+ "jMM-jDD"
+ )}`,
+ "jYYYY-jMM-jDD"
+ ).toDate();
+ return { min, max };
+ }, [config.add_request_loan_birthday_range]);
+
+ return (
+ setOpen(false)}
+ onOpen={() => setOpen(true)}
+ />
+ );
+}
+
+const LegalPersonDatePicker = () => {
+ return (
+
+
+ {
+ formik.setFieldValue("birthday", moment(newValue));
+ }}
+ />
+
+
+ {formik.touched.birthday && formik.errors.birthday}
+
+
+ );
+}
+export default LegalPersonDatePicker
\ No newline at end of file
diff --git a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx
index 12d9f82..dbda8fa 100644
--- a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx
+++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx
@@ -1,15 +1,18 @@
-import {Collapse, Grid, TextField} from "@mui/material";
+import {Grid, TextField, ToggleButton, ToggleButtonGroup} from "@mui/material";
import {useTranslations} from "next-intl";
import useCities from "@/lib/app/hooks/useCities";
import UseEducations from "@/lib/app/hooks/useEducations";
import useOccupations from "@/lib/app/hooks/useOccupations";
import MuiDatePicker from "@/core/components/MuiDatePicker";
-import {DatePicker} from "@mui/x-date-pickers/DatePicker";
import * as React from "react";
+import SelectBox from "@/core/components/SelectBox";
+import useLimitedProvince from "@/lib/app/hooks/useLimitedProvince";
+import PlateNumber from "@/core/components/PlateNumber";
const LegalPersonForm = ({formik}) => {
const t = useTranslations();
const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities()
+ const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince()
const {educationsList, isLoadingEducationsList, errorEducationsList} = UseEducations()
const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations()
return (
@@ -152,24 +155,327 @@ const LegalPersonForm = ({formik}) => {
helperText={formik.touched.company_date && formik.errors.company_date}
onBlur={formik.handleBlur("company_date")}
/>
-
+
+
+
+ {
+ formik.setFieldValue('province_id', event.target.value);
+ setProvinceID(event.target.value)
+ formik.setFieldTouched("city_id", false, false);
+ formik.setFieldValue("city_id", "")
}}
- {...props}
- open={open}
- minDate={dateRange.min}
- maxDate={dateRange.max}
- onClose={() => setOpen(false)}
- onOpen={() => setOpen(true)}
+ 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")}
+ />
+
+
+ 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")}
+ />
+
+
+
+
+ {
+ if (value === null) return
+ formik.handleChange({
+ target: {
+ name: "national_serial_number_or_tracking_code", value: value,
+ },
+ })
+ }}
+ >
+
+ {t("LoanRequest.text_field_shenasname_serial")}
+
+
+ {t("LoanRequest.text_field_national_trackin_code")}
+
+
+
+ {formik.values.national_serial_number_or_tracking_code === 'national_serial_number' ? (
+
+
+ ) : (
+
+
+
+ )}
+
+
+
+
+
+
+ {
+ const inputValue = event.target.value;
+ if (isNaN(Number(inputValue))) {
+ return;
+ }
+ formik.handleChange({
+ target: {
+ name: "national_code", value: inputValue,
+ },
+ });
+ }}
+ label={t("LoanRequest.text_field_national_code")}
+ placeholder={t("LoanRequest.text_field_enter_your_national_code")}
+ onBlur={formik.handleBlur("national_id")}
+ error={formik.touched.national_id && Boolean(formik.errors.national_id)}
+ helperText={formik.touched.national_id && formik.errors.national_id}
+ fullWidth
+ />
+
+
+ {
+ formik.setFieldValue('gender', event.target.value)
+ }}
+ setFieldTouched={formik.setFieldTouched}
+ error={formik.touched.boss_gender && Boolean(formik.errors.boss_gender)}
+ helperText={formik.touched.boss_gender && formik.errors.boss_gender}
+ onBlur={formik.handleBlur("boss_gender")}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ 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")}
+ />
+
+
+
+
+
+
+
+ {
+ 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")}
+ />
+
+
+ {
+ 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")}
/>
diff --git a/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx
index b1195d0..d39d330 100644
--- a/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx
+++ b/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx
@@ -10,8 +10,9 @@ import useOccupations from "@/lib/app/hooks/useOccupations";
const RealPersonForm = ({formik}) => {
const t = useTranslations();
const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince()
+ const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities()
- return(
+ return (
<>
@@ -313,6 +314,24 @@ const RealPersonForm = ({formik}) => {
onBlur={formik.handleBlur("province_id")}
/>
+
+ 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")}
+ />
+
>
)
diff --git a/src/core/data/sidebarMenu.js b/src/core/data/sidebarMenu.js
index 497c9bc..ef2c7d8 100644
--- a/src/core/data/sidebarMenu.js
+++ b/src/core/data/sidebarMenu.js
@@ -17,7 +17,7 @@ const sidebarMenu = [
key: "sidebar.add-request-loan",
name: "sidebar.add-request-loan",
type: "page",
- route: "/dashboard/navgan/past-past-add-request-loan",
+ route: "/dashboard/navgan/add-request-loan",
icon: ,
selected: false,
permission: "can_request_navgan_loan"