TF-103 Merge branch 'bugfix/TF-103_add_and_edit' into 'develop'

This commit is contained in:
AmirHossein Mahmoodi
2023-09-30 08:22:29 +00:00
6 changed files with 149 additions and 99 deletions

View File

@@ -125,8 +125,8 @@
"error_message_vehicle_type": "لطفا نوع وسیله نقلیه خود را وارد کنید!",
"error_message_plate_number": "لطفا شماره پلاک خود را وارد کنید!",
"error_message_navgan_id": "لطفا کد ناوگان خود را وارد کنید!",
"error_message_province": "لطفا استان خود را وارد کنید!",
"error_message_national_code": "لطفا کد ملی خود را وارد کنید!",
"error_message_province_id": "لطفا استان خود را وارد کنید!",
"error_message_national_id": "لطفا کد ملی خود را وارد کنید!",
"error_message_shenasname_id": "لطفا شماره شناسنامه خود را وارد کنید!",
"text_field_phone_number": "شماره تلفن",
"text_field_enter_your_phone_number": "شماره تلفن خود را وارد کنید",
@@ -134,14 +134,14 @@
"text_field_enter_your_name": "نام خود را وارد کنید",
"text_field_vehicle_type": "نام وسیله نقلیه",
"text_field_enter_your_vehicle_type": "نام وسیله نقلیه خود را وارد کنید",
"text_field_province": "استان",
"text_field_province_id": "استان",
"text_field_loading_provinces_list": "درحال دریافت استان ها",
"text_field_error_fetching_provinces": "خطا در دریافت استان ها",
"text_field_enter_your_province": "استان خود را وارد کنید",
"text_field_enter_your_province_id": "استان خود را وارد کنید",
"text_field_navgan_id": "شماره ناوگان",
"text_field_enter_your_navgan_id": "شماره ناوگان خود را وارد کنید",
"text_field_national_code": "کد ملی",
"text_field_enter_your_national_code": "کد ملی خود را وارد کنید",
"text_field_national_id": "کد ملی",
"text_field_enter_your_national_id": "کد ملی خود را وارد کنید",
"text_field_shenasname_id": "شماره شناسنامه",
"text_field_enter_your_shenasname_id": "شماره شناسنامه خود را وارد کنید",
"text_field_plate_number": "شماره پلاک",
@@ -158,7 +158,8 @@
"file_field_payan_khedmat_image": "تصویر کارت پایان خدمت",
"error_message_national_card_image": "تصویر کارت ملی خود را وارد کنید",
"error_message_shenasname_image": "تصویر شناسنامه خود را وارد کنید",
"error_message_payan_khedmat_image": "تصویر کارت پایان خدمت خود را وارد کنید"
"error_message_payan_khedmat_image": "تصویر کارت پایان خدمت خود را وارد کنید",
"add_loan_request_permission": "اکنون امکان ثبت درخواست جدید برای شما مقدور نیست"
},
"EditLoanRequest": {
"edit_loan_request_page": "ویرایش درخواست وام"

View File

@@ -0,0 +1,32 @@
import {Button, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
import CenterLayout from "@/layouts/CenterLayout";
import {useRouter} from "next/router";
import {NextLinkComposed} from "@/core/components/LinkRouting";
const AccessibilityComponent = () => {
const t = useTranslations();
const router = useRouter();
return (
<CenterLayout>
<Typography
sx={{
fontSize: "16px",
fontWeight: 600,
my: 2
}}>
{t("LoanRequest.add_loan_request_permission")}
</Typography>
<Button color="primary" variant="contained"
component={NextLinkComposed}
to={{
pathname: "/dashboard/refahi/followUp-loan",
}}>
{t("LoanFollowUp.loan_follow_up_page")}
</Button>
</CenterLayout>
);
};
export default AccessibilityComponent;

View File

@@ -20,18 +20,20 @@ import {useTranslations} from "next-intl";
import * as Yup from "yup";
import useRequest from "@/lib/app/hooks/useRequest";
import useProvince from "@/lib/app/hooks/useProvince";
import {useRouter} from "next/router";
const AddFormComponent = () => {
const t = useTranslations();
const requestServer = useRequest()
const {provinceList, isLoadingProvinceList, errorProvinceList} = useProvince()
const {provinceList, isLoadingProvinceList, errorProvinceList} = useProvince();
const router = useRouter();
// initial values, validation and request action of form
const initialValues = {
name: "",
phone_number: "",
province: "",
national_code: "",
province_id: "",
national_id: "",
shenasname_id: "",
sherkat_naft_doc: null,
estate_doc: null,
@@ -46,9 +48,9 @@ const AddFormComponent = () => {
phone_number: Yup.string().required(
t("LoanRequest.error_message_phone_number")
),
province: Yup.string().required(t("LoanRequest.error_message_province")),
national_code: Yup.string().required(
t("LoanRequest.error_message_national_code")
province_id: Yup.string().required(t("LoanRequest.error_message_province_id")),
national_id: Yup.string().required(
t("LoanRequest.error_message_national_id")
),
shenasname_id: Yup.string().required(
t("LoanRequest.error_message_shenasname_id")
@@ -64,8 +66,8 @@ const AddFormComponent = () => {
const formData = new FormData();
formData.append("name", values.name);
formData.append("phone_number", values.phone_number);
formData.append("province_id", values.province);
formData.append("national_id", values.national_code);
formData.append("province_id", values.province_id);
formData.append("national_id", values.national_id);
formData.append("shenasname_id", values.shenasname_id);
if (values.sherkat_naft_doc != null)
formData.append("sherkat_naft_doc", values.sherkat_naft_doc);
@@ -81,6 +83,7 @@ const AddFormComponent = () => {
formData.append("payan_khedmat_image", values.payan_khedmat_image);
requestServer(SEND_LOAN_REQUEST_WELFARE, "post", {auth: true, data: formData})
.then(function (response) {
router.replace('/dashboard/refahi/followUp-loan');
})
.catch(function (error) {
})
@@ -179,18 +182,18 @@ const AddFormComponent = () => {
}}
>
<FormControl
error={props.touched.province && !!props.errors.province}
error={props.touched.province_id && !!props.errors.province_id}
sx={{width: "100%", mt: 2}}
size="small"
>
<InputLabel>{t("LoanRequest.text_field_province")}</InputLabel>
<InputLabel>{t("LoanRequest.text_field_province_id")}</InputLabel>
<Select
name="province"
name="province_id"
disabled={isLoadingProvinceList || errorProvinceList}
label={t("LoanRequest.text_field_province")}
value={props.values.province}
label={t("LoanRequest.text_field_province_id")}
value={props.values.province_id}
onChange={(e) => {
props.setFieldValue("province", e.target.value);
props.setFieldValue("province_id", e.target.value);
}}
onBlur={props.handleBlur}
fullWidth
@@ -213,7 +216,7 @@ const AddFormComponent = () => {
)}
</Select>
<FormHelperText>
{props.touched.province && props.errors.province ? props.errors.province : ""}
{props.touched.province_id && props.errors.province_id ? props.errors.province_id : ""}
</FormHelperText>
</FormControl>
</Box>
@@ -237,21 +240,21 @@ const AddFormComponent = () => {
<Field
as={TextField}
sx={{width: "100%"}}
name="national_code"
name="national_id"
variant="outlined"
size="small"
label={t("LoanRequest.text_field_national_code")}
label={t("LoanRequest.text_field_national_id")}
placeholder={t(
"LoanRequest.text_field_enter_your_national_code"
"LoanRequest.text_field_enter_your_national_id"
)}
type={"text"}
error={
!!(props.touched.national_code && props.errors.national_code)
!!(props.touched.national_id && props.errors.national_id)
}
fullWidth
helperText={
props.touched.national_code
? props.errors.national_code
props.touched.national_id
? props.errors.national_id
: null
}
/>

View File

@@ -1,16 +1,15 @@
import DashboardLayouts from "@/layouts/dashboardLayouts";
import useUser from "@/lib/app/hooks/useUser";
import {Box, Chip, Divider} from "@mui/material";
import {useTranslations} from "next-intl";
import AddFormComponent from "@/components/dashboard/refahi/add-request-loan/forms/AddForm";
import AccessibilityComponent from "@/components/dashboard/refahi/add-request-loan/accessibility";
const LoanRequestComponent = () => {
const t = useTranslations();
const {user} = useUser();
return (
<DashboardLayouts>
<AddFormComponent/>
{user.can_request_a_new_loan ? <AddFormComponent/> : <AccessibilityComponent/>}
</DashboardLayouts>
);
};

View File

@@ -1,72 +1,23 @@
import StyledForm from "@/core/components/StyledForm";
import UploadSystem from "@/core/components/UploadSystem";
import {GET_PROVINCE_LIST, UPDATE_LOAN_REQUEST_WELFARE, DETAILS_LOAN_REQUEST_WELFARE} from "@/core/data/apiRoutes";
import {UPDATE_LOAN_REQUEST_WELFARE} from "@/core/data/apiRoutes";
import useDirection from "@/lib/app/hooks/useDirection";
import useUser from "@/lib/app/hooks/useUser";
import DataSaverOnIcon from "@mui/icons-material/DataSaverOn";
import {Box, Button, Chip, Divider, Stack, TextField} from "@mui/material";
import axios from "axios";
import {Field, Formik} from "formik";
import {useTranslations} from "next-intl";
import {useEffect, useMemo, useState} from "react";
import * as Yup from "yup";
import SelectBox from "@/core/components/SelectBox";
import useRequest from "@/lib/app/hooks/useRequest";
import {useRouter} from "next/router";
import useLoading from "@/lib/app/hooks/useLoading";
const EditFormComponent = () => {
const EditFormComponent = ({provinceList, initialValues}) => {
const t = useTranslations();
const {directionApp} = useDirection();
const {token} = useUser();
const requestServer = useRequest();
const router = useRouter();
const {setLoadingPage} = useLoading();
const [provinceList, setProvinceList] = useState(null);
const [initialValues, setInitialValues] = useState(null);
// get province list
useEffect(() => {
setLoadingPage(true)
requestServer(GET_PROVINCE_LIST, "get", {auth: true, notification: false})
.then(function ({data}) {
const formattedData = data.map((province, index) => ({
id: index,
name: province.name,
value: province.id,
}));
setProvinceList(formattedData);
}).catch(() => {
});
}, []);
// get form data
useEffect(() => {
if (!provinceList) return;
requestServer(DETAILS_LOAN_REQUEST_WELFARE + router.query.id, "get", {auth: true, notification: false})
.then(function ({data}) {
const item = data.data;
const formattedData = {
name: item.name,
phone_number: item.phone_number,
province_id: item.province_id,
national_id: item.national_id,
shenasname_id: item.shenasname_id,
sherkat_naft_doc: item.sherkat_naft_doc,
estate_doc: item.estate_doc,
agreement_doc: item.agreement_doc,
national_card_image: item.national_card_image,
shenasname_image: item.shenasname_image,
payan_khedmat_image: item.payan_khedmat_image,
}
setInitialValues(formattedData);
setLoadingPage(false)
})
.catch(() => {
})
}, [provinceList]);
// validation and request action of form
const validationSchema = Yup.object().shape({
@@ -74,8 +25,8 @@ const EditFormComponent = () => {
phone_number: Yup.string().required(
t("LoanRequest.error_message_phone_number")
),
province_id: Yup.string().required(t("LoanRequest.error_message_province")),
national_id: Yup.string().required(t("LoanRequest.error_message_national_code")),
province_id: Yup.string().required(t("LoanRequest.error_message_province_id")),
national_id: Yup.string().required(t("LoanRequest.error_message_national_id")),
shenasname_id: Yup.string().required(t("LoanRequest.error_message_shenasname_id")),
sherkat_naft_doc: Yup.mixed().required(t("LoanRequest.error_message_sherkat_naft_doc")),
estate_doc: Yup.mixed().required(t("LoanRequest.error_message_estate_doc")),
@@ -205,7 +156,7 @@ const EditFormComponent = () => {
>
<Field
name="province_id"
label={t("LoanRequest.text_field_province")} // t("LoanRequest.text_field_enter_your_province")
label={t("LoanRequest.text_field_province_id")} // t("LoanRequest.text_field_enter_your_province")
size="small"
selectType="province_id"
component={SelectBox}
@@ -244,9 +195,9 @@ const EditFormComponent = () => {
name="national_id"
variant="outlined"
size="small"
label={t("LoanRequest.text_field_national_code")}
label={t("LoanRequest.text_field_national_id")}
placeholder={t(
"LoanRequest.text_field_enter_your_national_code"
"LoanRequest.text_field_enter_your_national_id"
)}
type={"text"}
error={
@@ -307,7 +258,7 @@ const EditFormComponent = () => {
setFieldValue={props.setFieldValue}
default_image={initialValues.sherkat_naft_doc}
fieldName="sherkat_naft_doc"
imageAlt={t("app_name")}
imageAlt={t("LoanRequest.file_field_sherkat_naft_doc")}
label={t("LoanRequest.file_field_sherkat_naft_doc")}
enableDelete={false}
error={
@@ -326,7 +277,7 @@ const EditFormComponent = () => {
setFieldValue={props.setFieldValue}
default_image={initialValues.estate_doc}
fieldName="estate_doc"
imageAlt={t("app_name")}
imageAlt={t("LoanRequest.file_field_estate_doc")}
label={t("LoanRequest.file_field_estate_doc")}
enableDelete={false}
error={
@@ -345,7 +296,7 @@ const EditFormComponent = () => {
setFieldValue={props.setFieldValue}
default_image={initialValues.agreement_doc}
fieldName="agreement_doc"
imageAlt={t("app_name")}
imageAlt={t("LoanRequest.file_field_agreement_doc")}
label={t("LoanRequest.file_field_agreement_doc")}
enableDelete={false}
error={
@@ -364,7 +315,7 @@ const EditFormComponent = () => {
setFieldValue={props.setFieldValue}
default_image={initialValues.shenasname_image}
fieldName="shenasname_image"
imageAlt={t("app_name")}
imageAlt={t("LoanRequest.file_field_shenasname_image")}
label={t("LoanRequest.file_field_shenasname_image")}
enableDelete={false}
error={
@@ -383,7 +334,7 @@ const EditFormComponent = () => {
setFieldValue={props.setFieldValue}
default_image={initialValues.payan_khedmat_image}
fieldName="payan_khedmat_image"
imageAlt={t("app_name")}
imageAlt={t("LoanRequest.file_field_payan_khedmat_image")}
label={t("LoanRequest.file_field_payan_khedmat_image")}
enableDelete={false}
error={

View File

@@ -1,16 +1,80 @@
import DashboardLayouts from "@/layouts/dashboardLayouts";
import useUser from "@/lib/app/hooks/useUser";
import {useTranslations} from "next-intl";
import EditFormComponent from "@/components/dashboard/refahi/edit-request-loan/forms/EditForm";
import {useEffect, useState} from "react";
import {DETAILS_LOAN_REQUEST_WELFARE, GET_PROVINCE_LIST} from "@/core/data/apiRoutes";
import useLoading from "@/lib/app/hooks/useLoading";
import useRequest from "@/lib/app/hooks/useRequest";
import {useRouter} from "next/router";
import {log} from "next/dist/server/typescript/utils";
const LoanRequestComponent = () => {
const t = useTranslations();
const {user} = useUser();
const requestServer = useRequest();
const {setLoadingPage} = useLoading();
const router = useRouter();
const [provinceList, setProvinceList] = useState(null);
const [initialValues, setInitialValues] = useState(null);
// get province list
useEffect(() => {
setLoadingPage(true);
requestServer(GET_PROVINCE_LIST, "get", {auth: true, notification: false})
.then(function ({data}) {
const formattedData = data.map((province, index) => ({
id: index,
name: province.name,
value: province.id,
}));
setProvinceList(formattedData);
}).catch(() => {
setLoadingPage(false);
});
}, []);
// get form data
useEffect(() => {
if (!provinceList) return;
setLoadingPage(true);
requestServer(DETAILS_LOAN_REQUEST_WELFARE + router.query.id, "get", {auth: true, notification: false})
.then(function ({data}) {
const item = data.data;
const formattedData = {
name: item.name,
phone_number: item.phone_number,
province_id: item.province_id,
national_id: item.national_id,
shenasname_id: item.shenasname_id,
sherkat_naft_doc: item.sherkat_naft_doc,
estate_doc: item.estate_doc,
agreement_doc: item.agreement_doc,
national_card_image: item.national_card_image,
shenasname_image: item.shenasname_image,
payan_khedmat_image: item.payan_khedmat_image,
state_id: item.state_id
};
setInitialValues(formattedData);
})
.catch(() => {
setLoadingPage(false);
});
}, [provinceList, router]);
// Redirect to /dashboard/refahi/followUp-loan if state_id is not 7
useEffect(() => {
if (!initialValues) return
if (initialValues.state_id === 7) return
router.replace('/dashboard/refahi/followUp-loan');
}, [initialValues]);
return (
<DashboardLayouts>
<EditFormComponent/>
</DashboardLayouts>
<>
{initialValues && initialValues.state_id === 7 && (
<DashboardLayouts>
<EditFormComponent provinceList={provinceList} initialValues={initialValues}/>
</DashboardLayouts>
)}
</>
);
};