From a3b57de68e18446fefda443b137d531cd27ff317 Mon Sep 17 00:00:00 2001 From: AmirHossein Mahmoodi Date: Mon, 1 Jan 2024 15:43:31 +0330 Subject: [PATCH] fixed bug --- package.json | 2 +- public/locales/fa/app.json | 12 + .../navgan/add-request-loan/forms/AddForm.jsx | 994 ++++++++++-------- .../navgan/add-request-loan/index.jsx | 10 +- 4 files changed, 555 insertions(+), 463 deletions(-) diff --git a/package.json b/package.json index 93eb689..ff64d0f 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@mui/lab": "^5.0.0-alpha.152", "@mui/material": "^5.12.0", "@mui/x-date-pickers": "^6.18.5", - "@witel/webapp-builder": "^1.3.2", + "@witel/webapp-builder": "^1.3.4", "axios": "^1.4.0", "colord": "^2.9.3", "date-fns-jalali": "^2.13.0-0", diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 9c263be..119b0b0 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -152,13 +152,19 @@ "cityList_loading": "درحال دریافت لیست شهر ها ...", "loan_request_page": "ثبت درخواست وام", "personal_info": "اطلاعات شخصی", + "real_person": "شخص حقیقی", + "legal_person": "شخص حقوقی", "national_code_number": "کد ملی می بایست شامل اعداد باشد", + "national_number_number": "شناسه ملی می بایست شامل اعداد باشد", "national_code_max": "کد ملی می بایست 10 رقم باشد", + "national_number_max": "شناسه ملی می بایست 11 رقم باشد", "shenasname_serial_max": "سریال پشت کارت ملی می بایست شامل 10 بخش باشد", "postal_code_max": "کد پستی می بایست 10 رقم باشد", "tel_number_max": "شماره ثابت می بایست 11 رقم باشد", "national_code_positive": "کد ملی می بایست مثبت باشد", + "national_number_positive": "شناسه ملی می بایست مثبت باشد", "uploading_documents": "اسناد", + "error_message_person_type": "نوع شخص خود را وارد کنید!", "error_message_name": "لطفا نام خود را وارد کنید!", "error_message_plate_number": "لطفا شماره پلاک را به درستی وارد کنید!", "error_message_occupation_id": "لطفا کد شغل را به درستی وارد کنید!", @@ -168,8 +174,10 @@ "error_message_navgan_id": "لطفا کد هوشمند ناوگان خود را وارد کنید!", "error_message_province_id": "لطفا استان خود را وارد کنید!", "error_message_national_id": "لطفا کد ملی خود را وارد کنید!", + "error_message_national_number": "لطفا شناسه ملی خود را وارد کنید!", "error_message_date_of_birth": "لطفا تاریخ تولد خود را وارد کنید!", "error_message_shenasname_serial": "لطفا سریال پشت کارت ملی خود را وارد کنید!", + "error_message_tracking_code": "لطفا کد رهگیری کارت ملی خود را وارد کنید!", "error_message_postal_code": "لطفا کد پستی خود را وارد کنید!", "error_message_national_code": "لطفا کد ملی خود را وارد کنید!", "error_message_checkedBox": "لطفا کد صحت اطلاعات خود را تایید کنید!", @@ -205,9 +213,13 @@ "text_field_navgan_id": "کد هوشمند ناوگان", "text_field_enter_your_navgan_id": "کد هوشمند ناوگان خود را وارد کنید", "text_field_national_code": "کد ملی", + "text_field_national_number": "شناسه ملی", "text_field_enter_your_national_id": "کد ملی خود را وارد کنید", + "text_field_enter_your_national_number": "شناسه ملی خود را وارد کنید", "text_field_shenasname_serial": "سریال پشت کارت ملی", "text_field_enter_your_shenasname_serial": "سریال پشت کارت ملی خود را وارد کنید", + "text_field_national_trackin_code": "کد رهگیری کارت ملی", + "text_field_enter_your_trackin_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 e58f890..ae3d6f5 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -1,10 +1,22 @@ import SelectBox from "@/core/components/SelectBox"; import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; -import {Box, Button, Checkbox, FormControlLabel, Grid, Stack, TextField, Typography} from "@mui/material"; +import { + Box, + Button, + Checkbox, + Fade, + FormControlLabel, + Grid, + Stack, + TextField, + ToggleButton, + ToggleButtonGroup, + Typography +} from "@mui/material"; import {useFormik} from "formik"; import {useTranslations} from "next-intl"; import * as Yup from "yup"; -import {CenterLayout, useRequest} from "@witel/webapp-builder"; +import {CenterLayout, useRequest, useUser} from "@witel/webapp-builder"; import useProvince from "@/lib/app/hooks/useProvince"; import useCities from "@/lib/app/hooks/useCities"; import PlateNumber from "@/core/components/PlateNumber"; @@ -16,8 +28,11 @@ import DoneIcon from '@mui/icons-material/Done'; import {NextLinkComposed} from "@witel/webapp-builder/dist/utils/linkRouting"; import SvgDone from "@/core/components/svgs/SvgDone"; import {SEND_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes"; +import {useRouter} from "next/router"; const AddFormComponent = () => { + const router = useRouter() + const {getUser, changeUser} = useUser() const t = useTranslations(); const [finishLoanRequest, setFinishLoanRequest] = useState(false) const [checked, setChecked] = useState(false); @@ -28,110 +43,118 @@ const AddFormComponent = () => { const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations() const initialValues = { - telephone_number: "", - vehicle_type: "", - province_id: "", - city_id: "", - navgan_id: "", - national_id: "", - national_serial_number: "", - postal_code: "", - navgan_type: "", - plate_part1: "", - plate_part2: "الف", - plate_part3: "", - plate_part4: "", - address: "", - birthday: "", - education_id: "", - occupation_id: "", - checkedBox: false, + person_type: "real", + telephone_number: "", + vehicle_type: "", + province_id: "", + city_id: "", + navgan_id: "", + national_id: "", + national_number: "", + national_serial_number: "", + national_card_tracking_code: "", + national_serial_number_or_tracking_code: "national_serial_number", + postal_code: "", + navgan_type: "", + plate_part1: "", + plate_part2: "الف", + plate_part3: "", + plate_part4: "", + address: "", + birthday: "", + education_id: "", + occupation_id: "", + checkedBox: false, }; const validationSchema = Yup.object().shape({ + person_type: Yup.string().required(t("LoanRequest.error_message_person_type")), telephone_number: Yup.mixed() .test("max", `${t("LoanRequest.tel_number_max")}`, (value) => { const stringValue = String(value); return stringValue.length === 11 }) .required(t("LoanRequest.error_message_tel_number")), - vehicle_type: Yup.string().required( - t("LoanRequest.error_message_vehicle_type") - ), - 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") - ), - address: Yup.string().required( - t("LoanRequest.error_message_address") - ), - birthday: Yup.string().required( - t("LoanRequest.error_message_date_of_birth") - ), + vehicle_type: Yup.string().required(t("LoanRequest.error_message_vehicle_type")), + 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")), + address: Yup.string().required(t("LoanRequest.error_message_address")), + birthday: Yup.string().required(t("LoanRequest.error_message_date_of_birth")), postal_code: Yup.mixed() .test("max", `${t("LoanRequest.postal_code_max")}`, (value) => value.toString().length === 10) - .required( - t("LoanRequest.error_message_postal_code") - ), + .required(t("LoanRequest.error_message_postal_code")), plate_part1: Yup.mixed().test("max", `${t("LoanRequest.error_message_plate_number")}`, (value) => value.toString().length === 2) - .required( - t("LoanRequest.error_message_plate_number") - ), + .required(t("LoanRequest.error_message_plate_number")), plate_part2: Yup.mixed() - .required( - t("LoanRequest.error_message_plate_number") - ), + .required(t("LoanRequest.error_message_plate_number")), plate_part3: Yup.mixed().test("max", `${t("LoanRequest.error_message_plate_number")}`, (value) => value.toString().length === 3) - .required( - t("LoanRequest.error_message_plate_number") - ), + .required(t("LoanRequest.error_message_plate_number")), plate_part4: Yup.mixed().test("max", `${t("LoanRequest.error_message_plate_number")}`, (value) => value.toString().length === 2) - .required( - t("LoanRequest.error_message_plate_number") - ), + .required(t("LoanRequest.error_message_plate_number")), navgan_id: Yup.mixed().required(t("LoanRequest.error_message_navgan_id")), province_id: Yup.string().required(t("LoanRequest.error_message_province_id")), city_id: Yup.string().required(t("LoanRequest.error_message_city_id")), national_id: Yup.mixed() - .test("is-number", `${t("LoanRequest.national_code_number")}`, - (value) => !isNaN(value)) + .test("is-number", `${t("LoanRequest.national_code_number")}`, (value) => !isNaN(value)) .test("positive", `${t("LoanRequest.national_code_positive")}`, (value) => value >= 0) .test("max", `${t("LoanRequest.national_code_max")}`, (value) => value.toString().length === 10) .required(t("LoanRequest.error_message_national_id")), - national_serial_number: Yup.string().required(t("LoanRequest.error_message_shenasname_serial")), + national_number: Yup.mixed().when('person_type', ([person_type], schema) => { + return person_type === 'legal' ? schema + .test("is-number", `${t("LoanRequest.national_number_number")}`, (value) => !isNaN(value)) + .test("positive", `${t("LoanRequest.national_number_positive")}`, (value) => value >= 0) + .test("max", `${t("LoanRequest.national_number_max")}`, (value) => value && value.toString().length === 11) + .required(t("LoanRequest.error_message_national_number")) : schema; + }), + 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 + }), + 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 + }) }); const handleSubmit = async (values, props) => { props.setSubmitting(true) + let _national_number = values.person_type === "legal" ? { + shenase_meli: values.national_number + } : {} + + const _national_card = values.national_serial_number_or_tracking_code === "national_serial_number" ? { + national_serial_number: values.national_serial_number + } : { + national_tracking_code: values.national_card_tracking_code + } + + let _data = { + is_legal_person: values.person_type === 'legal' ? 1 : 0, + telephone_number: values.telephone_number, + national_id: values.national_id, + vehicle_type: values.vehicle_type, + province_id: values.province_id, + city_id: values.city_id, + navgan_id: values.navgan_id, + postal_code: values.postal_code, + navgan_type: values.navgan_type, + plate_part1: values.plate_part1, + plate_part2: values.plate_part2, + plate_part3: values.plate_part3, + plate_part4: values.plate_part4, + address: values.address, + birthday: values.birthday.locale('en').format("YYYY-MM-DD"), + education_id: values.education_id, + occupation_id: values.occupation_id, ..._national_card, ..._national_number + } await requestServer(SEND_LOAN_REQUEST_NAVGAN, "post", { - auth: true, notification: true, data: { - telephone_number: values.telephone_number, - vehicle_type: values.vehicle_type, - province_id: values.province_id, - city_id: values.city_id, - navgan_id: values.navgan_id, - national_id: values.national_id, - national_serial_number: values.national_serial_number, - postal_code: values.postal_code, - navgan_type: values.navgan_type, - plate_part1: values.plate_part1, - plate_part2: values.plate_part2, - plate_part3: values.plate_part3, - plate_part4: values.plate_part4, - address: values.address, - birthday: values.birthday.locale('en').format("YYYY-MM-DD"), - education_id: values.education_id, - occupation_id: values.occupation_id, - } + auth: true, notification: true, data: _data }).then(() => { - setFinishLoanRequest(true) + router.replace('/dashboard/navgan/followUp-loan') + getUser((data) => { + changeUser(data); + }); }).catch(() => { }).finally(() => { props.setSubmitting(false) @@ -142,387 +165,446 @@ const AddFormComponent = () => { initialValues, validationSchema, onSubmit: handleSubmit }) - return ( - <> - {finishLoanRequest ? - ( - - - - {t("LoanRequest.finish_loan_request")} - - - - - ) : ( - <> - - - { - const inputValue = event.target.value; - if (isNaN(Number(inputValue))) { - return; - } - formik.handleChange({ - target: { - name: "national_id", - 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 - /> - - - - - - - - - - - { - const inputValue = event.target.value; - if (isNaN(Number(inputValue))) { - return; - } - formik.handleChange({ - target: { - name: "postal_code", - value: inputValue, - }, - }); - }} - size="small" - label={t("LoanRequest.text_field_postal_code")} - placeholder={t("LoanRequest.text_field_enter_your_postal_code")} - fullWidth - onBlur={formik.handleBlur("postal_code")} - error={formik.touched.postal_code && Boolean(formik.errors.postal_code)} - helperText={formik.touched.postal_code && formik.errors.postal_code} - /> - - - { - const inputValue = event.target.value; - if (isNaN(Number(inputValue))) { - return; - } - formik.handleChange({ - target: { - name: "telephone_number", - value: inputValue, - }, - }); - }} - label={t("LoanRequest.text_field_tel_number")} - placeholder={t( - "LoanRequest.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('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('province_id', event.target.value); - 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")} - /> - - - 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")} - /> - - - - - 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")} - /> - - - - - - - - - - { - formik.setFieldValue("checkedBox", event.target.checked) - }} - /> - } - label={`${t("LoanRequest.checkbox")}`}/> - - - - + {finishLoanRequest ? ( + + + {t("LoanRequest.finish_loan_request")} + + + + ) : (<> + + + formik.handleChange({ + target: { + name: "person_type", value: value, + }, + })} + > + + {t("LoanRequest.real_person")} + + + {t("LoanRequest.legal_person")} + + + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "national_id", 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 + /> + + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "national_number", value: inputValue, + }, + }); }} - > - - - - ) - } - - ); + label={t("LoanRequest.text_field_national_number")} + placeholder={t("LoanRequest.text_field_enter_your_national_number")} + onBlur={formik.handleBlur("national_number")} + error={formik.touched.national_number && Boolean(formik.errors.national_number)} + helperText={formik.touched.national_number && formik.errors.national_number} + fullWidth + /> + + + + + + 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: "postal_code", value: inputValue, + }, + }); + }} + size="small" + label={t("LoanRequest.text_field_postal_code")} + placeholder={t("LoanRequest.text_field_enter_your_postal_code")} + fullWidth + onBlur={formik.handleBlur("postal_code")} + error={formik.touched.postal_code && Boolean(formik.errors.postal_code)} + helperText={formik.touched.postal_code && formik.errors.postal_code} + /> + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "telephone_number", value: inputValue, + }, + }); + }} + label={t("LoanRequest.text_field_tel_number")} + placeholder={t("LoanRequest.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('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('province_id', event.target.value); + 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")} + /> + + + 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")} + /> + + + + + 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")} + /> + + + + + + + + + + { + formik.setFieldValue("checkedBox", event.target.checked) + }} + />} + label={`${t("LoanRequest.checkbox")}`}/> + + + + + + + )} + ); }; export default AddFormComponent; diff --git a/src/pages/dashboard/navgan/add-request-loan/index.jsx b/src/pages/dashboard/navgan/add-request-loan/index.jsx index 71bcaf0..eedec87 100644 --- a/src/pages/dashboard/navgan/add-request-loan/index.jsx +++ b/src/pages/dashboard/navgan/add-request-loan/index.jsx @@ -3,11 +3,9 @@ import {globalServerProps} from "@/core/utils/globalServerProps"; import DeadlineMiddleware from "@/middlewares/Deadline"; export default function AddLoanRequest() { - return ( - - - - ); + return ( + + ); } export async function getServerSideProps({req, locale}) { @@ -15,7 +13,7 @@ export async function getServerSideProps({req, locale}) { props: { ...await globalServerProps({req, locale}), title: "LoanRequest.loan_request_page", - layout: {name: 'DashboardLayout', permissions: ["can_request_navgan_loan"]} + layout: {name: 'DashboardLayout', props: {permissions: ["can_request_navgan_loan"]}} }, }; }