diff --git a/.env.local.example b/.env.local.example
index f3a12ac..b3e4596 100644
--- a/.env.local.example
+++ b/.env.local.example
@@ -6,8 +6,8 @@ NEXT_PUBLIC_DEFAULT_DIRECTION = "rtl"
NEXT_PUBLIC_PRIMARY_MAIN = "#084070"
NEXT_PUBLIC_SECONDARY_MAIN = "#FF4E00"
-NEXT_PUBLIC_FACILITY_BANK = 33
-NEXT_PUBLIC_FACILITY_PERSON = 10
+NEXT_PUBLIC_FACILITY_BANK = 66
+NEXT_PUBLIC_FACILITY_PERSON = 20
NEXT_PUBLIC_BUS_AMOUNT=10000
NEXT_PUBLIC_MINIBUS_AMOUNT=4000
diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json
index 59b4172..d037a5c 100644
--- a/public/locales/fa/app.json
+++ b/public/locales/fa/app.json
@@ -195,6 +195,7 @@
"NavganProvinceManager": {
"name": "نام",
"id": "کد یکتا",
+ "interest_rate": "نرخ بهره وام(درصد)",
"physical_progress": "درصد پیشرفت فیزیکی",
"repayment_period": "دوره باز پرداخت",
"committed_employment": "اشتغال ایجاد شده",
@@ -221,7 +222,7 @@
"navgan_id": "کد ناوگان",
"vehicle_type": "نوع ماشین",
"state_name": "وضعیت درخواست",
- "revert": "ارجاع به معاون حمل و نقل",
+ "revert": "بازگشت به معاون حمل و نقل",
"confirm": "تایید نهایی و ارجاع به بانک",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 5Mb باشد",
"upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
@@ -258,7 +259,7 @@
"navgan_id": "کد ناوگان",
"vehicle_type": "نوع ماشین",
"state_name": "وضعیت درخواست",
- "confirm": "تایید و ارجاع به معاون حمل و نقل",
+ "confirm": "ارجاع به معاون حمل و نقل",
"upload_file": "فایل خود را بارگذاری کنید(اختیاری)",
"upload_expert_img": "فایل گزارش کارشناسی را بارگذاری کنید",
"upload_file_required": "وارد کردن گزارش کارشناسی الزامیست",
@@ -410,6 +411,7 @@
"refer_reason": "علت ارجاع",
"plate_number": "پلاک",
"id": "کد یکتا",
+ "interest_rate": "نرخ بهره وام(درصد)",
"facility_bank": "سهم بانک",
"facility_gov": "سهم دولت",
"facility_person": "سهم متقاضی",
@@ -434,8 +436,8 @@
"navgan_id": "کد ناوگان",
"vehicle_type": "نوع ماشین",
"state_name": "وضعیت درخواست",
- "confirm": "تایید و ارجاع به مدیر کل",
- "revert": "ارجاع به کارتابل کارگروه",
+ "confirm": "ارجاع به مدیر کل",
+ "revert": "بازگشت به کارتابل کارگروه",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 5Mb باشد",
"upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
"excel_report": "گزارش اکسل",
@@ -545,10 +547,12 @@
"updated_at": "تاریخ بروزرسانی"
},
"ConfirmDialog": {
- "confirm": "تایید",
+ "confirm": "ارجاع",
"month": "(ماه)",
+ "confirm_reason": "علت تایید",
"context": "آیا از تایید این آیتم اطمینان دارید؟",
"button-cancel": "بستن",
+ "loan_interest": "نرخ بهره وام",
"button-confirm": "ارجاع",
"facility_bank": "تسهیلات سهم بانک",
"facility_person": "تسهیلات سهم متقاضی",
@@ -558,6 +562,9 @@
"existing_employment": "تعداد اشتغال موجود",
"physical_progress": "درصد پیشرفت فیزیکی",
"interest_rate": "نرخ بهره",
+ "interest_rate_percentage": "درصد",
+ "confirmation_reason": "علت تایید کارگروه",
+ "no_info": "اطلاعاتی یافت نشد!!!",
"description_error": "وارد کردن توضیحات الزامی است!",
"optional": " (اختیاری)",
"unit": " (میلیون ریال)",
@@ -572,6 +579,7 @@
"approved_amount_error": "وارد کردن مبلغ مصوب الزامیست",
"facility_bank_error": "وارد کردن تسهیلات سهم بانک الزامیست",
"facility_gov_error": "وارد کردن تسهیلات سهم دولت الزامیست",
+ "confirm_reason_error": "وارد کردن علت تایید الزامیست",
"committed_employment_error": "وارد کردن تعداد اشتغال تعهد شده الزامیست",
"history_facilities_error": "وارد کردن سابقه استفاده از تسهیلات تکلیفی الزامیست",
"existing_employment_error": "وارد کردن تعداد اشتغال موجود الزامیست",
@@ -588,12 +596,14 @@
"approved_amount_number": "مبلغ مصوب باید عدد باشد",
"facility_bank_number": "تسهیلات سهم بانک باید عدد باشد",
"interest_rate_number": "نرخ بهره باید عدد باشد",
+ "loan_interest_number": "نرخ بهره باید عدد باشد",
"facility_gov_number": "تسهیلات سهم دولت باید عدد باشد",
"committed_employment_number": "تعداد سابقه استفاده از تسهیلات تکلیفی باید عدد باشد",
"history_facilities_number": "تعداد اشتغال تعهد شده باید عدد باشد",
"existing_employment_number": "تعداد اشتغال موجود باید عدد باشد",
"sakht_period_positive": "دوره ساخت باید مثبت باشد",
"interest_rate_positive": "نرخ بهره باید مثبت باشد",
+ "loan_interest_positive": "نرخ بهره باید مثبت باشد",
"tanafos_period_positive": "دوره تنفس باید مثبت باشد",
"sakht_period_number": "دوره ساخت باید عدد باشد",
"repayment_period_number": "دوره باز پرداخت باید عدد باشد",
@@ -614,6 +624,7 @@
"repayment_period_error": "وارد کردن دوره باز پرداخت الزامیست",
"participation_period_error": "وارد کردن دوره مشارکت الزامیست",
"interest_rate_error": "وارد کردن نرخ بهره الزامیست",
+ "loan_interest_error": "وارد کردن نرخ بهره وام الزامیست",
"proposed_amount": "مبلغ پیشنهادی",
"proposed_amount_positive": "مقدار پیشنهادی باید مثبت باشد",
"proposed_amount_number": "مقدار پیشنهادی باید عدد باشد"
@@ -646,10 +657,10 @@
},
"RevertDialog": {
"typography": "آیا میخواهید این درخواست را رد کنید ؟",
- "revert": "ارجاع",
+ "revert": "بازگشت",
"context": "آیا از عدم تایید این آیتم اطمینان دارید؟",
"button-cancel": "بستن",
- "button-revert": "ارجاع",
+ "button-revert": "بازگشت",
"description": "توضیحات خود را وارد نمائید",
"description_error": "وارد کردن توضیحات الزامی است!"
},
@@ -794,7 +805,7 @@
"phone_number": "شماره تلفن",
"requested_facilities" : "تسهیلات مورد تقاضا",
"physical_progress" : "درصد پیشرفت فیزیکی",
- "investment" : "سرمایه گذاری انجام شده",
+ "investment" : "ارزش ناوگان",
"no_info" : "اطلاعاتی موجود نیست !!!",
"is_legal_person": "نوع شخص",
"legal_person" : "شخص حقوقی",
@@ -837,8 +848,8 @@
"button-cancel": "بستن"
},
"ReferDialog": {
- "refer-passenger-boss": "ارجاع به کارگروه",
- "refer-user": "ارجاع به کاربر",
+ "refer-passenger-boss": "بازگشت به کارگروه",
+ "refer-user": "بازگشت به کاربر",
"refer-confirmation": "آیا از ارجاع این مورد اطمینان دارید ؟",
"button-cancel": "انصراف",
"typography": "آیا از ارجاع این مورد اطمینان دارید ؟",
diff --git a/src/components/dashboard/loan-history/Form/HistoryForm/TableContent.jsx b/src/components/dashboard/loan-history/Form/HistoryForm/TableContent.jsx
index c794422..3509453 100644
--- a/src/components/dashboard/loan-history/Form/HistoryForm/TableContent.jsx
+++ b/src/components/dashboard/loan-history/Form/HistoryForm/TableContent.jsx
@@ -105,16 +105,27 @@ const TableContent = ({ rowId }) => {
"&:last-child td, &:last-child th": { border: 0 },
}}
>
- {latest_history.expert.name}
+
+ {" "}
+ {latest_history?.expert?.name ? latest_history.expert.name : null}
+
{moment(latest_history.created_at)
.locale("fa")
.format("HH:mm | yyyy/MM/DD")}
- {latest_history.expert.position}
- {latest_history.previous_state_name}
- {action_name[latest_history.action]}
- {latest_history.expert_description}
+
+ {latest_history?.expert?.position
+ ? latest_history.expert.position
+ : null}
+
+
+ {latest_history?.previous_state_name
+ ? latest_history.previous_state_name
+ : null}
+
+ {action_name[latest_history?.action]}
+ {latest_history?.expert_description}
{latest_history.attachments.map((attachment, index) => (
diff --git a/src/components/dashboard/navgan-province-manager/index.jsx b/src/components/dashboard/navgan-province-manager/index.jsx
index 2fa31be..b58e1f9 100644
--- a/src/components/dashboard/navgan-province-manager/index.jsx
+++ b/src/components/dashboard/navgan-province-manager/index.jsx
@@ -267,6 +267,16 @@ function DashboardNavganProvinceManagerComponent() {
columnFilterModeOptions: ["equals"],
Cell: ({ renderedCellValue }) => {renderedCellValue},
},
+ {
+ accessorFn: (row) => row.interest_rate,
+ id: "interest_rate",
+ header: t("NavganProvinceManager.interest_rate"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: ["equals"],
+ Cell: ({ renderedCellValue }) => {renderedCellValue},
+ },
{
accessorFn: (row) => row.committed_employment,
id: "committed_employment",
diff --git a/src/components/dashboard/passenger-boss/Form/ConfirmForm/ConfirmContent.jsx b/src/components/dashboard/passenger-boss/Form/ConfirmForm/ConfirmContent.jsx
index 0cd0f4b..3e80fa1 100644
--- a/src/components/dashboard/passenger-boss/Form/ConfirmForm/ConfirmContent.jsx
+++ b/src/components/dashboard/passenger-boss/Form/ConfirmForm/ConfirmContent.jsx
@@ -54,6 +54,7 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
.test("is-number", `${t("ConfirmDialog.repayment_period_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.repayment_period_positive")}`, (value) => value >= 0)
.required(t("ConfirmDialog.repayment_period_error")),
+ confirm_reason: Yup.string().required(t("ConfirmDialog.confirm_reason_error")),
committed_employment: Yup.mixed()
.test("is-number", `${t("ConfirmDialog.committed_employment_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.committed_employment_positive")}`, (value) => value >= 0)
@@ -62,6 +63,10 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
.test("is-number", `${t("ConfirmDialog.existing_employment_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.existing_employment_positive")}`, (value) => value >= 0)
.required(t("ConfirmDialog.existing_employment_error")),
+ loan_interest: Yup.mixed()
+ .test("is-number", `${t("ConfirmDialog.loan_interest_number")}`, (value) => !isNaN(value))
+ .test("positive", `${t("ConfirmDialog.loan_interest_positive")}`, (value) => value >= 0)
+ .required(t("ConfirmDialog.loan_interest_error")),
sakht_period: Yup.mixed()
.test("is-number", `${t("ConfirmDialog.sakht_period_number")}`, (value) => !isNaN(value))
.test("positive", `${t("ConfirmDialog.sakht_period_positive")}`, (value) => value > 0)
@@ -83,7 +88,7 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
const formik = useFormik({
initialValues: {
- description: row.original.description || "",
+ confirm_reason: row.original.confirmation_reason || "",
approved_amount: row.original.approved_amount / 1000000 || "",
facility_bank: row.original.facility_bank / 1000000 || "",
facility_gov: row.original.facility_gov / 1000000 || "",
@@ -94,6 +99,7 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
sakht_period: row.original.sakht_period || "",
tanafos_period: row.original.tanafos_period || "",
existing_employment: row.original.existing_employment || "",
+ loan_interest: row.original.interest_rate || "",
expert_img: null,
},
validationSchema,
@@ -106,10 +112,10 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
formData.append("repayment_period", values.repayment_period);
formData.append("committed_employment", values.committed_employment);
formData.append("existing_employment", values.existing_employment);
+ formData.append("interest_rate", values.loan_interest);
formData.append("sakht_period", values.sakht_period);
formData.append("tanafos_period", values.tanafos_period);
-
- if (values.description != "") formData.append("expert_description", values.description);
+ formData.append("confirmation_reason", values.confirm_reason);
if (values.physical_progress != "") formData.append("physical_progress", values.physical_progress);
if (values.expert_img != null) {
const attachments = [
@@ -179,24 +185,6 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, vehicle_type, row
<>
-
-
- {t("ConfirmDialog.description")}
- {t("ConfirmDialog.optional")}
- >
- }
- value={formik.values.description}
- onChange={formik.handleChange}
- fullWidth
- variant="outlined"
- sx={{ mt: 1 }}
- />
-
+
+ {
+ formik.setFieldValue("loan_interest", event.target.value);
+ }}
+ setFieldTouched={formik.setFieldTouched}
+ error={formik.touched.loan_interest && Boolean(formik.errors.loan_interest)}
+ helperText={formik.touched.loan_interest && formik.errors.loan_interest}
+ onBlur={formik.handleBlur("loan_interest")}
+ />
+
+
+
+
{t("PassengerBoss.upload_expert_img")}
{
+const ConfirmContent = ({ rowId, row, mutate, setOpenConfirmDialog, handleSizeChangeClick }) => {
const t = useTranslations();
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -256,6 +257,16 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog, handleSizeChangeC
headerTitle={t("ConfirmDialog.repayment_period")}
unitTitle={t("ConfirmDialog.repayment_period_month")}
/>
+
+
+ {t("ConfirmDialog.confirmation_reason")}
+
+
+ {row.original.confirmation_reason
+ ? row.original.confirmation_reason
+ : t("ConfirmDialog.no_info")}
+
+
{renderCustomAccordions()}
>
)}
diff --git a/src/components/dashboard/transportation-assistance/Form/ConfirmForm/index.jsx b/src/components/dashboard/transportation-assistance/Form/ConfirmForm/index.jsx
index 775a884..e0ec294 100644
--- a/src/components/dashboard/transportation-assistance/Form/ConfirmForm/index.jsx
+++ b/src/components/dashboard/transportation-assistance/Form/ConfirmForm/index.jsx
@@ -3,7 +3,7 @@ import { useTranslations } from "next-intl";
import { useState, useEffect } from "react";
import ConfirmContent from "./ConfirmContent";
import CallMadeIcon from "@mui/icons-material/CallMade";
-const Confirm = ({ rowId, mutate }) => {
+const Confirm = ({ rowId, mutate, row }) => {
const t = useTranslations();
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
const [dialogSize, setDialogSize] = useState("sm");
@@ -45,6 +45,7 @@ const Confirm = ({ rowId, mutate }) => {
diff --git a/src/components/dashboard/transportation-assistance/TableRowActions.jsx b/src/components/dashboard/transportation-assistance/TableRowActions.jsx
index 2ece96d..4e8e68d 100644
--- a/src/components/dashboard/transportation-assistance/TableRowActions.jsx
+++ b/src/components/dashboard/transportation-assistance/TableRowActions.jsx
@@ -10,7 +10,7 @@ const TableRow = ({ row, mutate }) => {
{row.original.latest_history?.action === "refer" ? : null}
-
+
diff --git a/src/components/dashboard/transportation-assistance/index.jsx b/src/components/dashboard/transportation-assistance/index.jsx
index c1e0899..5f468bd 100644
--- a/src/components/dashboard/transportation-assistance/index.jsx
+++ b/src/components/dashboard/transportation-assistance/index.jsx
@@ -265,6 +265,16 @@ function DashboardTransportationAssistanceComponent() {
columnFilterModeOptions: ["equals"],
Cell: ({ renderedCellValue }) => {renderedCellValue},
},
+ {
+ accessorFn: (row) => row.interest_rate,
+ id: "interest_rate",
+ header: t("TransportationAssistance.interest_rate"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: ["equals"],
+ Cell: ({ renderedCellValue }) => {renderedCellValue},
+ },
{
accessorFn: (row) => row.committed_employment,
id: "committed_employment",