From a3b409a01aa7bffaba724118f75f2aef21c563a0 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Sat, 13 Apr 2024 16:02:59 +0330 Subject: [PATCH 1/6] real person loan request --- package.json | 1 + public/locales/fa/app.json | 52 +- src/components/dashboard/first/index.jsx | 2 +- .../navgan/add-request-loan/forms/AddForm.jsx | 992 ++++++++++-------- .../forms/LegalPersonForm.jsx | 149 +++ .../add-request-loan/forms/RealPersonForm.jsx | 320 ++++++ .../navgan/add-request-loan/index.jsx | 20 +- .../past-add-request-loan/forms/AddForm.jsx | 616 +++++++++++ .../navgan/past-add-request-loan/index.jsx | 23 + src/core/data/sidebarMenu.js | 2 +- .../navgan/add-request-loan/index.jsx | 2 +- .../navgan/past-add-request-loan/index.jsx | 19 + 12 files changed, 1748 insertions(+), 450 deletions(-) create mode 100644 src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx create mode 100644 src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx create mode 100644 src/components/dashboard/navgan/past-add-request-loan/forms/AddForm.jsx create mode 100644 src/components/dashboard/navgan/past-add-request-loan/index.jsx create mode 100644 src/pages/dashboard/navgan/past-add-request-loan/index.jsx diff --git a/package.json b/package.json index ff64d0f..c2321ca 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-toastify": "^9.1.3", + "react-transition-group": "^4.4.5", "sass": "^1.62.0", "stylis": "^4.1.3", "stylis-plugin-rtl": "^2.1.1", diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 0d2b5a5..d983010 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -156,26 +156,32 @@ "real_person": "شخص حقیقی", "legal_person": "شخص حقوقی", "national_code_number": "کد ملی می بایست شامل اعداد باشد", - "national_number_number": "شناسه ملی می بایست شامل اعداد باشد", + "national_number_number": "شناسه ملی شرکت می بایست شامل اعداد باشد", "national_code_max": "کد ملی می بایست 10 رقم باشد", - "national_number_max": "شناسه ملی می بایست 11 رقم باشد", + "national_number_max": "شناسه ملی شرکت می بایست 11 رقم باشد", "shenasname_serial_max": "سریال پشت کارت ملی می بایست شامل 10 بخش باشد", "postal_code_max": "کد پستی می بایست 10 رقم باشد", "tel_number_max": "شماره ثابت می بایست 11 رقم باشد", "national_code_positive": "کد ملی می بایست مثبت باشد", - "national_number_positive": "شناسه ملی می بایست مثبت باشد", + "national_number_positive": "شناسه ملی شرکت می بایست مثبت باشد", "uploading_documents": "اسناد", "error_message_person_type": "نوع شخص خود را وارد کنید!", "error_message_name": "لطفا نام خود را وارد کنید!", + "error_message_company_name": "لطفا نام شرکت خود را وارد کنید!", + "error_message_first_name": "لطفا نام خود را وارد کنید!", + "error_message_last_name": "لطفا نام خانوادگی خود را وارد کنید!", + "error_message_gender": "لطفا جنسیت خود را وارد کنید!", + "error_message_father_name": "لطفا نام پدر خود را وارد کنید!", + "error_message_register_number": "لطفا شماره ثبت شرکت خود را وارد کنید!", "error_message_plate_number": "لطفا شماره پلاک را به درستی وارد کنید!", "error_message_occupation_id": "لطفا کد شغل را به درستی وارد کنید!", - "error_message_education_id": "لطفا تحصیلات را به درستی وارد کنید!", + "error_message_education_id": "لطفا مدرک تحصیلی را به درستی وارد کنید!", "error_message_tel_number": "لطفا شماره ثابت (با پیش شماره استان) خود را وارد کنید!", "error_message_vehicle_type": "لطفا نوع وسیله نقلیه خود را وارد کنید!", "error_message_navgan_id": "لطفا کد هوشمند ناوگان خود را وارد کنید!", "error_message_province_id": "لطفا استان خود را وارد کنید!", "error_message_national_id": "لطفا کد ملی خود را وارد کنید!", - "error_message_national_number": "لطفا شناسه ملی خود را وارد کنید!", + "error_message_national_number": "لطفا شناسه ملی شرکت خود را وارد کنید!", "error_message_date_of_birth": "لطفا تاریخ تولد خود را وارد کنید!", "error_message_shenasname_serial": "لطفا سریال پشت کارت ملی خود را وارد کنید!", "error_message_tracking_code": "لطفا کد رهگیری کارت ملی خود را وارد کنید!", @@ -185,10 +191,16 @@ "error_message_navgan_type": "لطفا نوع ناوگان خود را وارد کنید!", "error_message_address": "لطفا آدرس خود را وارد کنید!", "text_field_tel_number": "شماره ثابت (با پیش شماره استان)", - "text_field_education_id": "تحصیلات", + "text_field_education_id": "مدرک تحصیلی", "text_field_occupation_id": "شغل", "text_field_enter_your_tel_number": "شماره ثابت (با پیش شماره استان) خود را وارد کنید", "text_field_name": "نام", + "text_field_company_name": "نام شرکت", + "text_field_first_name": "نام", + "text_field_last_name": "نام خانوادگی", + "text_field_gender": "جنسیت", + "text_field_register_number": "شماره ثبت شرکت", + "text_field_father_name": "نام پدر", "text_field_plate_part4": "بخش چهارم", "text_field_plate_part3": "بخش سوم", "text_field_plate_part2": "بخش دوم", @@ -200,8 +212,13 @@ "text_field_enter_your_plate_part2": "بخش دوم پلاک را وارد کنید", "text_field_enter_your_plate_part3": "بخش سوم پلاک را وارد کنید", "text_field_enter_your_plate_part4": "بخش چهارم پلاک راوارد کنید", + "text_field_enter_your_first_name": "نام خود راوارد کنید", + "text_field_enter_your_company_name": "نام شرکت خود راوارد کنید", + "text_field_enter_your_last_name": "نام خانوادگی خود راوارد کنید", "text_field_enter_your_address": "آدرس خود راوارد کنید", "text_field_enter_your_name": "نام خود را وارد کنید", + "text_field_enter_your_register_number": "شماره ثبت شرکت خود را وارد کنید", + "text_field_enter_your_father_name": "نام پدر خود را وارد کنید", "text_field_enter_your_postal_code": "کد پستی خود را وارد کنید", "text_field_vehicle_type": "نوع وسیله نقلیه", "text_field_enter_your_vehicle_type": "نوع وسیله نقلیه خود را وارد کنید", @@ -214,9 +231,9 @@ "text_field_navgan_id": "کد هوشمند ناوگان", "text_field_enter_your_navgan_id": "کد هوشمند ناوگان خود را وارد کنید", "text_field_national_code": "کد ملی", - "text_field_national_number": "شناسه ملی", + "text_field_national_number": "شناسه ملی شرکت", "text_field_enter_your_national_id": "کد ملی خود را وارد کنید", - "text_field_enter_your_national_number": "شناسه ملی خود را وارد کنید", + "text_field_enter_your_national_number": "شناسه ملی شرکت خود را وارد کنید", "text_field_shenasname_serial": "سریال پشت کارت ملی", "text_field_enter_your_shenasname_serial": "سریال پشت کارت ملی خود را وارد کنید", "text_field_national_trackin_code": "کد رهگیری کارت ملی", @@ -235,17 +252,18 @@ "national_code_number": "کد ملی می بایست شامل اعداد باشد", "national_code_positive": "کد ملی می بایست مثبت باشد", "national_code_max": "کد ملی می بایست 10 رقم باشد", - "national_number_positive": "شناسه ملی می بایست مثبت باشد", + "national_number_positive": "شناسه ملی شرکت می بایست مثبت باشد", "error_message_national_id": "لطفا کد ملی خود را وارد کنید!", - "national_number_number": "شناسه ملی می بایست شامل اعداد باشد", - "national_number_max": "شناسه ملی می بایست 11 رقم باشد", - "error_message_national_number": "لطفا شناسه ملی خود را وارد کنید!", + "national_number_number": "شناسه ملی شرکت می بایست شامل اعداد باشد", + "national_number_max": "شناسه ملی شرکت می بایست 11 رقم باشد", + "error_message_national_number": "لطفا شناسه ملی شرکت خود را وارد کنید!", "error_message_shenasname_serial": "لطفا سریال پشت کارت ملی خود را وارد کنید!", "error_message_tracking_code": "لطفا کد رهگیری کارت ملی خود را وارد کنید!", "text_field_shenasname_serial": "سریال پشت کارت ملی", "text_field_national_trackin_code": "کد رهگیری کارت ملی", "text_field_national_id": "کد ملی", "text_field_postal_code": "کد پستی", + "text_field_company_postal_code": "کد پستی شرکت", "text_field_national_serial_number": "سریال پشت کارت ملی", "text_field_address": "آدرس", "text_field_birthday": "تاریخ تولد", @@ -256,21 +274,23 @@ "text_field_occupation_id": "شغل", "text_field_name": "نام کامل مالک", "text_field_navgan_type": "نوع ناوگان", - "text_field_shenase_meli": "شناسه ملی", + "text_field_shenase_meli": "شناسه ملی شرکت", "text_field_vehicle_type": "نوع وسیله", "text_field_tel_number": "شماره ثابت (با پیش شماره استان)", "text_field_enter_your_national_id": "کد ملی را وارد کنید", "text_field_enter_your_postal_code": "کد پستی را وارد کنید", + "text_field_enter_your_company_postal_code": "کد پستی شرکت را وارد کنید", "text_field_enter_your_national_serial_number": "سریال پشت کارت ملی را وارد کنید", "text_field_enter_your_address": "آدرس را وارد کنید", "text_field_enter_your_tel_number": "شماره ثابت (با پیش شماره استان) خود را وارد کنید", "text_field_enter_your_birthday": "تاریخ تولد را وارد کنید", "text_field_enter_your_navgan_id": "کد ناوگان را وارد کنید", "text_field_enter_your_name": "نام کامل مالک را وارد کنید", - "text_field_enter_your_shenase_meli": "شناسه ملی را وارد کنید", + "text_field_enter_your_shenase_meli": "شناسه ملی شرکت را وارد کنید", "text_field_enter_your_national_tracking_code": "کد رهگیری کارت ملی را وارد کنید", "postal_code_max": "کد پستی می بایست 10 رقم باشد", - "error_message_postal_code": "لطفا کد پستی را وارد کنید!", + "company_postal_code_max": "کد پستی شرکت می بایست 10 رقم باشد", + "error_message_company_postal_code": "لطفا کد پستی شرکت را وارد کنید!", "error_message_national_serial_number": "لطفا سریال پشت کارت ملی را وارد کنید!", "error_message_address": "لطفا آدرس را وارد کنید!", "error_message_birthday": "لطفا تاریخ تولد را وارد کنید!", @@ -284,7 +304,7 @@ "error_message_fixed_number": "لطفا تلفن ثابت را وارد کنید!", "error_message_tel_number": "لطفا شماره ثابت (با پیش شماره استان) خود را وارد کنید!", "error_message_occupation_id": "لطفا کد شغل (با توجه به مستندات ارائه شده) را به درستی وارد کنید!", - "error_message_education_id": "لطفا تحصیلات (با توجه به مستندات ارائه شده) را به درستی وارد کنید!", + "error_message_education_id": "لطفا مدرک تحصیلی (با توجه به مستندات ارائه شده) را به درستی وارد کنید!", "cityList_empty": "شهر یافت نشد", "button_submit": "ویرایش", "error_message_not_show_state": "شما دسترسی لازم به دریافت اطلاعات را ندارید!" diff --git a/src/components/dashboard/first/index.jsx b/src/components/dashboard/first/index.jsx index 7b42ef9..826380e 100644 --- a/src/components/dashboard/first/index.jsx +++ b/src/components/dashboard/first/index.jsx @@ -18,7 +18,7 @@ const FirstComponent = () => { {t("Dashboard.go_to_add_request_loan")} - ) : (<> - - - { - if (value === null) return - 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; - } + ) : ( + <> + + + { + if (value === null) return formik.handleChange({ target: { - name: "national_number", value: inputValue, + name: "person_type", value: value, }, - }); + }) }} - 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 - /> + > + + {t("LoanRequest.real_person")} + + + {t("LoanRequest.legal_person")} + + - - - - - { - 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' ? ( - + { + formik.values.person_type === "real" ? : + } + {/**/} + {/* */} + {/* {formik.values.person_type === "legal" ? (*/} + {/* {*/} + {/* 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*/} + {/* />*/} + {/* ) : (*/} + {/* {*/} + {/* 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.values.person_type === 'legal' && (*/} + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} + {/* {*/} + {/* const inputValue = event.target.value;*/} + {/* if (isNaN(Number(inputValue))) {*/} + {/* return;*/} + {/* }*/} + {/* formik.handleChange({*/} + {/* target: {*/} + {/* name: "register_number", value: inputValue,*/} + {/* },*/} + {/* });*/} + {/* }}*/} + {/* label={t("LoanRequest.text_field_register_number")}*/} + {/* placeholder={t("LoanRequest.text_field_enter_your_register_number")}*/} + {/* onBlur={formik.handleBlur("register_number")}*/} + {/* error={formik.touched.register_number && Boolean(formik.errors.register_number)}*/} + {/* helperText={formik.touched.register_number && formik.errors.register_number}*/} + {/* fullWidth*/} + {/* />*/} + {/* */} + {/* */} + {/* */} + {/*)}*/} + {/**/} + {/* */} + {/* {*/} + {/* 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' ? (*/} + {/* */} + {/* */} + {/* ) : (*/} + {/* */} + {/* */} + {/* */} + {/* )}*/} + {/**/} + {/**/} + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} + {/**/} + {/**/} + {/* */} + {/* */} + {/* */} + {/* */} + {/* {*/} + {/* formik.setFieldValue('gender', event.target.value)*/} + {/* }}*/} + {/* setFieldTouched={formik.setFieldTouched}*/} + {/* error={formik.touched.gender && Boolean(formik.errors.gender)}*/} + {/* helperText={formik.touched.gender && formik.errors.gender}*/} + {/* onBlur={formik.handleBlur("gender")}*/} + {/* />*/} + {/* */} + {/* */} + {/* */} + {/* */} + {/**/} + {/**/} + {/* */} + {/* {*/} + {/* 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")}`}/> - - + - - - - { - 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")}`}/> - - - - - - - )} + + + + )} ); }; diff --git a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx new file mode 100644 index 0000000..78a38aa --- /dev/null +++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx @@ -0,0 +1,149 @@ +import {Collapse, Grid, TextField} 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"; + +const LegalPersonForm = ({formik}) => { + const t = useTranslations(); + const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities() + const {educationsList, isLoadingEducationsList, errorEducationsList} = UseEducations() + const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations() + return ( + <> + + + { + 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 + /> + + + + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "register_number", value: inputValue, + }, + }); + }} + label={t("LoanRequest.text_field_register_number")} + placeholder={t("LoanRequest.text_field_enter_your_register_number")} + onBlur={formik.handleBlur("register_number")} + error={formik.touched.register_number && Boolean(formik.errors.register_number)} + helperText={formik.touched.register_number && formik.errors.register_number} + 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_company_postal_code")} + placeholder={t("LoanRequest.text_field_enter_your_company_postal_code")} + fullWidth + onBlur={formik.handleBlur("company_postal_code")} + error={formik.touched.company_postal_code && Boolean(formik.errors.company_postal_code)} + helperText={formik.touched.company_postal_code && formik.errors.company_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_company_tel_number")} + placeholder={t("LoanRequest.text_field_enter_your_company_tel_number")} + fullWidth + onBlur={formik.handleBlur("company_tel_number")} + error={formik.touched.company_tel_number && Boolean(formik.errors.company_tel_number)} + helperText={formik.touched.company_tel_number && formik.errors.company_tel_number} + /> + + + + ) +} +export default LegalPersonForm \ No newline at end of file diff --git a/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx b/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx new file mode 100644 index 0000000..b1195d0 --- /dev/null +++ b/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx @@ -0,0 +1,320 @@ +import {Grid, TextField, ToggleButton, ToggleButtonGroup} from "@mui/material"; +import SelectBox from "@/core/components/SelectBox"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; +import {useTranslations} from "next-intl"; +import useLimitedProvince from "@/lib/app/hooks/useLimitedProvince"; +import useCities from "@/lib/app/hooks/useCities"; +import UseEducations from "@/lib/app/hooks/useEducations"; +import useOccupations from "@/lib/app/hooks/useOccupations"; + +const RealPersonForm = ({formik}) => { + const t = useTranslations(); + const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince() + + return( + <> + + + { + 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.gender && Boolean(formik.errors.gender)} + helperText={formik.touched.gender && formik.errors.gender} + onBlur={formik.handleBlur("gender")} + /> + + + + + + + + { + 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")} + /> + + + + ) +} +export default RealPersonForm \ No newline at end of file diff --git a/src/components/dashboard/navgan/add-request-loan/index.jsx b/src/components/dashboard/navgan/add-request-loan/index.jsx index 3e4cf0c..211862c 100644 --- a/src/components/dashboard/navgan/add-request-loan/index.jsx +++ b/src/components/dashboard/navgan/add-request-loan/index.jsx @@ -7,16 +7,16 @@ const LoanRequestComponent = () => { const t = useTranslations(); return ( - <> - - - - - - - + <> + + + + + + + ); }; diff --git a/src/components/dashboard/navgan/past-add-request-loan/forms/AddForm.jsx b/src/components/dashboard/navgan/past-add-request-loan/forms/AddForm.jsx new file mode 100644 index 0000000..c8cdcbb --- /dev/null +++ b/src/components/dashboard/navgan/past-add-request-loan/forms/AddForm.jsx @@ -0,0 +1,616 @@ +import SelectBox from "@/core/components/SelectBox"; +import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; +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, useUser} from "@witel/webapp-builder"; +import useCities from "@/lib/app/hooks/useCities"; +import PlateNumber from "@/core/components/PlateNumber"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; +import UseEducations from "@/lib/app/hooks/useEducations"; +import useOccupations from "@/lib/app/hooks/useOccupations"; +import {useState} from "react"; +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"; +import useLimitedProvince from "@/lib/app/hooks/useLimitedProvince"; + +const AddFormComponent = () => { + const router = useRouter() + const {getUser, changeUser} = useUser() + const t = useTranslations(); + const [finishLoanRequest, setFinishLoanRequest] = useState(false) + const [checked, setChecked] = useState(false); + const requestServer = useRequest() + const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince() + const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities() + const {educationsList, isLoadingEducationsList, errorEducationsList} = UseEducations() + const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations() + + const initialValues = { + 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")), + postal_code: Yup.mixed() + .test("max", `${t("LoanRequest.postal_code_max")}`, (value) => value.toString().length === 10) + .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")), + plate_part2: Yup.mixed() + .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")), + plate_part4: Yup.mixed().test("max", `${t("LoanRequest.error_message_plate_number")}`, (value) => value.toString().length === 2) + .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("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_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: _data + }).then(() => { + router.replace('/dashboard/navgan/followUp-loan') + getUser((data) => { + changeUser(data); + }); + }).catch(() => { + }).finally(() => { + props.setSubmitting(false) + }) + }; + + const formik = useFormik({ + initialValues, validationSchema, onSubmit: handleSubmit + }) + + return (<> + {finishLoanRequest ? ( + + + {t("LoanRequest.finish_loan_request")} + + + + ) : (<> + + + { + if (value === null) return + 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 + /> + + + + + + { + 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: "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/components/dashboard/navgan/past-add-request-loan/index.jsx b/src/components/dashboard/navgan/past-add-request-loan/index.jsx new file mode 100644 index 0000000..06ad301 --- /dev/null +++ b/src/components/dashboard/navgan/past-add-request-loan/index.jsx @@ -0,0 +1,23 @@ +import {Box, Chip, Divider} from "@mui/material"; +import {useTranslations} from "next-intl"; +import AddFormComponent from "@/components/dashboard/navgan/past-add-request-loan/forms/AddForm"; +import {CenterLayout, useUser} from "@witel/webapp-builder"; + +const LoanRequestComponent = () => { + const t = useTranslations(); + + return ( + <> + + + + + + + + ); +}; + +export default LoanRequestComponent; diff --git a/src/core/data/sidebarMenu.js b/src/core/data/sidebarMenu.js index ef2c7d8..497c9bc 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/add-request-loan", + route: "/dashboard/navgan/past-past-add-request-loan", icon: , selected: false, permission: "can_request_navgan_loan" diff --git a/src/pages/dashboard/navgan/add-request-loan/index.jsx b/src/pages/dashboard/navgan/add-request-loan/index.jsx index 33076eb..d413ad0 100644 --- a/src/pages/dashboard/navgan/add-request-loan/index.jsx +++ b/src/pages/dashboard/navgan/add-request-loan/index.jsx @@ -1,6 +1,6 @@ -import LoanRequestComponent from "@/components/dashboard/navgan/add-request-loan"; import {globalServerProps} from "@/core/utils/globalServerProps"; import DeadlineMiddleware from "@/middlewares/Deadline"; +import LoanRequestComponent from "@/components/dashboard/navgan/add-request-loan"; export default function AddLoanRequest(props) { return ( diff --git a/src/pages/dashboard/navgan/past-add-request-loan/index.jsx b/src/pages/dashboard/navgan/past-add-request-loan/index.jsx new file mode 100644 index 0000000..904c461 --- /dev/null +++ b/src/pages/dashboard/navgan/past-add-request-loan/index.jsx @@ -0,0 +1,19 @@ +import LoanRequestComponent from "src/components/dashboard/navgan/past-add-request-loan"; +import {globalServerProps} from "@/core/utils/globalServerProps"; +import DeadlineMiddleware from "@/middlewares/Deadline"; + +export default function AddLoanRequest(props) { + return ( + + ); +} + +export async function getServerSideProps({req, locale}) { + return { + props: { + ...await globalServerProps({req, locale}), + title: "LoanRequest.loan_request_page", + layout: {name: 'DashboardLayout', props: {permissions: ["can_request_navgan_loan"]}} + }, + }; +} From 1f82fc7cf8ebdb4b9c7784d2b23269aaa6e159c5 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Sat, 13 Apr 2024 16:30:33 +0330 Subject: [PATCH 2/6] legal person loan request part 1 --- public/locales/fa/app.json | 21 ++++++++---- .../navgan/add-request-loan/forms/AddForm.jsx | 9 +++++ .../forms/LegalPersonForm.jsx | 34 +++++++++++++++++-- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index d983010..92c7c92 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -162,6 +162,7 @@ "shenasname_serial_max": "سریال پشت کارت ملی می بایست شامل 10 بخش باشد", "postal_code_max": "کد پستی می بایست 10 رقم باشد", "tel_number_max": "شماره ثابت می بایست 11 رقم باشد", + "company_tel_number_max": "شماره ثابت شرکت می بایست 11 رقم باشد", "national_code_positive": "کد ملی می بایست مثبت باشد", "national_number_positive": "شناسه ملی شرکت می بایست مثبت باشد", "uploading_documents": "اسناد", @@ -175,8 +176,10 @@ "error_message_register_number": "لطفا شماره ثبت شرکت خود را وارد کنید!", "error_message_plate_number": "لطفا شماره پلاک را به درستی وارد کنید!", "error_message_occupation_id": "لطفا کد شغل را به درستی وارد کنید!", + "error_message_company_postal_code": "لطفا کد پستی شرکت را وارد کنید!", "error_message_education_id": "لطفا مدرک تحصیلی را به درستی وارد کنید!", "error_message_tel_number": "لطفا شماره ثابت (با پیش شماره استان) خود را وارد کنید!", + "error_message_company_tel_number": "لطفا شماره ثابت شرکت (با پیش شماره استان) خود را وارد کنید!", "error_message_vehicle_type": "لطفا نوع وسیله نقلیه خود را وارد کنید!", "error_message_navgan_id": "لطفا کد هوشمند ناوگان خود را وارد کنید!", "error_message_province_id": "لطفا استان خود را وارد کنید!", @@ -191,8 +194,11 @@ "error_message_navgan_type": "لطفا نوع ناوگان خود را وارد کنید!", "error_message_address": "لطفا آدرس خود را وارد کنید!", "text_field_tel_number": "شماره ثابت (با پیش شماره استان)", + "text_field_company_tel_number": "شماره ثابت شرکت (با پیش شماره استان)", "text_field_education_id": "مدرک تحصیلی", + "text_field_company_postal_code": "کد پستی شرکت", "text_field_occupation_id": "شغل", + "company_postal_code_max": "کد پستی شرکت می بایست 10 رقم باشد", "text_field_enter_your_tel_number": "شماره ثابت (با پیش شماره استان) خود را وارد کنید", "text_field_name": "نام", "text_field_company_name": "نام شرکت", @@ -217,9 +223,11 @@ "text_field_enter_your_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_postal_code": "کد پستی خود را وارد کنید", + "text_field_enter_your_company_tel_number": "تلفن ثابت شرکت خود را وارد کنید", "text_field_vehicle_type": "نوع وسیله نقلیه", "text_field_enter_your_vehicle_type": "نوع وسیله نقلیه خود را وارد کنید", "text_field_province_id": "استان", @@ -252,18 +260,17 @@ "national_code_number": "کد ملی می بایست شامل اعداد باشد", "national_code_positive": "کد ملی می بایست مثبت باشد", "national_code_max": "کد ملی می بایست 10 رقم باشد", - "national_number_positive": "شناسه ملی شرکت می بایست مثبت باشد", + "national_number_positive": "شناسه ملی می بایست مثبت باشد", "error_message_national_id": "لطفا کد ملی خود را وارد کنید!", - "national_number_number": "شناسه ملی شرکت می بایست شامل اعداد باشد", - "national_number_max": "شناسه ملی شرکت می بایست 11 رقم باشد", - "error_message_national_number": "لطفا شناسه ملی شرکت خود را وارد کنید!", + "national_number_number": "شناسه ملی می بایست شامل اعداد باشد", + "national_number_max": "شناسه ملی می بایست 11 رقم باشد", + "error_message_national_number": "لطفا شناسه ملی خود را وارد کنید!", "error_message_shenasname_serial": "لطفا سریال پشت کارت ملی خود را وارد کنید!", "error_message_tracking_code": "لطفا کد رهگیری کارت ملی خود را وارد کنید!", "text_field_shenasname_serial": "سریال پشت کارت ملی", "text_field_national_trackin_code": "کد رهگیری کارت ملی", "text_field_national_id": "کد ملی", "text_field_postal_code": "کد پستی", - "text_field_company_postal_code": "کد پستی شرکت", "text_field_national_serial_number": "سریال پشت کارت ملی", "text_field_address": "آدرس", "text_field_birthday": "تاریخ تولد", @@ -274,7 +281,7 @@ "text_field_occupation_id": "شغل", "text_field_name": "نام کامل مالک", "text_field_navgan_type": "نوع ناوگان", - "text_field_shenase_meli": "شناسه ملی شرکت", + "text_field_shenase_meli": "شناسه ملی", "text_field_vehicle_type": "نوع وسیله", "text_field_tel_number": "شماره ثابت (با پیش شماره استان)", "text_field_enter_your_national_id": "کد ملی را وارد کنید", @@ -286,7 +293,7 @@ "text_field_enter_your_birthday": "تاریخ تولد را وارد کنید", "text_field_enter_your_navgan_id": "کد ناوگان را وارد کنید", "text_field_enter_your_name": "نام کامل مالک را وارد کنید", - "text_field_enter_your_shenase_meli": "شناسه ملی شرکت را وارد کنید", + "text_field_enter_your_shenase_meli": "شناسه ملی را وارد کنید", "text_field_enter_your_national_tracking_code": "کد رهگیری کارت ملی را وارد کنید", "postal_code_max": "کد پستی می بایست 10 رقم باشد", "company_postal_code_max": "کد پستی شرکت می بایست 10 رقم باشد", 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 213aef1..fa848d5 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -48,6 +48,7 @@ const AddFormComponent = () => { const initialValues = { person_type: "real", telephone_number: "", + company_tel_number: "", vehicle_type: "", province_id: "", father_name: "", @@ -72,6 +73,7 @@ const AddFormComponent = () => { plate_part4: "", address: "", birthday: "", + company_date: "", education_id: "", occupation_id: "", checkedBox: false, @@ -85,6 +87,12 @@ const AddFormComponent = () => { return stringValue.length === 11 }) .required(t("LoanRequest.error_message_tel_number")), + company_tel_number: Yup.mixed() + .test("max", `${t("LoanRequest.company_tel_number_max")}`, (value) => { + const stringValue = String(value); + return stringValue.length === 11 + }) + .required(t("LoanRequest.error_message_company_tel_number")), 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")), @@ -95,6 +103,7 @@ const AddFormComponent = () => { 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")), + company_date: 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")), 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 78a38aa..12d9f82 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx @@ -3,6 +3,9 @@ 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"; const LegalPersonForm = ({formik}) => { const t = useTranslations(); @@ -86,7 +89,7 @@ const LegalPersonForm = ({formik}) => { - + { helperText={formik.touched.company_postal_code && formik.errors.company_postal_code} /> - + { helperText={formik.touched.company_tel_number && formik.errors.company_tel_number} /> + + + setOpen(false)} + onOpen={() => setOpen(true)} + /> + ) From 8914971de012bdad37725cde8ef0b36678ea679c Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Sun, 14 Apr 2024 10:45:55 +0330 Subject: [PATCH 3/6] 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" From 0be35ececd3fba7251a96584c1c942d99886ea1d Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Sun, 14 Apr 2024 15:03:00 +0330 Subject: [PATCH 4/6] legal person loan request part 3 --- public/locales/fa/app.json | 7 + .../navgan/add-request-loan/forms/AddForm.jsx | 771 +----------------- .../forms/LegalPersonDatePicker.jsx | 39 +- .../forms/LegalPersonForm.jsx | 400 ++++++--- .../add-request-loan/forms/RealPersonForm.jsx | 187 ++++- .../navgan/add-request-loan/index.jsx | 9 - 6 files changed, 523 insertions(+), 890 deletions(-) diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 58fe2bb..67bbf2e 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -2,6 +2,7 @@ "app_name": "سامانه جامع تسهیلات", "app_short_name": "سامانه تسهیلات", "birthday": "تاریخ تولد", + "company_date": "تاریخ ثبت شرکت", "birthday_error": "تاریخ تولد خود را وارد کنید!", "dashboard": "داشبورد", "text_field_city_id": "شهر", @@ -156,14 +157,18 @@ "real_person": "شخص حقیقی", "legal_person": "شخص حقوقی", "national_code_number": "کد ملی می بایست شامل اعداد باشد", + "boss_national_code_number": "کد ملی مدیر عامل می بایست شامل اعداد باشد", "national_number_number": "شناسه ملی شرکت می بایست شامل اعداد باشد", "national_code_max": "کد ملی می بایست 10 رقم باشد", + "national_serial_number_max": "سریال پشت کارت ملی می بایست 10 رقم باشد", + "boss_national_code_max": "کد ملی مدیر عامل می بایست 10 رقم باشد", "national_number_max": "شناسه ملی شرکت می بایست 11 رقم باشد", "shenasname_serial_max": "سریال پشت کارت ملی می بایست شامل 10 بخش باشد", "postal_code_max": "کد پستی می بایست 10 رقم باشد", "tel_number_max": "شماره ثابت می بایست 11 رقم باشد", "company_tel_number_max": "شماره ثابت شرکت می بایست 11 رقم باشد", "national_code_positive": "کد ملی می بایست مثبت باشد", + "boss_national_code_positive": "کد ملی مدیر عامل می بایست مثبت باشد", "national_number_positive": "شناسه ملی شرکت می بایست مثبت باشد", "uploading_documents": "اسناد", "error_message_person_type": "نوع شخص خود را وارد کنید!", @@ -247,11 +252,13 @@ "text_field_loading_provinces_list": "درحال دریافت استان ها ...", "text_field_error_fetching_provinces": "خطا در دریافت استان ها", "text_field_enter_your_national_code": "کد ملی خود را وارد کنید", + "text_field_enter_your_boss_national_code": "کد ملی مدیر عامل را وارد کنید", "text_field_enter_your_province_id": "استان خود را وارد کنید", "text_field_enter_your_city_id": "شهر خود را وارد کنید", "text_field_navgan_id": "کد هوشمند ناوگان", "text_field_enter_your_navgan_id": "کد هوشمند ناوگان خود را وارد کنید", "text_field_national_code": "کد ملی", + "text_field_boss_national_code": "کد ملی مدیر عامل", "text_field_national_number": "شناسه ملی شرکت", "text_field_enter_your_national_id": "کد ملی خود را وارد کنید", "text_field_enter_your_national_number": "شناسه ملی شرکت خود را وارد کنید", 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 aa3f9bf..f83a954 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx @@ -1,217 +1,24 @@ -import SelectBox from "@/core/components/SelectBox"; -import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; import { - Box, Button, - Checkbox, Collapse, - 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, useUser} from "@witel/webapp-builder"; -import useCities from "@/lib/app/hooks/useCities"; -import PlateNumber from "@/core/components/PlateNumber"; -import MuiDatePicker from "@/core/components/MuiDatePicker"; -import UseEducations from "@/lib/app/hooks/useEducations"; -import useOccupations from "@/lib/app/hooks/useOccupations"; +import {CenterLayout} from "@witel/webapp-builder"; import {useState} from "react"; 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"; -import useLimitedProvince from "@/lib/app/hooks/useLimitedProvince"; import RealPersonForm from "@/components/dashboard/navgan/add-request-loan/forms/RealPersonForm"; import LegalPersonForm from "@/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm"; const AddFormComponent = () => { - const router = useRouter() - const {getUser, changeUser} = useUser() const t = useTranslations(); const [finishLoanRequest, setFinishLoanRequest] = useState(false) - const [checked, setChecked] = useState(false); - const requestServer = useRequest() - const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince() - const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities() - const {educationsList, isLoadingEducationsList, errorEducationsList} = UseEducations() - const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations() - - const initialValues = { - person_type: "real", - telephone_number: "", - company_tel_number: "", - 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: "", - navgan_type: "", - plate_part1: "", - plate_part2: "الف", - plate_part3: "", - plate_part4: "", - address: "", - birthday: "", - company_date: "", - 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")), - company_tel_number: Yup.mixed() - .test("max", `${t("LoanRequest.company_tel_number_max")}`, (value) => { - const stringValue = String(value); - return stringValue.length === 11 - }) - .required(t("LoanRequest.error_message_company_tel_number")), - 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")), - address: Yup.string().required(t("LoanRequest.error_message_address")), - birthday: Yup.string().required(t("LoanRequest.error_message_date_of_birth")), - company_date: 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")), - company_postal_code: Yup.mixed() - .test("max", `${t("LoanRequest.company_postal_code_max")}`, (value) => value.toString().length === 10) - .required(t("LoanRequest.error_message_company_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")), - plate_part2: Yup.mixed() - .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")), - plate_part4: Yup.mixed().test("max", `${t("LoanRequest.error_message_plate_number")}`, (value) => value.toString().length === 2) - .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")), - 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) - .test("max", `${t("LoanRequest.national_code_max")}`, (value) => value.toString().length === 10) - .required(t("LoanRequest.error_message_national_id")), - 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 - }), - 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 - }) - }); - - - 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, - register_number: values.register_number, - national_code: values.national_code, - vehicle_type: values.vehicle_type, - company_name: values.company_name, - province_id: values.province_id, - father_name: values.father_name, - first_name: values.first_name, - last_name: values.last_name, - city_id: values.city_id, - navgan_id: values.navgan_id, - postal_code: values.postal_code, - navgan_type: values.navgan_type, - gender: values.gender, - 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: _data - }).then(() => { - router.replace('/dashboard/navgan/followUp-loan') - getUser((data) => { - changeUser(data); - }); - }).catch(() => { - }).finally(() => { - props.setSubmitting(false) - }) - }; - - const formik = useFormik({ - initialValues, validationSchema, onSubmit: handleSubmit - }) + const [personType, setPersonType] = useState("real") return (<> {finishLoanRequest ? ( @@ -227,560 +34,28 @@ const AddFormComponent = () => { ) : ( <> - - - { - if (value === null) return - formik.handleChange({ - target: { - name: "person_type", value: value, - }, - }) - }} - > - - {t("LoanRequest.real_person")} - - - {t("LoanRequest.legal_person")} - - - - - { - formik.values.person_type === "real" ? : - } - {/**/} - {/* */} - {/* {formik.values.person_type === "legal" ? (*/} - {/* {*/} - {/* 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*/} - {/* />*/} - {/* ) : (*/} - {/* {*/} - {/* 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.values.person_type === 'legal' && (*/} - {/* */} - {/* */} - {/* */} - {/* */} - {/* */} - {/* */} - {/* {*/} - {/* const inputValue = event.target.value;*/} - {/* if (isNaN(Number(inputValue))) {*/} - {/* return;*/} - {/* }*/} - {/* formik.handleChange({*/} - {/* target: {*/} - {/* name: "register_number", value: inputValue,*/} - {/* },*/} - {/* });*/} - {/* }}*/} - {/* label={t("LoanRequest.text_field_register_number")}*/} - {/* placeholder={t("LoanRequest.text_field_enter_your_register_number")}*/} - {/* onBlur={formik.handleBlur("register_number")}*/} - {/* error={formik.touched.register_number && Boolean(formik.errors.register_number)}*/} - {/* helperText={formik.touched.register_number && formik.errors.register_number}*/} - {/* fullWidth*/} - {/* />*/} - {/* */} - {/* */} - {/* */} - {/*)}*/} - {/**/} - {/* */} - {/* {*/} - {/* 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' ? (*/} - {/* */} - {/* */} - {/* ) : (*/} - {/* */} - {/* */} - {/* */} - {/* )}*/} - {/**/} - {/**/} - {/* */} - {/* */} - {/* */} - {/* */} - {/* */} - {/* */} - {/**/} - {/**/} - {/* */} - {/* */} - {/* */} - {/* */} - {/* {*/} - {/* formik.setFieldValue('gender', event.target.value)*/} - {/* }}*/} - {/* setFieldTouched={formik.setFieldTouched}*/} - {/* error={formik.touched.gender && Boolean(formik.errors.gender)}*/} - {/* helperText={formik.touched.gender && formik.errors.gender}*/} - {/* onBlur={formik.handleBlur("gender")}*/} - {/* />*/} - {/* */} - {/* */} - {/* */} - {/* */} - {/**/} - {/**/} - {/* */} - {/* {*/} - {/* 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")}`}/> - - - - - - + + {t("LoanRequest.real_person")} + + + {t("LoanRequest.legal_person")} + + + + { + personType === "real" ? : + + } )} ); diff --git a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx index b256be3..733e33a 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx @@ -26,8 +26,8 @@ function ButtonField(props) { sx={{ width: "100%", padding: 0.8 }} variant="outlined" color={ - props.slotProps.formik.touched.birthday && - Boolean(props.slotProps.formik.errors.birthday) + props.slotProps.formik.touched.company_date && + Boolean(props.slotProps.formik.errors.company_date) ? "error" : "primary" } @@ -37,30 +37,14 @@ function ButtonField(props) { aria-label={ariaLabel} onClick={() => setOpen?.((prev) => !prev)} > - {label ? `${t("birthday")}: ${label}` : `${t("birthday")}`} + {label ? `${t("company_date")}: ${label}` : `${t("company_date")}`} ); } 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 = () => { +const LegalPersonDatePicker = ({ formik, disabled }) => { return ( { > { - formik.setFieldValue("birthday", moment(newValue)); + formik.setFieldValue("company_date", moment(newValue)); }} /> - {formik.touched.birthday && formik.errors.birthday} + {formik.touched.company_date && formik.errors.company_date} ); 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 dbda8fa..d45dbe4 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx @@ -1,20 +1,168 @@ -import {Grid, TextField, ToggleButton, ToggleButtonGroup} from "@mui/material"; +import {Box, Button, Checkbox, FormControlLabel, 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 * as React from "react"; import SelectBox from "@/core/components/SelectBox"; import useLimitedProvince from "@/lib/app/hooks/useLimitedProvince"; import PlateNumber from "@/core/components/PlateNumber"; +import {useRouter} from "next/router"; +import {useRequest, useUser} from "@witel/webapp-builder"; +import * as Yup from "yup"; +import {SEND_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes"; +import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; +import {useFormik} from "formik"; +import LegalPersonDatePicker from "@/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker"; -const LegalPersonForm = ({formik}) => { +const LegalPersonForm = ({setFinishLoanRequest}) => { const t = useTranslations(); + const router = useRouter() + const requestServer = useRequest() + const {getUser, changeUser} = useUser() const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities() const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince() const {educationsList, isLoadingEducationsList, errorEducationsList} = UseEducations() const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations() + + const initialValues = { + person_type: "legal", + company_tel_number: "", + vehicle_type: "", + province_id: "", + boss_father_name: "", + company_postal_code : "", + register_number: "", + boss_gender: "", + boss_first_name: "", + boss_last_name: "", + city_id: "", + navgan_id: "", + boss_national_code: "", + national_number: "", + company_name: "", + boss_national_serial_number: "", + boss_national_card_tracking_code: "", + national_serial_number_or_tracking_code: "national_serial_number", + navgan_type: "", + plate_part1: "", + plate_part2: "الف", + plate_part3: "", + plate_part4: "", + address: "", + company_date: "", + education_id: "", + occupation_id: "", + checkedBox: false, + }; + + const validationSchema = Yup.object().shape({ + company_tel_number: Yup.mixed() + .test("max", `${t("LoanRequest.company_tel_number_max")}`, (value) => { + const stringValue = String(value); + return stringValue.length === 11 + }) + .required(t("LoanRequest.error_message_company_tel_number")), + vehicle_type: Yup.string().required(t("LoanRequest.error_message_vehicle_type")), + register_number: Yup.string().required(t("LoanRequest.error_message_register_number")), + boss_father_name: Yup.string().required(t("LoanRequest.error_message_boss_father_name")), + company_name: Yup.string().required(t("LoanRequest.error_message_company_name")), + 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")), + address: Yup.string().required(t("LoanRequest.error_message_address")), + company_date: Yup.string().required(t("LoanRequest.error_message_date_of_birth")), + company_postal_code: Yup.mixed() + .test("max", `${t("LoanRequest.company_postal_code_max")}`, (value) => value.toString().length === 10) + .required(t("LoanRequest.error_message_company_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")), + plate_part2: Yup.mixed() + .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")), + plate_part4: Yup.mixed().test("max", `${t("LoanRequest.error_message_plate_number")}`, (value) => value.toString().length === 2) + .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")), + boss_first_name: Yup.string().required(t("LoanRequest.error_message_boss_first_name")), + boss_last_name: Yup.string().required(t("LoanRequest.error_message_boss_last_name")), + boss_national_code: Yup.mixed() + .test("is-number", `${t("LoanRequest.boss_national_code_number")}`, (value) => !isNaN(value)) + .test("positive", `${t("LoanRequest.boss_national_code_positive")}`, (value) => value >= 0) + .test("max", `${t("LoanRequest.boss_national_code_max")}`, (value) => value.toString().length === 10) + .required(t("LoanRequest.error_message_national_id")), + 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; + }), + 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 + }), + 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 + }) + }); + + 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.company_tel_number, + register_number: values.register_number, + national_code: values.boss_national_code, + vehicle_type: values.vehicle_type, + company_name: values.company_name, + province_id: values.province_id, + father_name: values.father_name, + first_name: values.first_name, + last_name: values.last_name, + city_id: values.city_id, + navgan_id: values.navgan_id, + postal_code: values.postal_code, + navgan_type: values.navgan_type, + gender: values.gender, + 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: _data + }).then(() => { + router.replace('/dashboard/navgan/followUp-loan') + getUser((data) => { + changeUser(data); + }); + }).catch(() => { + }).finally(() => { + props.setSubmitting(false) + }) + }; + + const formik = useFormik({ + initialValues, validationSchema, onSubmit: handleSubmit + }) return ( <> @@ -97,7 +245,7 @@ const LegalPersonForm = ({formik}) => { sx={{width: "100%"}} name="company_postal_code" variant="outlined" - value={formik.values.postal_code} + value={formik.values.company_postal_code} inputProps={{inputMode: 'numeric', pattern: '[0-9]*'}} type={'tel'} onChange={(event) => { @@ -107,7 +255,7 @@ const LegalPersonForm = ({formik}) => { } formik.handleChange({ target: { - name: "postal_code", value: inputValue, + name: "company_postal_code", value: inputValue, }, }); }} @@ -125,7 +273,7 @@ const LegalPersonForm = ({formik}) => { sx={{width: "100%"}} name="company_tel_number" variant="outlined" - value={formik.values.telephone_number} + value={formik.values.company_tel_number} inputProps={{inputMode: 'numeric', pattern: '[0-9]*'}} type={'tel'} size="small" @@ -136,7 +284,7 @@ const LegalPersonForm = ({formik}) => { } formik.handleChange({ target: { - name: "telephone_number", value: inputValue, + name: "company_tel_number", value: inputValue, }, }); }} @@ -149,7 +297,7 @@ const LegalPersonForm = ({formik}) => { /> - { /> + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "boss_national_code", value: inputValue, + }, + }); + }} + label={t("LoanRequest.text_field_boss_national_code")} + placeholder={t("LoanRequest.text_field_enter_your_boss_national_code")} + onBlur={formik.handleBlur("boss_national_code")} + error={formik.touched.boss_national_code && Boolean(formik.errors.boss_national_code)} + helperText={formik.touched.boss_national_code && formik.errors.boss_national_code} + fullWidth + /> + + + { + formik.setFieldValue('boss_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")} + /> + + + + + + + + + + { name="boss_national_serial_number" variant="outlined" size="small" - value={formik.values.national_serial_number} + value={formik.values.boss_national_serial_number} label={t("LoanRequest.text_field_boss_national_serial_number")} placeholder={t("LoanRequest.text_field_enter_your_boss_national_serial_number")} fullWidth @@ -250,7 +485,7 @@ const LegalPersonForm = ({formik}) => { name="boss_national_card_tracking_code" variant="outlined" size="small" - value={formik.values.national_card_tracking_code} + value={formik.values.boss_national_card_tracking_code} label={t("LoanRequest.text_field_boss_national_card_tracking_code")} placeholder={t("LoanRequest.text_field_enter_your_boss_national_card_tracking_code")} fullWidth @@ -266,7 +501,7 @@ const LegalPersonForm = ({formik}) => { sx={{width: "100%"}} name="boss_father_name" variant="outlined" - value={formik.values.father_name} + value={formik.values.boss_father_name} onChange={formik.handleChange} size="small" label={t("LoanRequest.text_field_boss_father_name")} @@ -278,93 +513,6 @@ const LegalPersonForm = ({formik}) => { /> - - - { - 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("checkedBox", event.target.checked) + }} + />} + label={`${t("LoanRequest.checkbox")}`}/> + + + + + + ) } 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 d39d330..d3cef38 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/RealPersonForm.jsx @@ -1,16 +1,132 @@ -import {Grid, TextField, ToggleButton, ToggleButtonGroup} from "@mui/material"; +import {Box, Button, Checkbox, FormControlLabel, Grid, TextField, ToggleButton, ToggleButtonGroup} from "@mui/material"; import SelectBox from "@/core/components/SelectBox"; import MuiDatePicker from "@/core/components/MuiDatePicker"; import {useTranslations} from "next-intl"; import useLimitedProvince from "@/lib/app/hooks/useLimitedProvince"; import useCities from "@/lib/app/hooks/useCities"; -import UseEducations from "@/lib/app/hooks/useEducations"; -import useOccupations from "@/lib/app/hooks/useOccupations"; +import {useFormik} from "formik"; +import * as Yup from "yup"; +import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; +import {SEND_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes"; +import {useRequest, useUser} from "@witel/webapp-builder"; +import {useRouter} from "next/router"; +import {useState} from "react"; -const RealPersonForm = ({formik}) => { +const RealPersonForm = ({setFinishLoanRequest}) => { const t = useTranslations(); const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince() const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities() + const requestServer = useRequest() + const {getUser, changeUser} = useUser() + const router = useRouter() + + const initialValues = { + person_type : "real", + telephone_number: "", + father_name: "", + gender: "", + first_name: "", + last_name: "", + city_id: "", + province_id: "", + navgan_id: "", + national_code: "", + national_serial_number: "", + national_card_tracking_code: "", + national_serial_number_or_tracking_code: "national_serial_number", + postal_code: "", + navgan_type: "", + address: "", + birthday: "", + checkedBox: false, + }; + + const validationSchema = Yup.object().shape({ + 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")), + father_name: Yup.string().required(t("LoanRequest.error_message_father_name")), + gender: Yup.string().required(t("LoanRequest.error_message_gender")), + navgan_type: Yup.string().required(t("LoanRequest.error_message_navgan_type")), + 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")), + 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")), + first_name: Yup.string().required(t("LoanRequest.error_message_first_name")), + last_name: Yup.string().required(t("LoanRequest.error_message_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) + .test("max", `${t("LoanRequest.national_code_max")}`, (value) => value.toString().length === 10) + .required(t("LoanRequest.error_message_national_id")), + 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().test("max", `${t("LoanRequest.national_serial_number_max")}`, (value) => value && value.toString().length === 10).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: 0, + telephone_number: values.telephone_number, + national_code: values.national_code, + vehicle_type: values.vehicle_type, + province_id: values.province_id, + father_name: values.father_name, + first_name: values.first_name, + last_name: values.last_name, + city_id: values.city_id, + navgan_id: values.navgan_id, + postal_code: values.postal_code, + navgan_type: values.navgan_type, + gender: values.gender, + address: values.address, + birthday: values.birthday.locale('en').format("YYYY-MM-DD"), ..._national_card, ..._national_number + } + + await requestServer(SEND_LOAN_REQUEST_NAVGAN, "post", { + auth: true, notification: true, data: _data + }).then(() => { + router.replace('/dashboard/navgan/followUp-loan') + getUser((data) => { + changeUser(data); + }); + }).catch(() => { + }).finally(() => { + props.setSubmitting(false) + }) + }; + + const formik = useFormik({ + initialValues, validationSchema, onSubmit: handleSubmit + }) return ( <> @@ -96,9 +212,9 @@ const RealPersonForm = ({formik}) => { }} 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} + onBlur={formik.handleBlur("national_code")} + error={formik.touched.national_code && Boolean(formik.errors.national_code)} + helperText={formik.touched.national_code && formik.errors.national_code} fullWidth /> @@ -333,6 +449,63 @@ const RealPersonForm = ({formik}) => { /> + + + + + + + + { + formik.setFieldValue("checkedBox", event.target.checked) + }} + />} + label={`${t("LoanRequest.checkbox")}`}/> + + + + + + ) } diff --git a/src/components/dashboard/navgan/add-request-loan/index.jsx b/src/components/dashboard/navgan/add-request-loan/index.jsx index 211862c..bbe445b 100644 --- a/src/components/dashboard/navgan/add-request-loan/index.jsx +++ b/src/components/dashboard/navgan/add-request-loan/index.jsx @@ -1,20 +1,11 @@ -import {Box, Chip, Divider} from "@mui/material"; import {useTranslations} from "next-intl"; import AddFormComponent from "@/components/dashboard/navgan/add-request-loan/forms/AddForm"; -import {CenterLayout, useUser} from "@witel/webapp-builder"; const LoanRequestComponent = () => { const t = useTranslations(); return ( <> - - - - - ); From 23ff570697b6eab469a04b861f5c32c234d878d1 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Tue, 16 Apr 2024 16:03:10 +0330 Subject: [PATCH 5/6] add activity and priority list --- public/locales/fa/app.json | 4 + .../forms/LegalPersonForm.jsx | 75 ++++++++ .../add-request-loan/forms/RealPersonForm.jsx | 168 +++++++++++++++++- src/core/components/PlateNumber.jsx | 2 +- src/core/data/apiRoutes.js | 4 + src/lib/app/hooks/useActivityType.jsx | 34 ++++ src/lib/app/hooks/usePriorityLists.jsx | 34 ++++ src/lib/app/hooks/useProjectTitle.jsx | 35 ++++ 8 files changed, 354 insertions(+), 2 deletions(-) create mode 100644 src/lib/app/hooks/useActivityType.jsx create mode 100644 src/lib/app/hooks/usePriorityLists.jsx create mode 100644 src/lib/app/hooks/useProjectTitle.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 67bbf2e..ebc5008 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -204,6 +204,8 @@ "error_message_checkedBox": "لطفا کد صحت اطلاعات خود را تایید کنید!", "error_message_navgan_type": "لطفا نوع ناوگان خود را وارد کنید!", "error_message_address": "لطفا آدرس خود را وارد کنید!", + "error_message_activity_type": "لطفا نوع فعالیت خود را وارد کنید!", + "error_message_priority_list": "لطفا اولویت فعالیت خود را وارد کنید!", "text_field_tel_number": "شماره ثابت (با پیش شماره استان)", "text_field_company_tel_number": "شماره ثابت شرکت (با پیش شماره استان)", "text_field_education_id": "مدرک تحصیلی", @@ -218,6 +220,8 @@ "text_field_last_name": "نام خانوادگی", "text_field_boss_last_name": "نام خانوادگی مدیر عامل", "text_field_gender": "جنسیت", + "text_field_activity_type": "نوع فعالیت", + "text_field_priority_list": "اولویت فعالیت", "text_field_boss_gender": "جنسیت مدیر عامل", "text_field_register_number": "شماره ثبت شرکت", "text_field_father_name": "نام پدر", 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 d45dbe4..1c71b3b 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx @@ -14,6 +14,9 @@ import {SEND_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes"; import DataSaverOnIcon from "@mui/icons-material/DataSaverOn"; import {useFormik} from "formik"; import LegalPersonDatePicker from "@/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker"; +import useProjectTitle from "@/lib/app/hooks/useProjectTitle"; +import useActivityType from "@/lib/app/hooks/useActivityType"; +import usePriorityLists from "@/lib/app/hooks/usePriorityLists"; const LegalPersonForm = ({setFinishLoanRequest}) => { const t = useTranslations(); @@ -24,10 +27,14 @@ const LegalPersonForm = ({setFinishLoanRequest}) => { const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince() const {educationsList, isLoadingEducationsList, errorEducationsList} = UseEducations() const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations() + const {activityType, isLoadingActivityType, errorActivityType} = useActivityType() + const {priorityLists, isLoadingPriorityLists, errorPriorityLists} = usePriorityLists() const initialValues = { person_type: "legal", company_tel_number: "", + activity_type: "", + priority_list: "", vehicle_type: "", province_id: "", boss_father_name: "", @@ -64,6 +71,8 @@ const LegalPersonForm = ({setFinishLoanRequest}) => { }) .required(t("LoanRequest.error_message_company_tel_number")), vehicle_type: Yup.string().required(t("LoanRequest.error_message_vehicle_type")), + activity_type: Yup.string().required(t("LoanRequest.error_message_activity_type")), + priority_list: Yup.string().required(t("LoanRequest.error_message_priority_list")), register_number: Yup.string().required(t("LoanRequest.error_message_register_number")), boss_father_name: Yup.string().required(t("LoanRequest.error_message_boss_father_name")), company_name: Yup.string().required(t("LoanRequest.error_message_company_name")), @@ -165,6 +174,72 @@ const LegalPersonForm = ({setFinishLoanRequest}) => { }) return ( <> + + {/**/} + {/* {*/} + {/* formik.setFieldValue('project_title', event.target.value)*/} + {/* }}*/} + {/* setFieldTouched={formik.setFieldTouched}*/} + {/* error={formik.touched.project_title && Boolean(formik.errors.project_title)}*/} + {/* helperText={formik.touched.project_title && formik.errors.project_title}*/} + {/* onBlur={formik.handleBlur("project_title")}*/} + {/* />*/} + {/**/} + + + { + 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")} + /> + + + { + formik.setFieldValue('priority_list', event.target.value) + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.priority_list && Boolean(formik.errors.priority_list)} + helperText={formik.touched.priority_list && formik.errors.priority_list} + onBlur={formik.handleBlur("priority_list")} + /> + + { const t = useTranslations(); const {provinceList, isLoadingProvinceList, errorProvinceList} = useLimitedProvince() const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities() + const {educationsList, isLoadingEducationsList, errorEducationsList} = UseEducations() + const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations() + const {activityType, isLoadingActivityType, errorActivityType} = useActivityType() + const {priorityLists, isLoadingPriorityLists, errorPriorityLists} = usePriorityLists() const requestServer = useRequest() const {getUser, changeUser} = useUser() const router = useRouter() const initialValues = { person_type : "real", + vehicle_type : "", telephone_number: "", + activity_type: "", + priority_list: "", father_name: "", gender: "", first_name: "", last_name: "", city_id: "", province_id: "", + education_id: "", + occupation_id: "", navgan_id: "", national_code: "", national_serial_number: "", @@ -37,6 +51,10 @@ const RealPersonForm = ({setFinishLoanRequest}) => { postal_code: "", navgan_type: "", address: "", + plate_part1: "", + plate_part2: "الف", + plate_part3: "", + plate_part4: "", birthday: "", checkedBox: false, }; @@ -49,7 +67,12 @@ const RealPersonForm = ({setFinishLoanRequest}) => { }) .required(t("LoanRequest.error_message_tel_number")), father_name: Yup.string().required(t("LoanRequest.error_message_father_name")), + vehicle_type: Yup.string().required(t("LoanRequest.error_message_vehicle_type")), + activity_type: Yup.string().required(t("LoanRequest.error_message_activity_type")), + priority_list: Yup.string().required(t("LoanRequest.error_message_priority_list")), gender: Yup.string().required(t("LoanRequest.error_message_gender")), + occupation_id: Yup.string().required(t("LoanRequest.error_message_occupation_id")), + education_id: Yup.string().required(t("LoanRequest.error_message_education_id")), navgan_type: Yup.string().required(t("LoanRequest.error_message_navgan_type")), address: Yup.string().required(t("LoanRequest.error_message_address")), birthday: Yup.string().required(t("LoanRequest.error_message_date_of_birth")), @@ -61,6 +84,14 @@ const RealPersonForm = ({setFinishLoanRequest}) => { city_id: Yup.string().required(t("LoanRequest.error_message_city_id")), first_name: Yup.string().required(t("LoanRequest.error_message_first_name")), last_name: Yup.string().required(t("LoanRequest.error_message_last_name")), + plate_part1: Yup.mixed().test("max", `${t("LoanRequest.error_message_plate_number")}`, (value) => value.toString().length === 2) + .required(t("LoanRequest.error_message_plate_number")), + plate_part2: Yup.mixed() + .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")), + plate_part4: Yup.mixed().test("max", `${t("LoanRequest.error_message_plate_number")}`, (value) => value.toString().length === 2) + .required(t("LoanRequest.error_message_plate_number")), 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) @@ -130,6 +161,72 @@ const RealPersonForm = ({setFinishLoanRequest}) => { return ( <> + + {/**/} + {/* {*/} + {/* formik.setFieldValue('project_title', event.target.value)*/} + {/* }}*/} + {/* setFieldTouched={formik.setFieldTouched}*/} + {/* error={formik.touched.project_title && Boolean(formik.errors.project_title)}*/} + {/* helperText={formik.touched.project_title && formik.errors.project_title}*/} + {/* onBlur={formik.handleBlur("project_title")}*/} + {/* />*/} + {/**/} + + + { + 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")} + /> + + + { + formik.setFieldValue('priority_list', event.target.value) + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.priority_list && Boolean(formik.errors.priority_list)} + helperText={formik.touched.priority_list && formik.errors.priority_list} + onBlur={formik.handleBlur("priority_list")} + /> + + { /> + + + 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")} + /> + + { disabled={disabled} fullWidth > - {plate_words.find(p => p.value === formik.values.plate_part2).name} + {plate_words.find(p => p.value === formik.values.plate_part2)?.name} { + const [isLoadingActivityType, setIsLoadingActivityType] = useState(false) + const [errorActivityType, setErrorActivityType] = useState(false) + const [activityType, setActivityType] = useState([]) + const requestServer = useRequest({auth: true, notification: false}) + + useEffect(() => { + setIsLoadingActivityType(true) + requestServer(GET_ACTIVITY_LIST, 'get', {auth: true, notification: false}).then(({data}) => { + const formattedData = data.data.map((activityList, index) => ({ + id: index, + name: activityList.name, + value: activityList.id, + })); + setIsLoadingActivityType(false) + setActivityType(formattedData); + }).catch(() => { + setIsLoadingActivityType(false) + setErrorActivityType(true) + }) + }, []) + + return { + activityType, + isLoadingActivityType, + errorActivityType + } +}; + +export default useActivityType; \ No newline at end of file diff --git a/src/lib/app/hooks/usePriorityLists.jsx b/src/lib/app/hooks/usePriorityLists.jsx new file mode 100644 index 0000000..75a294e --- /dev/null +++ b/src/lib/app/hooks/usePriorityLists.jsx @@ -0,0 +1,34 @@ +import {GET_PRIORITY_LIST} from "@/core/data/apiRoutes"; +import {useRequest} from "@witel/webapp-builder"; +import {useEffect, useState} from "react"; + +const usePriorityLists = () => { + const [isLoadingPriorityLists, setIsLoadingPriorityLists] = useState(false) + const [errorPriorityLists, setErrorPriorityLists] = useState(false) + const [priorityLists, setPriorityLists] = useState([]) + const requestServer = useRequest({auth: true, notification: false}) + + useEffect(() => { + setIsLoadingPriorityLists(true) + requestServer(GET_PRIORITY_LIST, 'get', {auth: true, notification: false}).then(({data}) => { + const formattedData = data.data.map((priorityList, index) => ({ + id: index, + name: priorityList.name, + value: priorityList.id, + })); + setIsLoadingPriorityLists(false) + setPriorityLists(formattedData); + }).catch(() => { + setIsLoadingPriorityLists(false) + setErrorPriorityLists(true) + }) + }, []) + + return { + priorityLists, + isLoadingPriorityLists, + errorPriorityLists + } +}; + +export default usePriorityLists; \ No newline at end of file diff --git a/src/lib/app/hooks/useProjectTitle.jsx b/src/lib/app/hooks/useProjectTitle.jsx new file mode 100644 index 0000000..797b5c1 --- /dev/null +++ b/src/lib/app/hooks/useProjectTitle.jsx @@ -0,0 +1,35 @@ +import {GET_PROJECT_TITLE, GET_PROVINCE_LIST} from "@/core/data/apiRoutes"; +import {useRequest} from "@witel/webapp-builder"; +import {useEffect, useState} from "react"; + +const useProjectTitle = () => { + const [isLoadingProjectTitle, setIsLoadingProjectTitle] = useState(false) + const [errorProjectTitle, setErrorProjectTitle] = useState(false) + const [projectTitle, setProjectTitle] = useState([]) + const requestServer = useRequest({auth: true, notification: false}) + + useEffect(() => { + setIsLoadingProjectTitle(true) + requestServer(GET_PROJECT_TITLE, 'get', {auth: true, notification: false}).then(({data}) => { + console.log(data) + // const formattedData = data.data.map((projectTitle, index) => ({ + // id: index, + // name: projectTitle.name, + // value: projectTitle.id, + // })); + setIsLoadingProjectTitle(false) + // setProjectTitle(formattedData); + }).catch(() => { + setIsLoadingProjectTitle(false) + setErrorProjectTitle(true) + }) + }, []) + + return { + projectTitle, + isLoadingProjectTitle, + errorProjectTitle + } +}; + +export default useProjectTitle; \ No newline at end of file From 39df9d1ac6380cd9e8c65170e7988e455e2575f5 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Wed, 17 Apr 2024 10:17:39 +0330 Subject: [PATCH 6/6] comment project title --- public/locales/fa/app.json | 2 ++ .../add-request-loan/forms/LegalPersonForm.jsx | 9 +++++---- .../add-request-loan/forms/RealPersonForm.jsx | 9 +++++---- src/lib/app/hooks/useProjectTitle.jsx | 14 +++++++------- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index ebc5008..5486303 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -206,6 +206,7 @@ "error_message_address": "لطفا آدرس خود را وارد کنید!", "error_message_activity_type": "لطفا نوع فعالیت خود را وارد کنید!", "error_message_priority_list": "لطفا اولویت فعالیت خود را وارد کنید!", + "error_message_project_title": "لطفا عنوان پروژه خود را وارد کنید!", "text_field_tel_number": "شماره ثابت (با پیش شماره استان)", "text_field_company_tel_number": "شماره ثابت شرکت (با پیش شماره استان)", "text_field_education_id": "مدرک تحصیلی", @@ -216,6 +217,7 @@ "text_field_name": "نام", "text_field_company_name": "نام شرکت", "text_field_first_name": "نام", + "text_field_project_title": "عنوان پروژه", "text_field_boss_first_name": "نام مدیر عامل", "text_field_last_name": "نام خانوادگی", "text_field_boss_last_name": "نام خانوادگی مدیر عامل", 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 1c71b3b..f36ff39 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonForm.jsx @@ -34,6 +34,7 @@ const LegalPersonForm = ({setFinishLoanRequest}) => { person_type: "legal", company_tel_number: "", activity_type: "", + project_title: "", priority_list: "", vehicle_type: "", province_id: "", @@ -72,6 +73,7 @@ const LegalPersonForm = ({setFinishLoanRequest}) => { .required(t("LoanRequest.error_message_company_tel_number")), vehicle_type: Yup.string().required(t("LoanRequest.error_message_vehicle_type")), activity_type: Yup.string().required(t("LoanRequest.error_message_activity_type")), + project_title: Yup.string().required(t("LoanRequest.error_message_project_title")), priority_list: Yup.string().required(t("LoanRequest.error_message_priority_list")), register_number: Yup.string().required(t("LoanRequest.error_message_register_number")), boss_father_name: Yup.string().required(t("LoanRequest.error_message_boss_father_name")), @@ -181,9 +183,9 @@ const LegalPersonForm = ({setFinishLoanRequest}) => { {/* label={t("LoanRequest.text_field_project_title")}*/} {/* size="small"*/} {/* selectType="project_title"*/} - {/* isLoading={isLoadingProvinceList}*/} - {/* errorEcured={errorProvinceList}*/} - {/* selectors={provinceList}*/} + {/* isLoading={isLoadingProjectTitle}*/} + {/* errorEcured={errorProjectTitle}*/} + {/* selectors={projectTitle}*/} {/* schema={{value: 'value', name: 'name'}}*/} {/* select={formik.values.project_title}*/} {/* value={formik.values.project_title}*/} @@ -196,7 +198,6 @@ const LegalPersonForm = ({setFinishLoanRequest}) => { {/* onBlur={formik.handleBlur("project_title")}*/} {/* />*/} {/**/} - { vehicle_type : "", telephone_number: "", activity_type: "", + project_title: "", priority_list: "", father_name: "", gender: "", @@ -69,6 +70,7 @@ const RealPersonForm = ({setFinishLoanRequest}) => { father_name: Yup.string().required(t("LoanRequest.error_message_father_name")), vehicle_type: Yup.string().required(t("LoanRequest.error_message_vehicle_type")), activity_type: Yup.string().required(t("LoanRequest.error_message_activity_type")), + project_title: Yup.string().required(t("LoanRequest.error_message_project_title")), priority_list: Yup.string().required(t("LoanRequest.error_message_priority_list")), gender: Yup.string().required(t("LoanRequest.error_message_gender")), occupation_id: Yup.string().required(t("LoanRequest.error_message_occupation_id")), @@ -168,9 +170,9 @@ const RealPersonForm = ({setFinishLoanRequest}) => { {/* label={t("LoanRequest.text_field_project_title")}*/} {/* size="small"*/} {/* selectType="project_title"*/} - {/* isLoading={isLoadingProvinceList}*/} - {/* errorEcured={errorProvinceList}*/} - {/* selectors={provinceList}*/} + {/* isLoading={isLoadingProjectTitle}*/} + {/* errorEcured={errorProjectTitle}*/} + {/* selectors={projectTitle}*/} {/* schema={{value: 'value', name: 'name'}}*/} {/* select={formik.values.project_title}*/} {/* value={formik.values.project_title}*/} @@ -183,7 +185,6 @@ const RealPersonForm = ({setFinishLoanRequest}) => { {/* onBlur={formik.handleBlur("project_title")}*/} {/* />*/} {/**/} - { setIsLoadingProjectTitle(true) requestServer(GET_PROJECT_TITLE, 'get', {auth: true, notification: false}).then(({data}) => { console.log(data) - // const formattedData = data.data.map((projectTitle, index) => ({ - // id: index, - // name: projectTitle.name, - // value: projectTitle.id, - // })); + const formattedData = data.data.map((projectTitle, index) => ({ + id: index, + name: projectTitle.name, + value: projectTitle.id, + })); setIsLoadingProjectTitle(false) - // setProjectTitle(formattedData); + setProjectTitle(formattedData); }).catch(() => { setIsLoadingProjectTitle(false) setErrorProjectTitle(true)