diff --git a/.gitignore b/.gitignore
index ccfafdc..a59383e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,4 +31,6 @@ cypress/screenshots
.env
.idea
package-lock.json
-ecosystem.config
\ No newline at end of file
+ecosystem.config
+
+public/config.json
\ No newline at end of file
diff --git a/example.env.local b/example.env.local
index 65a9824..8e07b04 100644
--- a/example.env.local
+++ b/example.env.local
@@ -1,5 +1,5 @@
NEXT_PUBLIC_API_NAME = "Loan Facilities Dashboard"
-NEXT_PUBLIC_API_VERSION = "1.22.3"
+NEXT_PUBLIC_API_VERSION = "1.25.1"
NEXT_PUBLIC_DEFAULT_LANGUAGE = "fa"
NEXT_PUBLIC_DEFAULT_DIRECTION = "rtl"
diff --git a/next.config.js b/next.config.js
index db2124f..5c809d9 100644
--- a/next.config.js
+++ b/next.config.js
@@ -3,7 +3,7 @@
const nextConfig = {
reactStrictMode: true,
images: {
- domains: ['loan.witel.ir', /* other domains */],
+ domains: [process.env.NEXT_PUBLIC_BASE_URL],
},
i18n: {
defaultLocale: 'fa',
diff --git a/package.json b/package.json
index 5305c99..35ba316 100644
--- a/package.json
+++ b/package.json
@@ -16,8 +16,11 @@
"@mui/icons-material": "^5.11.16",
"@mui/lab": "^5.0.0-alpha.152",
"@mui/material": "^5.12.0",
+ "@mui/x-date-pickers": "^6.18.5",
+ "@witel/webapp-builder": "^1.2.4",
"axios": "^1.4.0",
"colord": "^2.9.3",
+ "date-fns-jalali": "^2.13.0-0",
"eslint": "8.36.0",
"formik": "^2.2.9",
"fs-extra": "^11.1.1",
diff --git a/public/config.json.example b/public/config.json.example
new file mode 100644
index 0000000..bf732fa
--- /dev/null
+++ b/public/config.json.example
@@ -0,0 +1,41 @@
+{
+ "middlewares": {},
+ "deadlines": {
+ "register": {
+ "date": {
+ "from": "1402/09/01",
+ "to": "1402/09/10"
+ },
+ "messages": {
+ "before": "ثبت نام هنوز شروع نشده",
+ "after": "زمان ثبت نام به اتمام رسید"
+ },
+ "timeline_label": {
+ "primary": "ثبت نام متقاضی",
+ "secondary": "ثبت نام متقاضیان واجد شرایط"
+ }
+ },
+ "validation": {
+ "date": {
+ "from": "1402/09/15",
+ "to": "1402/11/10"
+ },
+ "messages": {},
+ "timeline_label": {
+ "primary": "صحت سنجی متقاضیان",
+ "secondary": "بررسی و کارشناسی درخواست ها"
+ }
+ },
+ "done": {
+ "date": {
+ "from": "1402/11/10",
+ "to": "1402/12/20"
+ },
+ "messages": {},
+ "timeline_label": {
+ "primary": "ارجاع به بانک",
+ "secondary": "فرآیند معرفی ضامن و پرداخت"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/files/راهنما.xlsx b/public/files/راهنما.xlsx
new file mode 100644
index 0000000..efbd0bf
Binary files /dev/null and b/public/files/راهنما.xlsx differ
diff --git a/public/global.scss b/public/global.scss
new file mode 100644
index 0000000..a4a3158
--- /dev/null
+++ b/public/global.scss
@@ -0,0 +1,2 @@
+@import "fontiran";
+@import 'react-toastify/dist/ReactToastify.css';
\ No newline at end of file
diff --git a/public/images/bg-firstpage-bus.png b/public/images/bg-firstpage-bus.png
new file mode 100644
index 0000000..276d67b
Binary files /dev/null and b/public/images/bg-firstpage-bus.png differ
diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json
index 2eeb753..c6999fb 100644
--- a/public/locales/fa/app.json
+++ b/public/locales/fa/app.json
@@ -1,10 +1,18 @@
{
"app_name": "سامانه جامع تسهیلات",
"app_short_name": "سامانه تسهیلات",
+ "birthday": "تاریخ تولد",
+ "birthday_error": "تاریخ تولد خود را وارد کنید!",
"dashboard": "داشبورد",
+ "text_field_city_id": "شهر",
+ "text_field_error_fetching_cities": "لطفا شهر خود را وارد کنید!",
+ "text_field_loading_cities_list": "درحال دریافت اطلاعات شهر ها...",
+ "text_field_loading": "درحال دریافت اطلاعات",
+ "text_field_error_fetching": "خطا در دریافت اطلاعات",
"first_page": "خوش آمدید",
"powered_by_witel": "توسعه یافته توسط وایتل",
"login": "ورود",
+ "today": "امروز",
"pending": "درحال اجرا...",
"login_user_panel": "ورود به پنل کاربران",
"register_navy": "ثبت نام اعضای ناوگان",
@@ -18,6 +26,8 @@
"upload_file_text": "بارگذاری فایل",
"online_message": "شما به اینترنت وصل هستید",
"offline_message": "اتصال شما به اینترنت قطع شده است",
+ "routing_to": "در حال انتقال به صفحه",
+ "error_message_plate_number": "لطفا شماره پلاک خود را وارد کنید!",
"header": {
"open_profile": "پروفایل",
"edit_profile": "ویرایش پروفایل",
@@ -43,7 +53,7 @@
"button_back_dashboard": "بازگشت به صفحه اصلی"
},
"Titles": {
- "title_login_page": "صفحه ورود",
+ "title_login_page": "ورود به سامانه",
"title_register_page": "صفحه ثبت نام",
"title_login_navy_page": "ورود اعضای ناوگان",
"title_login_welfare_services_page": "ورود اعضای خدمات رفاهی",
@@ -122,51 +132,82 @@
"loan_request_correction": "اصلاح درخواست",
"loan_request_detail": "مشاهده جزئیات",
"request_number": "درخواست شماره",
- "no_request_found": "درخواستی یافت نشد"
+ "no_request_found": "درخواستی یافت نشد",
+ "loan_unique_code": "کد یکتا",
+ "loan_date": "تاریخ درخواست",
+ "loan_status": "وضعیت",
+ "loan_bank_branch": "اطلاعات شعبه",
+ "loan_details": "نمایش"
},
"LoanRequest": {
+ "finish_loan_request": "درخواست شما با موفقیت ثبت شد",
+ "button_while_submit": "درحال بارگذاری ...",
+ "checkbox": "بدینوسیله صحت کلیه اطلاعات مندرج در این فرم را تایید و گواهی میدهم .",
+ "back_to_dashboard": "پیگیری درخواست ها",
+ "cityList_empty": "ابتدا استان را وارد کنید",
+ "cityList_loading": "درحال دریافت لیست شهر ها ...",
"loan_request_page": "ثبت درخواست وام",
"personal_info": "اطلاعات شخصی",
+ "national_code_number": "کد ملی می بایست شامل اعداد باشد",
+ "national_code_max": "کد ملی می بایست 10 رقم باشد",
+ "shenasname_serial_max": "سریال پشت کارت ملی می بایست شامل 10 بخش باشد",
+ "postal_code_max": "کد پستی می بایست 10 رقم باشد",
+ "tel_number_max": "شماره ثابت می بایست 11 رقم باشد",
+ "national_code_positive": "کد ملی می بایست مثبت باشد",
"uploading_documents": "اسناد",
"error_message_name": "لطفا نام خود را وارد کنید!",
- "error_message_phone_number": "لطفا شماره تلفن خود را وارد کنید!",
+ "error_message_plate_number": "لطفا شماره پلاک را به درستی وارد کنید!",
+ "error_message_occupation_id": "لطفا کد شغل را به درستی وارد کنید!",
+ "error_message_education_id": "لطفا تحصیلات را به درستی وارد کنید!",
+ "error_message_tel_number": "لطفا شماره ثابت (با پیش شماره استان) خود را وارد کنید!",
"error_message_vehicle_type": "لطفا نوع وسیله نقلیه خود را وارد کنید!",
- "error_message_plate_number": "لطفا شماره پلاک خود را وارد کنید!",
- "error_message_navgan_id": "لطفا کد ناوگان خود را وارد کنید!",
+ "error_message_navgan_id": "لطفا کد هوشمند ناوگان خود را وارد کنید!",
"error_message_province_id": "لطفا استان خود را وارد کنید!",
"error_message_national_id": "لطفا کد ملی خود را وارد کنید!",
- "error_message_shenasname_id": "لطفا شماره شناسنامه خود را وارد کنید!",
- "text_field_phone_number": "شماره تلفن",
- "text_field_enter_your_phone_number": "شماره تلفن خود را وارد کنید",
+ "error_message_date_of_birth": "لطفا تاریخ تولد خود را وارد کنید!",
+ "error_message_shenasname_serial": "لطفا سریال پشت کارت ملی خود را وارد کنید!",
+ "error_message_postal_code": "لطفا کد پستی خود را وارد کنید!",
+ "error_message_national_code": "لطفا کد ملی خود را وارد کنید!",
+ "error_message_checkedBox": "لطفا کد صحت اطلاعات خود را تایید کنید!",
+ "error_message_navgan_type": "لطفا نوع ناوگان خود را وارد کنید!",
+ "error_message_address": "لطفا آدرس خود را وارد کنید!",
+ "text_field_tel_number": "شماره ثابت (با پیش شماره استان)",
+ "text_field_education_id": "تحصیلات",
+ "text_field_occupation_id": "شغل",
+ "text_field_enter_your_tel_number": "شماره ثابت (با پیش شماره استان) خود را وارد کنید",
"text_field_name": "نام",
+ "text_field_plate_part4": "بخش چهارم",
+ "text_field_plate_part3": "بخش سوم",
+ "text_field_plate_part2": "بخش دوم",
+ "text_field_plate_part1": "بخش اول",
+ "text_field_postal_code": "کد پستی",
+ "text_field_navgan_type": "نوع ناوگان",
+ "text_field_address": "آدرس",
+ "text_field_enter_your_plate_part1": "بخش اول پلاک را وارد کنید",
+ "text_field_enter_your_plate_part2": "بخش دوم پلاک را وارد کنید",
+ "text_field_enter_your_plate_part3": "بخش سوم پلاک را وارد کنید",
+ "text_field_enter_your_plate_part4": "بخش چهارم پلاک راوارد کنید",
+ "text_field_enter_your_address": "آدرس خود راوارد کنید",
"text_field_enter_your_name": "نام خود را وارد کنید",
- "text_field_vehicle_type": "نام وسیله نقلیه",
- "text_field_enter_your_vehicle_type": "نام وسیله نقلیه خود را وارد کنید",
+ "text_field_enter_your_postal_code": "کد پستی خود را وارد کنید",
+ "text_field_vehicle_type": "نوع وسیله نقلیه",
+ "text_field_enter_your_vehicle_type": "نوع وسیله نقلیه خود را وارد کنید",
"text_field_province_id": "استان",
- "text_field_loading_provinces_list": "درحال دریافت استان ها",
+ "text_field_loading_provinces_list": "درحال دریافت استان ها ...",
"text_field_error_fetching_provinces": "خطا در دریافت استان ها",
+ "text_field_enter_your_national_code": "کد ملی خود را وارد کنید",
"text_field_enter_your_province_id": "استان خود را وارد کنید",
- "text_field_navgan_id": "شماره ناوگان",
- "text_field_enter_your_navgan_id": "شماره ناوگان خود را وارد کنید",
+ "text_field_enter_your_city_id": "شهر خود را وارد کنید",
+ "text_field_navgan_id": "کد هوشمند ناوگان",
+ "text_field_enter_your_navgan_id": "کد هوشمند ناوگان خود را وارد کنید",
"text_field_national_code": "کد ملی",
"text_field_enter_your_national_id": "کد ملی خود را وارد کنید",
- "text_field_shenasname_id": "شماره شناسنامه",
- "text_field_enter_your_shenasname_id": "شماره شناسنامه خود را وارد کنید",
+ "text_field_shenasname_serial": "سریال پشت کارت ملی",
+ "text_field_enter_your_shenasname_serial": "سریال پشت کارت ملی خود را وارد کنید",
"text_field_plate_number": "شماره پلاک",
"text_field_enter_your_plate_number": "شماره پلاک خود را وارد کنید",
"button_submit": "ثبت درخواست",
- "file_field_sherkat_naft_doc": "مجوز شرکت نفت",
- "file_field_estate_doc": "سند مالکیت",
- "file_field_agreement_doc": "موافقت نامه اصولی",
- "error_message_sherkat_naft_doc": "مجوز شرکت نفت خود را وارد کنید",
- "error_message_estate_doc": "سند مالکیت خود را وارد کنید",
- "error_message_agreement_doc": "موافقت نامه اصولی خود را وارد کنید",
- "file_field_shenasname_image": "تصویر شناسنامه",
- "file_field_national_card_image": "تصویر کارت ملی",
- "file_field_payan_khedmat_image": "تصویر کارت پایان خدمت",
- "error_message_national_card_image": "تصویر کارت ملی خود را وارد کنید",
- "error_message_shenasname_image": "تصویر شناسنامه خود را وارد کنید",
- "error_message_payan_khedmat_image": "تصویر کارت پایان خدمت خود را وارد کنید",
+ "error_message_city_id": "لطفا شهر خود را وارد کنید!",
"add_loan_request_permission": "اکنون امکان ثبت درخواست جدید برای شما مقدور نیست"
},
"EditLoanRequest": {
diff --git a/public/manifest.json b/public/manifest.json
index 32bacd5..1fd43e4 100644
--- a/public/manifest.json
+++ b/public/manifest.json
@@ -1,5 +1,5 @@
{
- "short_name": "Loan Facilities Dashboard",
+ "short_name": "Loan Facilities",
"name": "Loan Facilities User Dashboard",
"description": "Loan Facilities",
"version": "1.0.0",
diff --git a/src/components/dashboard/first/index.jsx b/src/components/dashboard/first/index.jsx
index 3d1c29e..0e3c800 100644
--- a/src/components/dashboard/first/index.jsx
+++ b/src/components/dashboard/first/index.jsx
@@ -1,7 +1,5 @@
-import DashboardLayouts from "@/layouts/dashboardLayouts";
-
const FirstComponent = () => {
- return ;
+ return <>>;
};
export default FirstComponent;
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 df79a4c..6d9f9bc 100644
--- a/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx
+++ b/src/components/dashboard/navgan/add-request-loan/forms/AddForm.jsx
@@ -1,463 +1,471 @@
-import Notifications from "@/core/components/notifications";
import SelectBox from "@/core/components/SelectBox";
-import StyledForm from "@/core/components/StyledForm";
-import UploadSystem from "@/core/components/UploadSystem";
-import {GET_PROVINCE_LIST, SEND_LOAN_REQUEST_NAVGAN,} 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, Stack, TextField} from "@mui/material";
-import axios from "axios";
-import {Field, Formik} from "formik";
+import {Box, Button, Checkbox, FormControlLabel, Grid, Stack, TextField, Typography} from "@mui/material";
+import {useFormik} from "formik";
import {useTranslations} from "next-intl";
-import {useEffect, useState} from "react";
import * as Yup from "yup";
+import {CenterLayout, useRequest} from "@witel/webapp-builder";
+import useProvince from "@/lib/app/hooks/useProvince";
+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";
const AddFormComponent = () => {
const t = useTranslations();
- const {directionApp} = useDirection();
- const {token} = useUser();
+ const [finishLoanRequest, setFinishLoanRequest] = useState(false)
+ const [checked, setChecked] = useState(false);
+ const requestServer = useRequest()
+ const {provinceList, isLoadingProvinceList, errorProvinceList} = useProvince()
+ const {cityTextField, cityList, setProvinceID, isLoadingCityList} = useCities()
+ const {educationsList, isLoadingEducationsList, errorEducationsList} = UseEducations()
+ const {occupationsList, isLoadingOccupationsList, errorOccupationsList} = useOccupations()
- // get province list
- const [provinceList, setProvinceList] = useState([]);
- useEffect(() => {
- axios
- .get(GET_PROVINCE_LIST, {
- headers: {Authorization: `Bearer ${token}`},
- })
- .then(({data}) => {
- const formattedData = data.map((province, index) => ({
- id: index,
- name: province.name,
- value: province.id,
- }));
- setProvinceList(formattedData);
- })
- .catch((error) => {
- Notifications(t, error.response);
- });
- }, []);
- // end get province list
-
- // upload files
- const [selectedImageShenasname, setSelectedImageShenasname] = useState(
- "/images/upload-image.svg"
- );
- const [fileTypeShenasname, setFileTypeShenasname] = useState(null);
- const [fileNameShenasname, setFileNameShenasname] = useState(null);
- const [selectedImageNationalCard, setSelectedImageNationalCard] = useState(
- "/images/upload-image.svg"
- );
- const [fileTypeNationalCard, setFileTypeNationalCard] = useState(null);
- const [fileNameNationalCard, setFileNameNationalCard] = useState(null);
-
- const handleUploadChangeShenasname = (event, setFieldValue) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImageShenasname(URL.createObjectURL(uploadedFile));
- setFileTypeShenasname(fileType);
- setFileNameShenasname(fileName);
- setFieldValue("shenasname_img", uploadedFile);
- }
- };
- const handleUploadChangeNationalCard = (event, setFieldValue) => {
- const uploadedFile = event.target?.files?.[0];
- const fileType = event.target.files[0].type;
- const fileName = event.target.files[0].name;
- if (uploadedFile) {
- setSelectedImageNationalCard(URL.createObjectURL(uploadedFile));
- setFileTypeNationalCard(fileType);
- setFileNameNationalCard(fileName);
- setFieldValue("national_card_img", uploadedFile);
- }
- };
- // end upload files
-
- // initial values
const initialValues = {
- name: "",
- phone_number: "",
+ telephone_number: "",
vehicle_type: "",
- plate_number: "",
province_id: "",
+ city_id: "",
navgan_id: "",
- national_code: "",
- shenasname_id: "",
- national_card_img: null,
- shenasname_img: null,
+ national_id: "",
+ national_serial_number: "",
+ postal_code: "",
+ navgan_type: "",
+ plate_part1: "",
+ plate_part2: "الف",
+ plate_part3: "",
+ plate_part4: "",
+ address: "",
+ birthday: "",
+ education_id: "",
+ occupation_id: "",
+ checkedBox: false
};
- // end initial values
- // validation
const validationSchema = Yup.object().shape({
- name: Yup.string().required(t("LoanRequest.error_message_name")),
- phone_number: Yup.string().required(
- t("LoanRequest.error_message_phone_number")
- ),
+ 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")
),
- plate_number: Yup.string().required(
- t("LoanRequest.error_message_plate_number")
+ navgan_type: Yup.string().required(
+ t("LoanRequest.error_message_navgan_type")
),
- navgan_id: Yup.string().required(t("LoanRequest.error_message_navgan_id")),
+ 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")),
- national_code: Yup.string().required(
- t("LoanRequest.error_message_national_code")
- ),
- shenasname_id: Yup.string().required(
- t("LoanRequest.error_message_shenasname_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_serial_number: Yup.string().required(t("LoanRequest.error_message_shenasname_serial")),
});
- // end validation
- // submit
+
const handleSubmit = async (values, props) => {
- Notifications(t, undefined);
- const formData = new FormData();
- formData.append("name", values.name);
- formData.append("phone_number", values.phone_number);
- formData.append("vehicle_type", values.vehicle_type);
- formData.append("plate_number", values.plate_number);
- formData.append("province_id", values.province_id);
- formData.append("navgan_id", values.navgan_id);
- formData.append("national_code", values.national_code);
- formData.append("shenasname_id", values.shenasname_id);
- if (values.shenasname_img != null)
- formData.append("shenasname_image", values.shenasname_img);
- if (values.national_card_img != null)
- formData.append("national_card_image", values.national_card_img);
+ props.setSubmitting(true)
- await axios
- .post(SEND_LOAN_REQUEST_NAVGAN, formData, {
- headers: {
- Authorization: `Bearer ${token}`,
- "Content-Type": "multipart/form-data",
- },
- })
- .then(function (response) {
- Notifications(t, response);
- })
- .catch(function (error) {
- Notifications(t, error.response);
- props.setSubmitting(false);
- });
+ await requestServer(SEND_LOAN_REQUEST_NAVGAN, "post", {
+ auth: true, notification: true, data: {
+ telephone_number: values.telephone_number,
+ vehicle_type: values.vehicle_type,
+ province_id: values.province_id,
+ city_id: values.city_id,
+ navgan_id: values.navgan_id,
+ national_id: values.national_id,
+ national_serial_number: values.national_serial_number,
+ postal_code: values.postal_code,
+ navgan_type: values.navgan_type,
+ plate_part1: values.plate_part1,
+ plate_part2: values.plate_part2,
+ plate_part3: values.plate_part3,
+ plate_part4: values.plate_part4,
+ address: values.address,
+ birthday: values.birthday.locale('en').format("YYYY-MM-DD"),
+ education_id: values.education_id,
+ occupation_id: values.occupation_id,
+ }
+ }).then(() => {
+ setFinishLoanRequest(true)
+ }).catch(() => {
+ }).finally(() => {
+ props.setSubmitting(false)
+ })
};
- // end submit
+
+ const formik = useFormik({
+ initialValues, validationSchema, onSubmit: handleSubmit
+ })
return (
-
- {(props) => (
-
-
-
+ {finishLoanRequest ?
+ (
+
+
+
+ {t("LoanRequest.finish_loan_request")}
+
+
+
+
+ ) : (
+ <>
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
- handleUploadChangeShenasname(e, props.setFieldValue)
- }
- setselectedImage={setSelectedImageShenasname}
- setFieldValue={props.setFieldValue}
- fieldname="shenasname_img"
- fileType={fileTypeShenasname}
- fileName={fileNameShenasname}
- imageAlt={t("app_name")}
- imageSize={[300 /*width*/, 150 /*height*/]}
- label={t("LoanRequest.file_field_shenasname_image")}
- />
-
- handleUploadChangeNationalCard(e, props.setFieldValue)
- }
- setselectedImage={setSelectedImageNationalCard}
- setFieldValue={props.setFieldValue}
- fieldname="national_card_img"
- fileType={fileTypeNationalCard}
- fileName={fileNameNationalCard}
- imageAlt={t("app_name")}
- imageSize={[300 /*width*/, 150 /*height*/]}
- label={t("LoanRequest.file_field_national_card_image")}
- />
-
+
+
+
+
+
+
+
+
+
+
+ {
+ 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/index.jsx b/src/components/dashboard/navgan/add-request-loan/index.jsx
index cd9d359..395ede7 100644
--- a/src/components/dashboard/navgan/add-request-loan/index.jsx
+++ b/src/components/dashboard/navgan/add-request-loan/index.jsx
@@ -1,29 +1,21 @@
-import CenterLayout from "@/layouts/CenterLayout";
-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/navgan/add-request-loan/forms/AddForm";
const LoanRequestComponent = () => {
const t = useTranslations();
- const {user} = useUser();
return (
-
-
-
+ <>
+
-
-
+ >
);
};
diff --git a/src/components/dashboard/navgan/followUp-loan/RequestCard.jsx b/src/components/dashboard/navgan/followUp-loan/RequestCard.jsx
index 6e5dfd3..54695db 100644
--- a/src/components/dashboard/navgan/followUp-loan/RequestCard.jsx
+++ b/src/components/dashboard/navgan/followUp-loan/RequestCard.jsx
@@ -1,25 +1,50 @@
-import {Card, CardContent, CardHeader, Grid, Typography} from "@mui/material";
-import SellIcon from '@mui/icons-material/Sell';
+import {Box, Button, Card, CardContent, Grid, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
-
+import moment from "jalali-moment";
+import {LinkRouting} from "@witel/webapp-builder";
+import AccessTimeFilledIcon from '@mui/icons-material/AccessTimeFilled';
+import CheckCircleIcon from '@mui/icons-material/CheckCircle';
+import CancelIcon from '@mui/icons-material/Cancel';
const RequestCard = ({item}) => {
const t = useTranslations();
return (
-
+
- }
- title={`${t("LoanFollowUp.request_number")}: (${item.id})`}
- subheader={item.latest_history_created_at}
- />
-
-
- {item.loan_state}
+
+
+
+ {`${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_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 && }
+
+
diff --git a/src/components/dashboard/navgan/followUp-loan/index.jsx b/src/components/dashboard/navgan/followUp-loan/index.jsx
index de3176c..aa031a6 100644
--- a/src/components/dashboard/navgan/followUp-loan/index.jsx
+++ b/src/components/dashboard/navgan/followUp-loan/index.jsx
@@ -1,59 +1,44 @@
-import DashboardLayouts from "@/layouts/dashboardLayouts";
-import {
- Grid,
- Stack,
-} from "@mui/material";
+import { Grid } from "@mui/material";
import {useEffect, useState} from "react";
import {SHOW_LOAN_REQUEST_NAVGAN} from "@/core/data/apiRoutes";
-import useLoading from "@/lib/app/hooks/useLoading";
-import useRequest from "@/lib/app/hooks/useRequest";
-import moment from "jalali-moment";
import RequestCard from "@/components/dashboard/navgan/followUp-loan/RequestCard";
+import {FullPageLayout , useRequest} from "@witel/webapp-builder";
const LoanFollowUpComponent = () => {
const requestServer = useRequest();
- const {setLoadingPage} = useLoading();
+ const [isLoading, setIsLoading] = useState(false)
const [requestsList, setRequestsList] = useState([]);
- // get form data
useEffect(() => {
- setLoadingPage(true)
- requestServer(SHOW_LOAN_REQUEST_NAVGAN, "get", {auth: true, notification: false})
+ setIsLoading(true)
+ requestServer(SHOW_LOAN_REQUEST_NAVGAN, "get", {
+ auth: true,
+ pending:false,
+ success:{notification:{show:false}}
+ })
.then(function ({data}) {
const items = data.data;
- const formattedData = items.map((item, index) => ({
- id: item.id,
- latest_history_created_at: moment(item.latest_history_created_at).locale("fa").format("HH:mm | YYYY/MM/DD"),
- state_id: item.state_id,
- loan_state: item.loan_state,
- }));
- setRequestsList(formattedData);
- setLoadingPage(false)
+ setRequestsList(items);
+ setIsLoading(false)
})
.catch(function (error) {
})
}, []);
return (
-
-
+
-
- {requestsList.map((item, index) => (
-
- ))}
-
-
-
+ {requestsList.map((item) => (
+
+ ))}
+
+
+
+
);
};
diff --git a/src/components/dashboard/refahi/add-request-loan/accessibility/index.jsx b/src/components/dashboard/refahi/add-request-loan/accessibility/index.jsx
deleted file mode 100644
index 3618d0b..0000000
--- a/src/components/dashboard/refahi/add-request-loan/accessibility/index.jsx
+++ /dev/null
@@ -1,32 +0,0 @@
-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 (
-
-
- {t("LoanRequest.add_loan_request_permission")}
-
-
-
- );
-};
-
-export default AccessibilityComponent;
diff --git a/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx b/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx
deleted file mode 100644
index 4051854..0000000
--- a/src/components/dashboard/refahi/add-request-loan/forms/AddForm.jsx
+++ /dev/null
@@ -1,439 +0,0 @@
-import StyledForm from "@/core/components/StyledForm";
-import UploadSystem from "@/core/components/UploadSystem";
-import {SEND_LOAN_REQUEST_WELFARE} from "@/core/data/apiRoutes";
-import DataSaverOnIcon from "@mui/icons-material/DataSaverOn";
-import {
- Box,
- Button,
- Chip,
- Divider,
- FormControl,
- FormHelperText,
- InputLabel,
- MenuItem,
- Select,
- Stack,
- TextField
-} from "@mui/material";
-import {Field, Formik} from "formik";
-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 router = useRouter();
-
- // initial values, validation and request action of form
- const initialValues = {
- name: "",
- phone_number: "",
- province_id: "",
- national_id: "",
- shenasname_id: "",
- sherkat_naft_doc: null,
- estate_doc: null,
- agreement_doc: null,
- national_card_image: null,
- shenasname_image: null,
- payan_khedmat_image: null,
- };
-
- const validationSchema = Yup.object().shape({
- name: Yup.string().required(t("LoanRequest.error_message_name")),
- phone_number: Yup.string().required(
- t("LoanRequest.error_message_phone_number")
- ),
- 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")),
- agreement_doc: Yup.mixed().required(t("LoanRequest.error_message_agreement_doc")),
- national_card_image: Yup.mixed().required(t("LoanRequest.error_message_national_card_image")),
- shenasname_image: Yup.mixed().required(t("LoanRequest.error_message_shenasname_image")),
- payan_khedmat_image: Yup.mixed().required(t("LoanRequest.error_message_payan_khedmat_image")),
- });
- const handleSubmit = (values, props) => {
- const formData = new FormData();
- formData.append("name", values.name);
- formData.append("phone_number", values.phone_number);
- 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);
- if (values.estate_doc != null)
- formData.append("estate_doc", values.estate_doc);
- if (values.agreement_doc != null)
- formData.append("agreement_doc", values.agreement_doc);
- if (values.shenasname_image != null)
- formData.append("shenasname_image", values.shenasname_image);
- if (values.national_card_image != null)
- formData.append("national_card_image", values.national_card_image);
- if (values.payan_khedmat_image != null)
- 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) {
- })
- .finally(function () {
- props.setSubmitting(false);
- });
- };
- // end initial values, validation and request action of form
-
- return (
-
- {(props) => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {t("LoanRequest.text_field_province_id")}
-
-
- {props.touched.province_id && props.errors.province_id ? props.errors.province_id : ""}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )}
-
- );
-};
-
-export default AddFormComponent;
\ No newline at end of file
diff --git a/src/components/dashboard/refahi/add-request-loan/index.jsx b/src/components/dashboard/refahi/add-request-loan/index.jsx
deleted file mode 100644
index bc82ac7..0000000
--- a/src/components/dashboard/refahi/add-request-loan/index.jsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import DashboardLayouts from "@/layouts/dashboardLayouts";
-import useUser from "@/lib/app/hooks/useUser";
-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 (
-
- {user.can_request_a_new_loan ? : }
-
- );
-};
-
-export default LoanRequestComponent;
diff --git a/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx b/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx
deleted file mode 100644
index 36f5aa0..0000000
--- a/src/components/dashboard/refahi/edit-request-loan/forms/EditForm.jsx
+++ /dev/null
@@ -1,397 +0,0 @@
-import StyledForm from "@/core/components/StyledForm";
-import UploadSystem from "@/core/components/UploadSystem";
-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 {Field, Formik} from "formik";
-import {useTranslations} from "next-intl";
-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 = ({provinceList, initialValues}) => {
- const t = useTranslations();
- const requestServer = useRequest();
- const router = useRouter();
-
-
- // validation and request action of form
- const validationSchema = Yup.object().shape({
- name: Yup.string().required(t("LoanRequest.error_message_name")),
- phone_number: Yup.string().required(
- t("LoanRequest.error_message_phone_number")
- ),
- 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")),
- agreement_doc: Yup.mixed().required(t("LoanRequest.error_message_agreement_doc")),
- national_card_image: Yup.mixed().required(t("LoanRequest.error_message_national_card_image")),
- shenasname_image: Yup.mixed().required(t("LoanRequest.error_message_shenasname_image")),
- payan_khedmat_image: Yup.mixed().required(t("LoanRequest.error_message_payan_khedmat_image")),
- });
-
- const handleSubmit = (values, props) => {
- const formData = new FormData();
- formData.append("name", values.name);
- formData.append("phone_number", values.phone_number);
- 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 != initialValues.sherkat_naft_doc)
- formData.append("sherkat_naft_doc", values.sherkat_naft_doc);
- if (values.estate_doc != initialValues.estate_doc)
- formData.append("estate_doc", values.estate_doc);
- if (values.agreement_doc != initialValues.agreement_doc)
- formData.append("agreement_doc", values.agreement_doc);
- if (values.shenasname_image != initialValues.shenasname_image)
- formData.append("shenasname_image", values.shenasname_image);
- if (values.national_card_image != initialValues.national_card_image)
- formData.append("national_card_image", values.national_card_image);
- if (values.payan_khedmat_image != initialValues.payan_khedmat_image)
- formData.append("payan_khedmat_image", values.payan_khedmat_image);
-
- requestServer(UPDATE_LOAN_REQUEST_WELFARE + router.query.id, "post", {auth: true, data: formData})
- .then(function (response) {
- })
- .catch(function (error) {
- })
- .finally(function () {
- props.setSubmitting(false);
- });
- };
- if (!initialValues) return "";
- return (
-
- {(props) => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )}
-
- );
-};
-
-export default EditFormComponent;
\ No newline at end of file
diff --git a/src/components/dashboard/refahi/edit-request-loan/index.jsx b/src/components/dashboard/refahi/edit-request-loan/index.jsx
deleted file mode 100644
index 89de937..0000000
--- a/src/components/dashboard/refahi/edit-request-loan/index.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import DashboardLayouts from "@/layouts/dashboardLayouts";
-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 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 (
- <>
- {initialValues && initialValues.state_id === 7 && (
-
-
-
- )}
- >
- );
-};
-
-export default LoanRequestComponent;
\ No newline at end of file
diff --git a/src/components/dashboard/refahi/followUp-loan/RequestCard.jsx b/src/components/dashboard/refahi/followUp-loan/RequestCard.jsx
deleted file mode 100644
index 799d296..0000000
--- a/src/components/dashboard/refahi/followUp-loan/RequestCard.jsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import {
- Card,
- CardContent,
- CardHeader,
- Grid, IconButton, Tooltip,
- Typography,
-} from "@mui/material";
-import SellIcon from '@mui/icons-material/Sell';
-import EditIcon from '@mui/icons-material/Edit';
-import {useTranslations} from "next-intl";
-import {NextLinkComposed} from "@/core/components/LinkRouting";
-
-
-const RequestCard = ({item}) => {
- const t = useTranslations();
- return (
-
-
- }
- title={`${t("LoanFollowUp.request_number")}: (${item.id})`}
- subheader={item.latest_history_created_at}
- action={
- item.state_id === 7 ? ( // Use the ternary operator or if/else inside curly braces
-
-
-
-
-
- ) : null
- }
- />
-
-
- {item.loan_state}
-
-
-
-
- );
-};
-
-export default RequestCard;
\ No newline at end of file
diff --git a/src/components/dashboard/refahi/followUp-loan/index.jsx b/src/components/dashboard/refahi/followUp-loan/index.jsx
deleted file mode 100644
index 32b121d..0000000
--- a/src/components/dashboard/refahi/followUp-loan/index.jsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import DashboardLayouts from "@/layouts/dashboardLayouts";
-import {Grid, Stack, Typography,} from "@mui/material";
-import {useEffect, useState} from "react";
-import {SHOW_LOAN_REQUEST_WELFARE} from "@/core/data/apiRoutes";
-import useLoading from "@/lib/app/hooks/useLoading";
-import useRequest from "@/lib/app/hooks/useRequest";
-import moment from "jalali-moment";
-import RequestCard from "@/components/dashboard/refahi/followUp-loan/RequestCard";
-import {useTranslations} from "next-intl";
-
-const LoanFollowUpComponent = () => {
- const t = useTranslations()
- const requestServer = useRequest();
- const {setLoadingPage} = useLoading();
- const [requestsList, setRequestsList] = useState(null);
- // get form data
- useEffect(() => {
- setLoadingPage(true)
- requestServer(SHOW_LOAN_REQUEST_WELFARE, "get", {auth: true, notification: false})
- .then(function ({data}) {
- const items = data.data;
- const formattedData = items.map((item, index) => ({
- id: item.id,
- latest_history_created_at: moment(item.latest_history_created_at).locale("fa").format("HH:mm | YYYY/MM/DD"),
- state_id: item.state_id,
- loan_state: item.loan_state,
- }));
- setRequestsList(formattedData);
- setLoadingPage(false)
- })
- .catch(function (error) {
- })
- }, []);
-
- return (
-
- {requestsList == null ? '' : requestsList.length ? (
- {requestsList.map((item, index) => ())}
- ) : ({t('LoanFollowUp.no_request_found')})}
-
- );
-};
-
-export default LoanFollowUpComponent;
diff --git a/src/components/errors/403.jsx b/src/components/errors/403.jsx
index ce91443..8d410ed 100644
--- a/src/components/errors/403.jsx
+++ b/src/components/errors/403.jsx
@@ -1,10 +1,8 @@
-import CenterLayout from "@/layouts/CenterLayout";
-import FullPageLayout from "@/layouts/FullPageLayout";
import {Button, Typography} from "@mui/material";
-import {NextLinkComposed} from "@/core/components/LinkRouting";
import {useTranslations} from "next-intl";
import TitlePage from "@/core/components/TitlePage";
import Svg403 from "@/core/components/svgs/Svg403";
+import {CenterLayout, FullPageLayout, NextLinkComposed} from "@witel/webapp-builder";
const UnAuthorizedComponent = () => {
const t = useTranslations();
diff --git a/src/components/errors/404.jsx b/src/components/errors/404.jsx
index acfd418..15a394c 100644
--- a/src/components/errors/404.jsx
+++ b/src/components/errors/404.jsx
@@ -1,10 +1,8 @@
-import CenterLayout from "@/layouts/CenterLayout";
-import FullPageLayout from "@/layouts/FullPageLayout";
import {Button, Typography} from "@mui/material";
-import {NextLinkComposed} from "@/core/components/LinkRouting";
import {useTranslations} from "next-intl";
import TitlePage from "@/core/components/TitlePage";
import Svg404 from "@/core/components/svgs/Svg404";
+import {CenterLayout, FullPageLayout, NextLinkComposed} from "@witel/webapp-builder";
const NotFoundComponent = () => {
const t = useTranslations();
diff --git a/src/components/errors/500.jsx b/src/components/errors/500.jsx
index 5a19eda..5527a39 100644
--- a/src/components/errors/500.jsx
+++ b/src/components/errors/500.jsx
@@ -1,10 +1,8 @@
-import CenterLayout from "@/layouts/CenterLayout";
-import FullPageLayout from "@/layouts/FullPageLayout";
import {Button, Typography} from "@mui/material";
-import {NextLinkComposed} from "@/core/components/LinkRouting";
import {useTranslations} from "next-intl";
import TitlePage from "@/core/components/TitlePage";
import Svg500 from "@/core/components/svgs/Svg500";
+import {CenterLayout, FullPageLayout, NextLinkComposed} from "@witel/webapp-builder";
const ServerErrorComponent = () => {
const t = useTranslations();
diff --git a/src/components/first/FooterDetails.jsx b/src/components/first/FooterDetails.jsx
index bb8fe01..7c0eb2c 100644
--- a/src/components/first/FooterDetails.jsx
+++ b/src/components/first/FooterDetails.jsx
@@ -1,23 +1,24 @@
import {Box, Button, Container, Grid, Stack, Typography} from "@mui/material";
-import LinkRouting from "@/core/components/LinkRouting";
import {useTranslations} from "next-intl";
+import {LinkRouting} from "@witel/webapp-builder";
const FooterDetails = () => {
const t = useTranslations();
- return(
-
-
-
+ return (
+
+
+
-
+
{
- return(
+ return (
-
+
-
- } />
+
+ }/>
diff --git a/src/components/first/LoanCondition.jsx b/src/components/first/LoanCondition.jsx
index 31da825..da19a17 100644
--- a/src/components/first/LoanCondition.jsx
+++ b/src/components/first/LoanCondition.jsx
@@ -1,43 +1,48 @@
-import {Box, Button, Chip, Container, Grid, Link, Stack, Typography} from "@mui/material";
+import {Box, Button, Chip, Container, Grid, Link, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
import DownloadIcon from '@mui/icons-material/Download';
+
const LoanCondition = () => {
const t = useTranslations();
- return(
+ return (
-
-
- تخصیص وام
-
+
-
+
قوانین دریافت وام
-
-
-
-
-
+
+
+
+
- این یکی از محبوبترین انواع وام در ایران است. دلیل این محبوبیت سرعت آن در پرداخت و سود بسیار پایین آن است.
- تنها یک شرط برای اخذ این وام وجود دارد و آن این است که باید به تازگی ازدواج کرده باشید.
- همچنین فقط یک بار از این وام میتوانید استفاده کنید. یعنی این وام فقط یک بار به هر فرد تعلق میگیرد.
- محل تامین بودجه آن حسابهای قرض الحسنهایست که افراد در بانکها باز میکنند و مرجع اصلی آرائه آن، بانک مرکزی است.
+
+ این وام برای اتوبوس تا سقف 700 میلیون تومان
+ و برای مینی بوس تا سقف 200 میلیون تومان در
+ نظر گرفته شده است. مبلغ نهایی با توجه به امتیاز و روند کارشناسی در ادارات مربوطه مشخص
+ میشود. برای اطلاع از شرایط کامل این وام فایل پیوست را مطالعه بفرمایید.
-
+
- }>
+
- }
- />
- );
- return <>{children}>;
-};
-
-export default WithoutAuthMiddleware;
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx
index 0fc6a4a..848a35c 100644
--- a/src/pages/_app.jsx
+++ b/src/pages/_app.jsx
@@ -1,32 +1,52 @@
-import "&/fontiran.scss";
-import AppLayout from "@/layouts/AppLayout";
-import MuiLayout from "@/layouts/MuiLayout";
-import {LanguageProvider} from "@/lib/app/contexts/language";
-import {LoadingProvider} from "@/lib/app/contexts/loading";
-import {UserProvider} from "@/lib/app/contexts/user";
+import "&/global.scss";
import "moment/locale/fa";
+import {
+ AppLayout,
+ ConfigProvider,
+ LanguageProvider,
+ LoadingProvider,
+ MuiLayout,
+ NetworkProvider,
+ PageMiddleware,
+ ToastProvider,
+ UserProvider
+} from "@witel/webapp-builder";
+import {GET_USER} from "@/core/data/apiRoutes";
+import languageList from "@/core/data/languageList";
import {NextIntlProvider} from "next-intl";
+import themeRtl from "@/core/utils/theme-rtl";
import TitlePage from "@/core/components/TitlePage";
+import GlobalHead from "@/core/components/GlobalHead";
+import Layout from "@/layouts";
const App = ({Component, pageProps}) => {
- return (
- <>
-
-
-
-
+ return (<>
+
+ data}>
+
+
+
{pageProps.messages ? : ''}
-
-
-
+
+
+
+
+
+
+
+
+
+
+
- >
- );
+
+ >);
};
export default App;
diff --git a/src/pages/_document.jsx b/src/pages/_document.jsx
index 474e29b..6aaa82f 100644
--- a/src/pages/_document.jsx
+++ b/src/pages/_document.jsx
@@ -1,7 +1,8 @@
-import {createEmotionCacheRtl} from "@/core/utils/createEmotionCache";
import theme from "@/core/utils/theme";
import createEmotionServer from "@emotion/server/create-instance";
import Document, {Head, Html, Main, NextScript} from "next/document";
+import {createEmotionCacheLtr, createEmotionCacheRtl} from "@witel/webapp-builder";
+import languageList from "@/core/data/languageList";
export default function MyDocument(props) {
const {emotionStyleTags} = props;
@@ -26,10 +27,13 @@ export default function MyDocument(props) {
MyDocument.getInitialProps = async (ctx) => {
const originalRenderPage = ctx.renderPage;
let cache;
- switch (ctx.locale) {
- case "fa":
+ for (const lang of languageList) {
+ if (ctx.locale !== lang.key) continue;
+ if (lang.dir === 'rtl') {
cache = createEmotionCacheRtl();
- break;
+ } else {
+ cache = createEmotionCacheLtr();
+ }
}
const {extractCriticalToChunks} = createEmotionServer(cache);
diff --git a/src/pages/dashboard/index.jsx b/src/pages/dashboard/index.jsx
index 02c438a..b946dbd 100644
--- a/src/pages/dashboard/index.jsx
+++ b/src/pages/dashboard/index.jsx
@@ -1,22 +1,18 @@
import FirstComponent from "@/components/dashboard/first";
-import WithAuthMiddleware from "@/middlewares/WithAuth";
-import {parse} from "next-useragent";
+import {globalServerProps} from "@/core/utils/globalServerProps";
export default function Dashboard() {
return (
-
-
-
+
);
}
export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
+ ...await globalServerProps({req, locale}),
title: "Dashboard.dashboard_page",
- isBot,
+ layout: {name: 'DashboardLayout'}
},
};
}
diff --git a/src/pages/dashboard/navgan/add-request-loan/index.jsx b/src/pages/dashboard/navgan/add-request-loan/index.jsx
index bd8a442..71bcaf0 100644
--- a/src/pages/dashboard/navgan/add-request-loan/index.jsx
+++ b/src/pages/dashboard/navgan/add-request-loan/index.jsx
@@ -1,26 +1,21 @@
-import WithAuthMiddleware from "@/middlewares/WithAuth";
-import {parse} from "next-useragent";
-import UserTypeMiddleware from "@/middlewares/UserType";
import LoanRequestComponent from "@/components/dashboard/navgan/add-request-loan";
+import {globalServerProps} from "@/core/utils/globalServerProps";
+import DeadlineMiddleware from "@/middlewares/Deadline";
-const user_type = 1;
export default function AddLoanRequest() {
return (
-
-
-
-
-
+
+
+
);
}
export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
+ ...await globalServerProps({req, locale}),
title: "LoanRequest.loan_request_page",
- isBot,
+ layout: {name: 'DashboardLayout', permissions: ["can_request_navgan_loan"]}
},
};
}
diff --git a/src/pages/dashboard/navgan/followUp-loan/index.jsx b/src/pages/dashboard/navgan/followUp-loan/index.jsx
index 52f0271..68f4f73 100644
--- a/src/pages/dashboard/navgan/followUp-loan/index.jsx
+++ b/src/pages/dashboard/navgan/followUp-loan/index.jsx
@@ -1,26 +1,18 @@
-import WithAuthMiddleware from "@/middlewares/WithAuth";
-import {parse} from "next-useragent";
-import UserTypeMiddleware from "@/middlewares/UserType";
import LoanFollowUpComponent from "@/components/dashboard/navgan/followUp-loan";
+import {globalServerProps} from "@/core/utils/globalServerProps";
-const user_type = 1;
export default function FollowUpLoan() {
return (
-
-
-
-
-
+
);
}
export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
+ ...await globalServerProps({req, locale}),
title: "LoanRequest.loan_request_page",
- isBot,
+ layout: {name: 'DashboardLayout'}
},
};
}
diff --git a/src/pages/dashboard/refahi/add-request-loan/index.jsx b/src/pages/dashboard/refahi/add-request-loan/index.jsx
deleted file mode 100644
index b4575e9..0000000
--- a/src/pages/dashboard/refahi/add-request-loan/index.jsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import WithAuthMiddleware from "@/middlewares/WithAuth";
-import {parse} from "next-useragent";
-
-const user_type = 2;
-export default function AddLoanRequest() {
- return (
-
- {/**/}
- {/* */}
- {/**/}
-
- );
-}
-
-export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- title: "LoanRequest.loan_request_page",
- isBot,
- },
- };
-}
diff --git a/src/pages/dashboard/refahi/edit-request-loan/[id].jsx b/src/pages/dashboard/refahi/edit-request-loan/[id].jsx
deleted file mode 100644
index f6b72d5..0000000
--- a/src/pages/dashboard/refahi/edit-request-loan/[id].jsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import WithAuthMiddleware from "@/middlewares/WithAuth";
-import {parse} from "next-useragent";
-
-const user_type = 2;
-export default function EditLoanRequest() {
- return (
-
- {/**/}
- {/* */}
- {/**/}
-
- );
-}
-
-export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- title: "EditLoanRequest.edit_loan_request_page",
- isBot,
- },
- };
-}
diff --git a/src/pages/dashboard/refahi/followUp-loan/index.jsx b/src/pages/dashboard/refahi/followUp-loan/index.jsx
deleted file mode 100644
index f679299..0000000
--- a/src/pages/dashboard/refahi/followUp-loan/index.jsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import WithAuthMiddleware from "@/middlewares/WithAuth";
-import {parse} from "next-useragent";
-
-const user_type = 2;
-export default function FollowUpLoan() {
- return (
-
- {/**/}
- {/* */}
- {/**/}
-
- );
-}
-
-export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- title: "LoanFollowUp.loan_follow_up_page",
- isBot,
- },
- };
-}
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index 2e146c6..6e47ba2 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -1,5 +1,5 @@
import FirstComponent from "@/components/first";
-import {parse} from "next-useragent";
+import {globalServerProps} from "@/core/utils/globalServerProps";
export default function Home() {
return (
@@ -10,12 +10,10 @@ export default function Home() {
}
export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
+ ...await globalServerProps({req, locale}),
title: "first_page",
- isBot,
},
};
}
diff --git a/src/pages/login.jsx b/src/pages/login.jsx
index 5cac2bc..6f7b288 100644
--- a/src/pages/login.jsx
+++ b/src/pages/login.jsx
@@ -1,22 +1,20 @@
import LoginComponent from "@/components/login";
-import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
-import {parse} from "next-useragent";
+import {WithoutAuthMiddleware} from "@witel/webapp-builder";
+import {globalServerProps} from "@/core/utils/globalServerProps";
export default function Login() {
return (
-
+
);
}
export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
+ ...await globalServerProps({req, locale}),
title: "Titles.title_login_page",
- isBot,
},
};
}
diff --git a/src/pages/register/index.jsx b/src/pages/register/index.jsx
deleted file mode 100644
index 6d8d4d6..0000000
--- a/src/pages/register/index.jsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import RegisterComponent from "@/components/register";
-import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
-import {parse} from "next-useragent";
-
-export default function Register() {
- return (
-
-
-
- );
-}
-
-export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- title: "Titles.title_register_page",
- isBot,
- },
- };
-}
diff --git a/src/pages/register/navy/index.jsx b/src/pages/register/navy/index.jsx
index 2272d57..e69de29 100644
--- a/src/pages/register/navy/index.jsx
+++ b/src/pages/register/navy/index.jsx
@@ -1,22 +0,0 @@
-import NavyComponent from "@/components/register/navy";
-import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
-import {parse} from "next-useragent";
-
-export default function Register() {
- return (
-
-
-
- );
-}
-
-export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- title: "Titles.title_register_navy_page",
- isBot,
- },
- };
-}
diff --git a/src/pages/register/welfare-services/index.jsx b/src/pages/register/welfare-services/index.jsx
deleted file mode 100644
index ce05a4f..0000000
--- a/src/pages/register/welfare-services/index.jsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
-import {parse} from "next-useragent";
-
-export default function Register() {
- return (
-
- {/**/}
-
- );
-}
-
-export async function getServerSideProps({req, locale}) {
- const {isBot} = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- title: "Titles.title_register_welfare_services_page",
- isBot,
- },
- };
-}