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",