From 36eb1b478a180c51405401e1cc64d1ff601e133b Mon Sep 17 00:00:00 2001 From: Amin Ghasempoor Date: Sat, 2 Nov 2024 06:50:38 +0000 Subject: [PATCH] Feature/edit followup --- public/locales/fa/app.json | 37 +- .../forms/LegalPersonDatePicker.jsx | 4 +- .../navgan/followUp-loan/RequestCard.jsx | 157 ++-- .../dashboard/navgan/followUp-loan/index.jsx | 25 +- .../dashboard/navgan/show/form/UpdateForm.jsx | 693 ----------------- .../navgan/show/form/UpdateFormLegal.jsx | 729 ++++++++++++++++++ .../navgan/show/form/UpdateFormReal.jsx | 655 ++++++++++++++++ .../dashboard/navgan/show/form/index.jsx | 20 +- src/lib/app/hooks/useCities.jsx | 2 - 9 files changed, 1534 insertions(+), 788 deletions(-) delete mode 100644 src/components/dashboard/navgan/show/form/UpdateForm.jsx create mode 100644 src/components/dashboard/navgan/show/form/UpdateFormLegal.jsx create mode 100644 src/components/dashboard/navgan/show/form/UpdateFormReal.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index af0407a..8460e70 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -148,6 +148,11 @@ "loan_status": "وضعیت", "loan_bank_branch": "اطلاعات شعبه", "loan_details": "نمایش", + "loan_edit": "ویرایش", + "loan_cancel": "رد درخواست", + "loan_review": "درحال بررسی", + "loan_reserve": "در صف انتظار", + "loan_edit_info": "نیاز به ویرایش اطلاعات", "loan_description": "توضیحات" }, "LoanRequest": { @@ -212,8 +217,6 @@ "error_message_tracking_code": "لطفا کد رهگیری کارت ملی خود را وارد کنید!", "error_message_boss_national_card_tracking_code": "لطفا کد رهگیری کارت ملی مدیر عامل را وارد کنید!", "error_message_postal_code": "لطفا کد پستی خود را وارد کنید!", - "error_message_father_name": "لطفا نام پدر خود را وارد کنید!", - "error_message_boss_father_name": "لطفا نام پدر مدیر عامل را وارد کنید!", "error_message_national_code": "لطفا کد ملی خود را وارد کنید!", "error_message_checkedBox": "لطفا کد صحت اطلاعات خود را تایید کنید!", "error_message_navgan_type": "لطفا نوع ناوگان خود را وارد کنید!", @@ -298,7 +301,10 @@ }, "ShowLoan": { "show_loan_page": "نمایش وام | ناوگان", - "update_loan_page": "ویرایش وام | {person_type}", + "text_field_activity_type": "نوع فعالیت", + "text_field_navgan_plan_id": "عنوان پروژه", + "update_loan_page": "نمایش وام | {person_type} | کد یکتا {id}", + "edit_loan_page": "ویرایش وام | {person_type} | کد یکتا {id}", "loading_show_component": "درحال دریافت اطلاعات درخواست...", "tel_number_max": "شماره ثابت می بایست 11 رقم باشد", "national_code_number": "کد ملی می بایست شامل اعداد باشد", @@ -314,18 +320,27 @@ "text_field_shenasname_serial": "سریال پشت کارت ملی", "text_field_national_trackin_code": "کد رهگیری کارت ملی", "text_field_national_id": "کد ملی", + "text_field_boss_national_id": "کد ملی رییس شرکت", + "text_field_register_number": "شماره ثبت شرکت", "text_field_postal_code": "کد پستی", "text_field_national_serial_number": "سریال پشت کارت ملی", "text_field_address": "آدرس", + "text_field_company_name": "نام شرکت", "text_field_birthday": "تاریخ تولد", "text_field_navgan_id": "کد ناوگان", "text_field_province_id": "استان", + "text_field_boss_father_name": "نام پدر مدیر عامل", "text_field_education_id": "تحصیلات", "text_field_national_tracking_code": "کد رهگیری کارت ملی", "text_field_occupation_id": "شغل", "text_field_name": "نام کامل مالک", "text_field_navgan_type": "نوع ناوگان", - "text_field_shenase_meli": "شناسه ملی", + "text_field_shenase_meli": "شناسه ملی شرکت", + "text_field_first_name": "نام", + "text_field_boss_first_name": "نام مدیر عامل", + "text_field_boss_last_name": "نام خانوادگی مدیر عامل", + "text_field_gender": "جنسیت", + "text_field_last_name": "نام خانوادگی", "text_field_vehicle_type": "نوع وسیله", "text_field_tel_number": "شماره ثابت (با پیش شماره استان)", "text_field_enter_your_national_id": "کد ملی را وارد کنید", @@ -337,6 +352,7 @@ "text_field_enter_your_birthday": "تاریخ تولد را وارد کنید", "text_field_enter_your_navgan_id": "کد ناوگان را وارد کنید", "text_field_enter_your_name": "نام کامل مالک را وارد کنید", + "text_field_father_name": "نام پدر", "text_field_enter_your_shenase_meli": "شناسه ملی را وارد کنید", "text_field_enter_your_national_tracking_code": "کد رهگیری کارت ملی را وارد کنید", "postal_code_max": "کد پستی می بایست 10 رقم باشد", @@ -345,13 +361,26 @@ "error_message_national_serial_number": "لطفا سریال پشت کارت ملی را وارد کنید!", "error_message_address": "لطفا آدرس را وارد کنید!", "error_message_birthday": "لطفا تاریخ تولد را وارد کنید!", + "error_message_activity_type": "لطفا نوع فعالیت خود را وارد کنید!", + "error_message_navgan_plan_id": "لطفا عنوان پروژه خود را وارد کنید!", + "error_message_boss_first_name": "لطفا نام مدیر عامل را وارد کنید!", "error_message_navgan_id": "لطفا کد ناوگان را وارد کنید!", + "error_message_boss_last_name": "لطفا نام خانوادگی مدیر عامل را وارد کنید!", + "error_message_father_name": "لطفا نام پدر خود را وارد کنید!", + "error_message_first_name": "لطفا نام خود را وارد کنید!", "error_message_province_id": "لطفا استان را وارد کنید!", "error_message_city_id": "لطفا شهر خود را وارد کنید!", "error_message_name": "لطفا نام کامل مالک را وارد کنید!", + "error_message_register_number": "لطفا شماره ثبت شرکت خود را وارد کنید!", + "error_message_boss_father_name": "لطفا نام پدر مدیر عامل را وارد کنید!", + "error_message_postal_code": "لطفا کد پستی خود را وارد کنید!", "error_message_date_of_birth": "لطفا تاریخ تولد خود را وارد کنید!", + "error_message_company_date": "لطفا تاریخ ثبت شرکت را وارد کنید!", "error_message_navgan_type": "لطفا نوع ناوگان را وارد کنید!", "error_message_vehicle_type": "لطفا نوع وسیله را وارد کنید!", + "error_message_company_name": "لطفا نام شرکت خود را وارد کنید!", + "error_message_gender": "لطفا جنسیت خود را وارد کنید!", + "error_message_last_name": "لطفا نام خانوادگی خود را وارد کنید!", "error_message_fixed_number": "لطفا تلفن ثابت را وارد کنید!", "error_message_tel_number": "لطفا شماره ثابت (با پیش شماره استان) خود را وارد کنید!", "error_message_occupation_id": "لطفا کد شغل (با توجه به مستندات ارائه شده) را به درستی وارد کنید!", 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 90ff93e..7dc9265 100644 --- a/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx +++ b/src/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker.jsx @@ -78,11 +78,11 @@ const LegalPersonDatePicker = ({ formik, disabled }) => { { const t = useTranslations(); @@ -11,82 +13,101 @@ const RequestCard = ({item}) => { - - - {`${t("LoanFollowUp.loan_unique_code")}: ${item.id}`} + + + + {`${t("LoanFollowUp.loan_unique_code")}: ${item.id}`} + + + + {`${t("LoanFollowUp.loan_date")}: ${moment(item.created_at).locale("fa").format("HH:mm | YYYY/MM/DD")}`} - - - {`${t("LoanFollowUp.loan_date")}: ${moment(item.created_at).locale("fa").format("HH:mm | YYYY/MM/DD")}`} - - - {`${t("LoanFollowUp.loan_bank_branch")}: ${item.branch_info === null ? '-' : item.branch_info}`} - - - {`${t("LoanFollowUp.loan_status")}: `} - {item.loan_state} - {item.state_id >= 1 && item.state_id <= 6 && - } - {item.state_id === 8 && - } - {item.state_id === 7 && - } - - {item.state_id === 7 && ( - - {`${t("LoanFollowUp.loan_description")}: ${item.latestHistory.expert_description}`} + + {`${t("LoanFollowUp.loan_bank_branch")}: ${item.branch_info === null ? '-' : item.branch_info}`} - )} - {item.bank_status == 0 && ( - - {`${t("LoanFollowUp.loan_description")}: درخواست وام توسط بانک تایید نشد (نیاز به اصلاح اطلاعات) `} + + {`${t("LoanFollowUp.loan_status")}: `} + {item.state_id === 9 && + <> + {t("LoanFollowUp.loan_reserve")} + + + } + {item.state_id === 17 && + <> + {t("LoanFollowUp.loan_edit_info")} + + + } + {item.state_id === 7 && + <> + {t("LoanFollowUp.loan_cancel")} + + + } + {item.state_id !== 7 && item.state_id !== 17 && item.state_id !== 9 && + <> + {t("LoanFollowUp.loan_review")} + + + } - )} - {item.bank_state == 8 && ( - - {`${t("LoanFollowUp.loan_description")}: عدم تایید درخواست وام توسط بانک `} - - )} - {item.state_id === 8 && item.bank_status == 0 && ( - - )} + {item.state_id === 17 && ( + + {`${t("LoanFollowUp.loan_description")}: ${item.latestHistory.expert_description}`} + + )} + {item.state_id === 7 && ( + + {`${t("LoanFollowUp.loan_description")}: درخواست وام توسط بانک تایید نشد (نیاز به اصلاح اطلاعات) `} + + )} + + { + item.state_id === 17 ? ( + + ) : ( + + ) + } diff --git a/src/components/dashboard/navgan/followUp-loan/index.jsx b/src/components/dashboard/navgan/followUp-loan/index.jsx index aa031a6..7f68be2 100644 --- a/src/components/dashboard/navgan/followUp-loan/index.jsx +++ b/src/components/dashboard/navgan/followUp-loan/index.jsx @@ -1,8 +1,10 @@ -import { Grid } from "@mui/material"; +import {Grid} from "@mui/material"; import {useEffect, useState} from "react"; import {SHOW_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes"; import RequestCard from "@/components/dashboard/navgan/followUp-loan/RequestCard"; -import {FullPageLayout , useRequest} from "@witel/webapp-builder"; +import {FullPageLayout, LoadingHardPage, useRequest} from "@witel/webapp-builder"; +import sidebarMenu from "@/core/data/sidebarMenu"; +import BookmarkAddedIcon from "@mui/icons-material/BookmarkAdded"; const LoanFollowUpComponent = () => { const requestServer = useRequest(); @@ -12,8 +14,8 @@ const LoanFollowUpComponent = () => { setIsLoading(true) requestServer(SHOW_LOAN_REQUEST_NAVGAN, "get", { auth: true, - pending:false, - success:{notification:{show:false}} + pending: false, + success: {notification: {show: false}} }) .then(function ({data}) { const items = data.data; @@ -24,6 +26,7 @@ const LoanFollowUpComponent = () => { }) }, []); + return ( { rowSpacing={2} sx={{alignItems: "start", justifyContent: "center", padding: "24px"}} > - {requestsList.map((item) => ( - - ))} + } + > + + {requestsList.map((item) => ( + + ))} + + diff --git a/src/components/dashboard/navgan/show/form/UpdateForm.jsx b/src/components/dashboard/navgan/show/form/UpdateForm.jsx deleted file mode 100644 index 6c05779..0000000 --- a/src/components/dashboard/navgan/show/form/UpdateForm.jsx +++ /dev/null @@ -1,693 +0,0 @@ -import StyledForm from "@/core/components/StyledForm"; -import {Box, Button, Chip, Divider, Stack, TextField, ToggleButton, ToggleButtonGroup} from "@mui/material"; -import {Field, Formik} from "formik"; -import {useTranslations} from "next-intl"; -import * as Yup from "yup"; -import SelectBox from "@/core/components/SelectBox"; -import PlateNumber from "@/core/components/PlateNumber"; -import MuiDatePicker from "@/core/components/MuiDatePicker"; -import moment from "jalali-moment"; -import useProvince from "@/lib/app/hooks/useProvince"; -import useCities from "@/lib/app/hooks/useCities"; -import UseEducations from "@/lib/app/hooks/useEducations"; -import useOccupations from "@/lib/app/hooks/useOccupations"; -import {UPDATE_LOAN} from "@/core/data/apiRoutes"; -import {useRequest} from "@witel/webapp-builder"; -import {useRouter} from "next/router"; -import {useEffect} from "react"; -import EditIcon from '@mui/icons-material/Edit'; - -const UpdateForm = ({LoanDetails, LoanId}) => { - const t = useTranslations(); - const provinceStates = useProvince(); - const router = useRouter() - const citiesStates = useCities(); - const educationStates = UseEducations(); - const occupationStates = useOccupations(); - const requestServer = useRequest(); - - let _shenase_meli = LoanDetails.is_legal_person === 1 ? { - shenase_meli: LoanDetails.shenase_meli - } : {} - - // initial values - const initialValues = { - is_legal_person: LoanDetails.is_legal_person, - national_serial_number_or_tracking_code: LoanDetails.national_serial_number ? "serial_number" : "tracking_code", - national_id: LoanDetails.national_id, - postal_code: LoanDetails.postal_code, - address: LoanDetails.address, - birthday: moment(LoanDetails.birthday), - navgan_id: LoanDetails.navgan_id, - province_id: LoanDetails.province_id, - city_id: LoanDetails.city_id, - name: LoanDetails.name, - navgan_type: LoanDetails.navgan_type, - vehicle_type: LoanDetails.vehicle_type, - telephone_number: LoanDetails.telephone_number, - plate_part1: LoanDetails.plate_number.split("-")[0], - plate_part2: LoanDetails.plate_number.split("-")[1], - plate_part3: LoanDetails.plate_number.split("-")[2], - plate_part4: LoanDetails.plate_number.split("-")[3], - education_id: LoanDetails.education_id, - occupation_id: LoanDetails.occupation_id, ..._shenase_meli, - national_serial_number: LoanDetails.national_serial_number ?? "", - national_tracking_code: LoanDetails.national_tracking_code ?? "" - }; - // end initial values - - useEffect(() => { - citiesStates.setProvinceID(LoanDetails.province_id) - }, [LoanDetails.province_id]); - - // validation - const validationSchema = Yup.object().shape({ - postal_code: Yup.mixed() - .test("max", `${t("ShowLoan.postal_code_max")}`, (value) => value.toString().length === 10) - .required(t("ShowLoan.error_message_postal_code")), - address: Yup.string().required(t("ShowLoan.error_message_address")), - province_id: Yup.string().required(t("ShowLoan.error_message_province_id")), - city_id: Yup.string().required(t("ShowLoan.error_message_city_id")), - telephone_number: Yup.mixed() - .test("max", `${t("ShowLoan.tel_number_max")}`, (value) => { - const stringValue = String(value); - return stringValue.length === 11 - }) - .required(t("ShowLoan.error_message_tel_number")), - occupation_id: Yup.string().required(t("ShowLoan.error_message_occupation_id")), - education_id: Yup.string().required(t("ShowLoan.error_message_education_id")), - birthday: Yup.string().required(t("ShowLoan.error_message_date_of_birth")), - national_id: Yup.mixed().when('is_legal_person', ([is_legal_person], schema) => { - return is_legal_person === 1 ? schema - .test("is-number", `${t("ShowLoan.national_code_number")}`, (value) => !isNaN(value)) - .test("positive", `${t("ShowLoan.national_code_positive")}`, (value) => value >= 0) - .test("max", `${t("ShowLoan.national_code_max")}`, (value) => value && value.toString().length === 10) - .required(t("ShowLoan.error_message_national_id")) : schema; - }), - shenase_meli: Yup.mixed().when('is_legal_person', ([is_legal_person], schema) => { - return is_legal_person === 1 ? schema - .test("is-number", `${t("ShowLoan.national_number_number")}`, (value) => !isNaN(value)) - .test("positive", `${t("ShowLoan.national_number_positive")}`, (value) => value >= 0) - .test("max", `${t("ShowLoan.national_number_max")}`, (value) => value && value.toString().length === 11) - .required(t("ShowLoan.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 === 'serial_number' ? schema.required(t("ShowLoan.error_message_shenasname_serial")) : schema - }), - national_tracking_code: Yup.string().when('national_serial_number_or_tracking_code', ([national_serial_number_or_tracking_code], schema) => { - return national_serial_number_or_tracking_code === 'tracking_code' ? schema.required(t("ShowLoan.error_message_tracking_code")) : schema - }) - }); - // end validation - - // submit - const handleSubmit = async (values, props) => { - props.setSubmitting(true) - const formData = new FormData(); - if (values.national_serial_number_or_tracking_code === "serial_number") { - formData.append("national_serial_number", values.national_serial_number) - } else { - formData.append("national_tracking_code", values.national_tracking_code); - } - if (values.is_legal_person === 1) { - formData.append("national_id", values.national_id); - } - formData.append("birthday", values.birthday.locale('en').format("YYYY-MM-DD")); - formData.append("postal_code", values.postal_code); - formData.append("province_id", LoanDetails.province_id); - formData.append("city_id", LoanDetails.city_id); - formData.append("telephone_number", values.telephone_number); - formData.append("education_id", values.education_id); - formData.append("occupation_id", values.occupation_id); - formData.append("address", values.address); - - await requestServer(UPDATE_LOAN + LoanId, "post", { - auth: true, notification: true, data: formData - }).then(() => { - router.push("/dashboard/navgan/followUp-loan"); - }).catch(() => { - }).finally(() => { - props.setSubmitting(false); - }) - - }; - // end submit - - return (<> - - - - - - - {(props) => ( - - - - - - - - - - {initialValues.is_legal_person === 1 && ( - - )} - - - - - - - { - props.setFieldValue('navgan_type', event.target.value) - }} - setFieldTouched={props.setFieldTouched} - error={props.touched.navgan_type && Boolean(props.errors.navgan_type)} - helperText={props.touched.navgan_type && props.errors.navgan_type} - onBlur={props.handleBlur("navgan_type")} - /> - - - - - - - - props.setFieldValue('vehicle_type', event.target.value)} - error={props.touched.vehicle_type && Boolean(props.errors.vehicle_type)} - helperText={props.touched.vehicle_type && props.errors.vehicle_type} - onBlur={props.handleBlur("vehicle_type")} - /> - - - - - { - if (value === null) return - props.handleChange({ - target: { - name: "national_serial_number_or_tracking_code", value: value, - }, - }) - value === "serial_number" ? props.setFieldValue("national_tracking_code", props.initialValues.national_tracking_code, false) : props.setFieldValue("national_serial_number", props.initialValues.national_serial_number, false) - }} - > - - {t("ShowLoan.text_field_shenasname_serial")} - - - {t("ShowLoan.text_field_national_trackin_code")} - - - - - {props.values.national_serial_number_or_tracking_code === "serial_number" ? () : ()} - - - - - - - - { - const inputValue = event.target.value; - if (isNaN(Number(inputValue))) { - return; - } - props.handleChange({ - target: { - name: "postal_code", value: inputValue, - }, - }); - }} - error={!!(props.touched.postal_code && props.errors.postal_code)} - fullWidth - helperText={props.touched.postal_code ? props.errors.postal_code : null} - /> - - - {provinceStates.provinceList.length !== 0 ? { - props.setFieldValue('province_id', event.target.value); - citiesStates.setProvinceID(event.target.value) - props.setFieldTouched("city_id", false, false); - props.setFieldValue("city_id", "") - }} - setFieldTouched={props.setFieldTouched} - error={props.touched.province_id && Boolean(props.errors.province_id)} - helperText={props.touched.province_id && props.errors.province_id} - onBlur={props.handleBlur("province_id")} - /> : } - - - - {citiesStates.cityList.length !== 0 ? props.setFieldValue('city_id', event.target.value)} - setFieldTouched={props.setFieldTouched} - error={props.touched.city_id && Boolean(props.errors.city_id)} - helperText={props.touched.city_id && props.errors.city_id} - onBlur={props.handleBlur("city_id")} - /> : } - - - - - { - const inputValue = event.target.value; - if (isNaN(Number(inputValue))) { - return; - } - props.handleChange({ - target: { - name: "telephone_number", value: inputValue, - }, - }); - }} - label={t("ShowLoan.text_field_tel_number")} - placeholder={t("ShowLoan.text_field_enter_your_tel_number")} - fullWidth - onBlur={props.handleBlur("telephone_number")} - error={props.touched.telephone_number && Boolean(props.errors.telephone_number)} - helperText={props.touched.telephone_number && props.errors.telephone_number} - /> - - - {educationStates.educationsList.length !== 0 ? { - props.setFieldValue('education_id', event.target.value) - }} - setFieldTouched={props.setFieldTouched} - error={props.touched.education_id && Boolean(props.errors.education_id)} - helperText={props.touched.education_id && props.errors.education_id} - onBlur={props.handleBlur("education_id")} - /> : } - - - {occupationStates.occupationsList.length !== 0 ? { - props.setFieldValue('occupation_id', event.target.value) - }} - setFieldTouched={props.setFieldTouched} - error={props.touched.occupation_id && Boolean(props.errors.occupation_id)} - helperText={props.touched.occupation_id && props.errors.occupation_id} - onBlur={props.handleBlur("occupation_id")} - /> : } - - - - - - - - - - - - )} - - ); -}; - -export default UpdateForm; diff --git a/src/components/dashboard/navgan/show/form/UpdateFormLegal.jsx b/src/components/dashboard/navgan/show/form/UpdateFormLegal.jsx new file mode 100644 index 0000000..a3181b7 --- /dev/null +++ b/src/components/dashboard/navgan/show/form/UpdateFormLegal.jsx @@ -0,0 +1,729 @@ +import {Box, Button, Chip, Divider, Grid, Stack, TextField, ToggleButton, ToggleButtonGroup} from "@mui/material"; +import {useFormik} from "formik"; +import {useTranslations} from "next-intl"; +import * as Yup from "yup"; +import SelectBox from "@/core/components/SelectBox"; +import PlateNumber from "@/core/components/PlateNumber"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; +import moment from "jalali-moment"; +import useProvince from "@/lib/app/hooks/useProvince"; +import useCities from "@/lib/app/hooks/useCities"; +import UseEducations from "@/lib/app/hooks/useEducations"; +import useOccupations from "@/lib/app/hooks/useOccupations"; +import {UPDATE_LOAN} from "@/core/data/apiRoutes"; +import {useRequest} from "@witel/webapp-builder"; +import {useRouter} from "next/router"; +import {useEffect} from "react"; +import EditIcon from '@mui/icons-material/Edit'; +import * as React from "react"; +import useProjectTitle from "@/lib/app/hooks/useProjectTitle"; +import LegalPersonDatePicker from "@/components/dashboard/navgan/add-request-loan/forms/LegalPersonDatePicker"; +import useActivityType from "@/lib/app/hooks/useActivityType"; +const UpdateFormLegal = ({LoanDetails, LoanId}) => { + const t = useTranslations(); + const provinceStates = useProvince(); + const router = useRouter() + const citiesStates = useCities(); + const {projectTitle, isLoadingProjectTitle, errorProjectTitle} = useProjectTitle(); + const {activityType, isLoadingActivityType, errorActivityType} = useActivityType(); + const educationStates = UseEducations(); + const occupationStates = useOccupations(); + const requestServer = useRequest(); + + const initialValues = { + is_legal_person: 1, + national_serial_number_or_tracking_code: LoanDetails.national_serial_number ? "serial_number" : "tracking_code", + national_id: LoanDetails.national_id, + activity_type: LoanDetails.activity_type_id, + navgan_plan_id: LoanDetails.navgan_plan_id, + postal_code: LoanDetails.postal_code, + address: LoanDetails.address, + company_name: LoanDetails.company_name, + register_number: LoanDetails.register_number, + company_date: LoanDetails.company_register_date, + birthday: moment(LoanDetails.birthday), + navgan_id: LoanDetails.navgan_id, + province_id: LoanDetails.province_id, + city_id: LoanDetails.city_id, + boss_first_name: LoanDetails.first_name, + boss_last_name: LoanDetails.last_name, + boss_father_name: LoanDetails.father_name, + gender: LoanDetails.gender, + navgan_type: LoanDetails.navgan_type, + vehicle_type: LoanDetails.vehicle_type, + telephone_number: LoanDetails.telephone_number, + plate_part1: LoanDetails.plate_number.split("-")[0], + plate_part2: LoanDetails.plate_number.split("-")[1], + plate_part3: LoanDetails.plate_number.split("-")[2], + plate_part4: LoanDetails.plate_number.split("-")[3], + education_id: LoanDetails.education_id, + occupation_id: LoanDetails.occupation_id, + shenase_meli: LoanDetails.shenase_meli, + national_serial_number: LoanDetails.national_serial_number ?? "", + national_tracking_code: LoanDetails.national_tracking_code ?? "" + }; + + useEffect(() => { + citiesStates.setProvinceID(LoanDetails.province_id) + }, [LoanDetails.province_id]); + + const validationSchema = Yup.object().shape({ + postal_code: Yup.mixed() + .test("max", `${t("ShowLoan.postal_code_max")}`, (value) => value.toString().length === 10) + .required(t("ShowLoan.error_message_postal_code")), + address: Yup.string().required(t("ShowLoan.error_message_address")), + province_id: Yup.string().required(t("ShowLoan.error_message_province_id")), + activity_type: Yup.string().required(t("ShowLoan.error_message_activity_type")), + navgan_plan_id: Yup.string().required(t("ShowLoan.error_message_navgan_plan_id")), + city_id: Yup.string().required(t("ShowLoan.error_message_city_id")), + telephone_number: Yup.mixed() + .test("max", `${t("ShowLoan.tel_number_max")}`, (value) => { + const stringValue = String(value); + return stringValue.length === 11 + }) + .required(t("ShowLoan.error_message_tel_number")), + occupation_id: Yup.string().required(t("ShowLoan.error_message_occupation_id")), + company_date: Yup.string().required(t("ShowLoan.error_message_company_date")), + company_name: Yup.string().required(t("ShowLoan.error_message_company_name")), + register_number: Yup.string().required(t("ShowLoan.error_message_register_number")), + boss_first_name: Yup.string().required(t("ShowLoan.error_message_boss_first_name")), + boss_last_name: Yup.string().required(t("ShowLoan.error_message_boss_last_name")), + gender: Yup.string().required(t("ShowLoan.error_message_gender")), + boss_father_name: Yup.string().required(t("ShowLoan.error_message_boss_father_name")), + education_id: Yup.string().required(t("ShowLoan.error_message_education_id")), + birthday: Yup.string().required(t("ShowLoan.error_message_date_of_birth")), + national_id: Yup.mixed().when('is_legal_person', ([is_legal_person], schema) => { + return is_legal_person === 1 ? schema + .test("is-number", `${t("ShowLoan.national_code_number")}`, (value) => !isNaN(value)) + .test("positive", `${t("ShowLoan.national_code_positive")}`, (value) => value >= 0) + .test("max", `${t("ShowLoan.national_code_max")}`, (value) => value && value.toString().length === 10) + .required(t("ShowLoan.error_message_national_id")) : schema; + }), + shenase_meli: Yup.mixed().when('is_legal_person', ([is_legal_person], schema) => { + return is_legal_person === 1 ? schema + .test("is-number", `${t("ShowLoan.national_number_number")}`, (value) => !isNaN(value)) + .test("positive", `${t("ShowLoan.national_number_positive")}`, (value) => value >= 0) + .test("max", `${t("ShowLoan.national_number_max")}`, (value) => value && value.toString().length === 11) + .required(t("ShowLoan.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 === 'serial_number' ? schema.required(t("ShowLoan.error_message_shenasname_serial")) : schema + }), + national_tracking_code: Yup.string().when('national_serial_number_or_tracking_code', ([national_serial_number_or_tracking_code], schema) => { + return national_serial_number_or_tracking_code === 'tracking_code' ? schema.required(t("ShowLoan.error_message_tracking_code")) : schema + }) + }); + + const handleSubmit = async (values) => { + formik.setSubmitting(true) + const formData = new FormData(); + if (values.national_serial_number_or_tracking_code === "serial_number") { + formData.append("national_serial_number", values.national_serial_number) + } else { + formData.append("national_tracking_code", values.national_tracking_code); + } + formData.append("national_id", values.national_id); + formData.append("birthday", values.birthday.locale('en').format("YYYY-MM-DD")); + formData.append("postal_code", values.postal_code); + formData.append("navgan_plan_id", values.navgan_plan_id); + formData.append("activity_type", values.activity_type); + formData.append("boss_first_name", values.boss_first_name); + formData.append("boss_last_name", values.boss_last_name); + formData.append("boss_father_name", values.boss_father_name); + formData.append("gender", values.gender); + formData.append("province_id", LoanDetails.province_id); + formData.append("city_id", LoanDetails.city_id); + formData.append("telephone_number", values.telephone_number); + formData.append("education_id", values.education_id); + formData.append("occupation_id", values.occupation_id); + formData.append("address", values.address); + + await requestServer(UPDATE_LOAN + LoanId, "post", { + auth: true, notification: true, data: formData + }).then(() => { + router.push("/dashboard/navgan/followUp-loan"); + }).catch(() => { + }).finally(() => { + props.setSubmitting(false); + }) + + }; + + const formik = useFormik({ + initialValues, + validationSchema, + onSubmit: handleSubmit, + }); + console.log(formik.values.activity_type) + return (<> + + + + + + + + + + + + { + formik.setFieldValue("activity_type", event.target.value); + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.activity_type && Boolean(formik.errors.activity_type)} + helperText={formik.touched.activity_type && formik.errors.activity_type} + onBlur={formik.handleBlur("activity_type")} + /> + + + + + + + + + + + + + + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "register_number", + value: inputValue, + }, + }); + }} + label={t("ShowLoan.text_field_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 + /> + + + + + + + + + + + + + + + + + + {initialValues.is_legal_person === 1 && ( + + + + )} + + + + + + + { + formik.setFieldValue('navgan_type', event.target.value) + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.navgan_type && Boolean(formik.errors.navgan_type)} + helperText={formik.touched.navgan_type && formik.errors.navgan_type} + onBlur={formik.handleBlur("navgan_type")} + /> + + + + + + + + formik.setFieldValue('vehicle_type', event.target.value)} + error={formik.touched.vehicle_type && Boolean(formik.errors.vehicle_type)} + helperText={formik.touched.vehicle_type && formik.errors.vehicle_type} + onBlur={formik.handleBlur("vehicle_type")} + /> + + + + + { + if (value === null) return + formik.handleChange({ + target: { + name: "national_serial_number_or_tracking_code", value: value, + }, + }) + value === "serial_number" ? formik.setFieldValue("national_tracking_code", formik.initialValues.national_tracking_code, false) : formik.setFieldValue("national_serial_number", formik.initialValues.national_serial_number, false) + }} + > + + {t("ShowLoan.text_field_shenasname_serial")} + + + {t("ShowLoan.text_field_national_trackin_code")} + + + + + {formik.values.national_serial_number_or_tracking_code === "serial_number" ? () : ()} + + + + + + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "postal_code", value: inputValue, + }, + }); + }} + error={!!(formik.touched.postal_code && formik.errors.postal_code)} + fullWidth + helperText={formik.touched.postal_code ? formik.errors.postal_code : null} + /> + + + { + formik.setFieldValue('province_id', event.target.value); + citiesStates.setProvinceID(event.target.value) + formik.setFieldTouched("city_id", false, false); + formik.setFieldValue("city_id", "") + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.province_id && Boolean(formik.errors.province_id)} + helperText={formik.touched.province_id && formik.errors.province_id} + onBlur={formik.handleBlur("province_id")} + /> + + + formik.setFieldValue('city_id', event.target.value)} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.city_id && Boolean(formik.errors.city_id)} + helperText={formik.touched.city_id && formik.errors.city_id} + onBlur={formik.handleBlur("city_id")} + /> + + + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "telephone_number", value: inputValue, + }, + }); + }} + label={t("ShowLoan.text_field_tel_number")} + placeholder={t("ShowLoan.text_field_enter_your_tel_number")} + fullWidth + onBlur={formik.handleBlur("telephone_number")} + error={formik.touched.telephone_number && Boolean(formik.errors.telephone_number)} + helperText={formik.touched.telephone_number && formik.errors.telephone_number} + /> + + + { + formik.setFieldValue('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")} + /> + + + + + + + + {LoanDetails.state_id === 17 && ( + + + + )} + + ); +}; +export default UpdateFormLegal; \ No newline at end of file diff --git a/src/components/dashboard/navgan/show/form/UpdateFormReal.jsx b/src/components/dashboard/navgan/show/form/UpdateFormReal.jsx new file mode 100644 index 0000000..50b0f96 --- /dev/null +++ b/src/components/dashboard/navgan/show/form/UpdateFormReal.jsx @@ -0,0 +1,655 @@ +import {Box, Button, Chip, Divider, Grid, Stack, TextField, ToggleButton, ToggleButtonGroup} from "@mui/material"; +import {useFormik} from "formik"; +import {useTranslations} from "next-intl"; +import * as Yup from "yup"; +import SelectBox from "@/core/components/SelectBox"; +import PlateNumber from "@/core/components/PlateNumber"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; +import moment from "jalali-moment"; +import useProvince from "@/lib/app/hooks/useProvince"; +import useCities from "@/lib/app/hooks/useCities"; +import UseEducations from "@/lib/app/hooks/useEducations"; +import useOccupations from "@/lib/app/hooks/useOccupations"; +import {UPDATE_LOAN} from "@/core/data/apiRoutes"; +import {useRequest} from "@witel/webapp-builder"; +import {useRouter} from "next/router"; +import {useEffect} from "react"; +import EditIcon from '@mui/icons-material/Edit'; +import * as React from "react"; +import useProjectTitle from "@/lib/app/hooks/useProjectTitle"; +import useActivityType from "@/lib/app/hooks/useActivityType"; +const UpdateFormReal = ({LoanDetails, LoanId}) => { + const t = useTranslations(); + const provinceStates = useProvince(); + const router = useRouter() + const citiesStates = useCities(); + const {projectTitle, isLoadingProjectTitle, errorProjectTitle} = useProjectTitle(); + const {activityType, isLoadingActivityType, errorActivityType} = useActivityType(); + const educationStates = UseEducations(); + const occupationStates = useOccupations(); + const requestServer = useRequest(); + + const initialValues = { + national_serial_number_or_tracking_code: LoanDetails.national_serial_number ? "serial_number" : "tracking_code", + national_id: LoanDetails.national_id, + activity_type: LoanDetails.activity_type_id, + navgan_plan_id: LoanDetails.navgan_plan_id, + postal_code: LoanDetails.postal_code, + address: LoanDetails.address, + birthday: moment(LoanDetails.birthday), + navgan_id: LoanDetails.navgan_id, + province_id: LoanDetails.province_id, + city_id: LoanDetails.city_id, + first_name: LoanDetails.first_name, + last_name: LoanDetails.last_name, + father_name: LoanDetails.father_name, + gender: LoanDetails.gender, + occupation_id : LoanDetails.occupation_id, + navgan_type: LoanDetails.navgan_type, + vehicle_type: LoanDetails.vehicle_type, + telephone_number: LoanDetails.telephone_number, + plate_part1: LoanDetails.plate_number.split("-")[0], + plate_part2: LoanDetails.plate_number.split("-")[1], + plate_part3: LoanDetails.plate_number.split("-")[2], + plate_part4: LoanDetails.plate_number.split("-")[3], + education_id: LoanDetails.education_id, + national_serial_number: LoanDetails.national_serial_number ?? "", + national_tracking_code: LoanDetails.national_tracking_code ?? "" + }; + useEffect(() => { + citiesStates.setProvinceID(LoanDetails.province_id) + }, [LoanDetails.province_id]); + + const validationSchema = Yup.object().shape({ + postal_code: Yup.mixed() + .test("max", `${t("ShowLoan.postal_code_max")}`, (value) => value.toString().length === 10) + .required(t("ShowLoan.error_message_postal_code")), + address: Yup.string().required(t("ShowLoan.error_message_address")), + province_id: Yup.string().required(t("ShowLoan.error_message_province_id")), + activity_type: Yup.string().required(t("ShowLoan.error_message_activity_type")), + navgan_plan_id: Yup.string().required(t("ShowLoan.error_message_navgan_plan_id")), + city_id: Yup.string().required(t("ShowLoan.error_message_city_id")), + telephone_number: Yup.mixed() + .test("max", `${t("ShowLoan.tel_number_max")}`, (value) => { + const stringValue = String(value); + return stringValue.length === 11 + }) + .required(t("ShowLoan.error_message_tel_number")), + occupation_id: Yup.string().required(t("ShowLoan.error_message_occupation_id")), + first_name: Yup.string().required(t("ShowLoan.error_message_first_name")), + last_name: Yup.string().required(t("ShowLoan.error_message_last_name")), + gender: Yup.string().required(t("ShowLoan.error_message_gender")), + father_name: Yup.string().required(t("ShowLoan.error_message_father_name")), + education_id: Yup.string().required(t("ShowLoan.error_message_education_id")), + birthday: Yup.string().required(t("ShowLoan.error_message_date_of_birth")), + national_serial_number: Yup.string().when('national_serial_number_or_tracking_code', ([national_serial_number_or_tracking_code], schema) => { + return national_serial_number_or_tracking_code === 'serial_number' ? schema.required(t("ShowLoan.error_message_shenasname_serial")) : schema + }), + national_tracking_code: Yup.string().when('national_serial_number_or_tracking_code', ([national_serial_number_or_tracking_code], schema) => { + return national_serial_number_or_tracking_code === 'tracking_code' ? schema.required(t("ShowLoan.error_message_tracking_code")) : schema + }) + }); + + const handleSubmit = async (values, props) => { + props.setSubmitting(true) + const formData = new FormData(); + if (values.national_serial_number_or_tracking_code === "serial_number") { + formData.append("national_serial_number", values.national_serial_number) + } else { + formData.append("national_tracking_code", values.national_tracking_code); + } + formData.append("birthday", values.birthday.locale('en').format("YYYY-MM-DD")); + formData.append("postal_code", values.postal_code); + formData.append("navgan_plan_id", values.navgan_plan_id); + formData.append("activity_type", values.activity_type); + formData.append("first_name", values.first_name); + formData.append("last_name", values.last_name); + formData.append("father_name", values.father_name); + formData.append("gender", values.gender); + formData.append("province_id", LoanDetails.province_id); + formData.append("city_id", LoanDetails.city_id); + formData.append("telephone_number", values.telephone_number); + formData.append("education_id", values.education_id); + formData.append("occupation_id", values.occupation_id); + formData.append("address", values.address); + + await requestServer(UPDATE_LOAN + LoanId, "post", { + auth: true, notification: true, data: formData + }).then(() => { + router.push("/dashboard/navgan/followUp-loan"); + }).catch(() => { + }).finally(() => { + props.setSubmitting(false); + }) + + }; + + const formik = useFormik({ + initialValues, + validationSchema, + onSubmit: handleSubmit, + }); + + return (<> + + + + + + + + + { + formik.setFieldValue("activity_type", event.target.value); + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.activity_type && Boolean(formik.errors.activity_type)} + helperText={formik.touched.activity_type && formik.errors.activity_type} + onBlur={formik.handleBlur("activity_type")} + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "postal_code", value: inputValue, + }, + }); + }} + error={!!(formik.touched.postal_code && formik.errors.postal_code)} + fullWidth + helperText={formik.touched.postal_code ? formik.errors.postal_code : null} + /> + + + + + + + + { + formik.setFieldValue('navgan_type', event.target.value) + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.navgan_type && Boolean(formik.errors.navgan_type)} + helperText={formik.touched.navgan_type && formik.errors.navgan_type} + onBlur={formik.handleBlur("navgan_type")} + /> + + + + + + + + formik.setFieldValue('vehicle_type', event.target.value)} + error={formik.touched.vehicle_type && Boolean(formik.errors.vehicle_type)} + helperText={formik.touched.vehicle_type && formik.errors.vehicle_type} + onBlur={formik.handleBlur("vehicle_type")} + /> + + + + + { + if (value === null) return + formik.handleChange({ + target: { + name: "national_serial_number_or_tracking_code", value: value, + }, + }) + value === "serial_number" ? formik.setFieldValue("national_tracking_code", formik.initialValues.national_tracking_code, false) : formik.setFieldValue("national_serial_number", formik.initialValues.national_serial_number, false) + }} + > + + {t("ShowLoan.text_field_shenasname_serial")} + + + {t("ShowLoan.text_field_national_trackin_code")} + + + + + {formik.values.national_serial_number_or_tracking_code === "serial_number" ? () : ()} + + + + + + + + {provinceStates.provinceList.length !== 0 ? { + formik.setFieldValue('province_id', event.target.value); + citiesStates.setProvinceID(event.target.value) + formik.setFieldTouched("city_id", false, false); + formik.setFieldValue("city_id", "") + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.province_id && Boolean(formik.errors.province_id)} + helperText={formik.touched.province_id && formik.errors.province_id} + onBlur={formik.handleBlur("province_id")} + /> : } + + + + {citiesStates.cityList.length !== 0 ? formik.setFieldValue('city_id', event.target.value)} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.city_id && Boolean(formik.errors.city_id)} + helperText={formik.touched.city_id && formik.errors.city_id} + onBlur={formik.handleBlur("city_id")} + /> : } + + + + + { + const inputValue = event.target.value; + if (isNaN(Number(inputValue))) { + return; + } + formik.handleChange({ + target: { + name: "telephone_number", value: inputValue, + }, + }); + }} + label={t("ShowLoan.text_field_tel_number")} + placeholder={t("ShowLoan.text_field_enter_your_tel_number")} + fullWidth + onBlur={formik.handleBlur("telephone_number")} + error={formik.touched.telephone_number && Boolean(formik.errors.telephone_number)} + helperText={formik.touched.telephone_number && formik.errors.telephone_number} + /> + + + {educationStates.educationsList.length !== 0 ? { + formik.setFieldValue('education_id', event.target.value) + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.education_id && Boolean(formik.errors.education_id)} + helperText={formik.touched.education_id && formik.errors.education_id} + onBlur={formik.handleBlur("education_id")} + /> : } + + + {occupationStates.occupationsList.length !== 0 ? { + formik.setFieldValue('occupation_id', event.target.value) + }} + setFieldTouched={formik.setFieldTouched} + error={formik.touched.occupation_id && Boolean(formik.errors.occupation_id)} + helperText={formik.touched.occupation_id && formik.errors.occupation_id} + onBlur={formik.handleBlur("occupation_id")} + /> : } + + + + + + + + {LoanDetails.state_id === 17 && ( + + + + )} + + ); +}; + +export default UpdateFormReal; diff --git a/src/components/dashboard/navgan/show/form/index.jsx b/src/components/dashboard/navgan/show/form/index.jsx index 0e1b767..84d5b99 100644 --- a/src/components/dashboard/navgan/show/form/index.jsx +++ b/src/components/dashboard/navgan/show/form/index.jsx @@ -1,10 +1,11 @@ -import UpdateForm from "@/components/dashboard/navgan/show/form/UpdateForm"; import {useEffect, useState} from "react"; import {GET_LOAN_DETAILS} from "@/core/data/apiRoutes"; import {useRouter} from "next/router"; import {SvgLoading, useRequest} from "@witel/webapp-builder"; import {Stack, Typography} from "@mui/material"; import {useTranslations} from "next-intl"; +import UpdateFormReal from "@/components/dashboard/navgan/show/form/UpdateFormReal"; +import UpdateFormLegal from "@/components/dashboard/navgan/show/form/UpdateFormLegal"; const ShowLoanForm = () => { const t = useTranslations(); @@ -26,16 +27,11 @@ const ShowLoanForm = () => { {t("ShowLoan.loading_show_component")} ); - } else if (!(LoanDetails.state_id === 8 && LoanDetails.bank_status == 0)) { - return ( - - {t("ShowLoan.error_message_not_show_state")} - - ); } - return ( - - ); + return LoanDetails.is_legal_person === 1 ? ( + + ) : ( + + ) }; - -export default ShowLoanForm; +export default ShowLoanForm; \ No newline at end of file diff --git a/src/lib/app/hooks/useCities.jsx b/src/lib/app/hooks/useCities.jsx index bc01e0f..71d015b 100644 --- a/src/lib/app/hooks/useCities.jsx +++ b/src/lib/app/hooks/useCities.jsx @@ -31,8 +31,6 @@ const useCities = () => { setCityTextField(t("text_field_error_fetching_cities")) }); }, [provinceID]) - - return {cityTextField, cityList, setProvinceID, isLoadingCityList} } export default useCities \ No newline at end of file