From 8914971de012bdad37725cde8ef0b36678ea679c Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Sun, 14 Apr 2024 10:45:55 +0330 Subject: [PATCH] legal person loan request part 2 --- public/locales/fa/app.json | 17 + .../navgan/add-request-loan/forms/AddForm.jsx | 16 +- .../forms/LegalPersonDatePicker.jsx | 120 ++++++ .../forms/LegalPersonForm.jsx | 344 +++++++++++++++++- .../add-request-loan/forms/RealPersonForm.jsx | 21 +- src/core/data/sidebarMenu.js | 2 +- 6 files changed, 498 insertions(+), 22 deletions(-) create mode 100644 src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx 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"