diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 1b9c3c5..2cc54a1 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -48,6 +48,7 @@ "machinery-expert": "کارتابل کارشناسی", "passenger-boss": "کارتابل کارگروه", "transportation-assistant": "بررسی وام های تبصره 18", + "bank-management": "کارتابل نظارت بانک", "navgan-province-manager": "بررسی وام های تبصره 18", "refahi-province-manager": "مدیر کل استانی", "refahi-loan-management": "مدیریت وام", @@ -109,6 +110,7 @@ "dashboard_page": "داشبورد", "reports": "گزارشات", "passenger_boss_page": "کارتابل کارگروه", + "bank_management_page": "کارتابل نظارت بانک", "transportation_assistance": "بررسی وام های تبصره 18", "change_password": "تغییر رمز عبور", "province_manager_page": "بررسی وام های تبصره 18", @@ -427,6 +429,19 @@ "button-cancel": "بستن", "button-confirm": "لغو رزرو" }, + "BankManagement": { + "name": "نام", + "id": "کد یکتا", + "national_serial_number": "سریال پشت کارت ملی", + "birthday": "تاریخ تولد", + "branch_name": "نام شعبه", + "bank_state": "وضعیت بانک", + "state_name": "وضعیت درخواست", + "national_id": "کد ملی", + "proposed_amount": "مبلغ پیشنهادی", + "bank_loan_amount": "مبلغ وام بانک", + "navgan_id": "کد ناوگان" + }, "UserManagement": { "name": "نام", "id": "کد یکتا", @@ -493,10 +508,12 @@ "description": "توضیحات خود را وارد نمائید", "optional": " (اختیاری)", "description_error": "وارد کردن توضیحات الزامی است!", - "choose_file" : "انتخاب فایل" + "choose_file": "انتخاب فایل" }, "UpdateDialog": { "update": "ویرایش", + "resend": "بروزرسانی اطلاعات", + "typography": "آیا از بروزرسانی این مورد اطمینان دارید ؟", "description": "توضیحات خود را وارد نمائید", "description_error": "وارد کردن توضیحات الزامی است!", "next-state-id": "وضعیت", @@ -524,6 +541,7 @@ "type_id": "نوع کاربر", "navgan_id": "کد ناوگان", "button-update": "ویرایش", + "button-resend": "بروزرسانی اطلاعات", "loading_permissions_list": "درحال دریافت لیست دسترسی ها" }, "UploadSystem": { diff --git a/src/components/dashboard/bank-management/Form/Update.jsx b/src/components/dashboard/bank-management/Form/Update.jsx new file mode 100644 index 0000000..659ba1b --- /dev/null +++ b/src/components/dashboard/bank-management/Form/Update.jsx @@ -0,0 +1,68 @@ +import {useTranslations} from "next-intl"; +import {useState} from "react"; +import { + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + IconButton, + Tooltip, + Typography +} from "@mui/material"; +import RefreshIcon from '@mui/icons-material/Refresh'; +import useRequest from "@/lib/app/hooks/useRequest"; +import useNotification from "@/lib/app/hooks/useNotification"; +import {RESEND_BANK_STATEMENT} from "@/core/data/apiRoutes"; + +const UpdateForm = ({rowId, mutate}) => { + const t = useTranslations(); + const [openConfirmDialog, setOpenConfirmDialog] = useState(false); + const [isSubmitting, setIsSubmitting] = useState(false) + const requestServer = useRequest({auth: true}) + const {update_notification} = useNotification() + const handleSubmit = () => { + setIsSubmitting(true) + requestServer(`${RESEND_BANK_STATEMENT}/${rowId}`, 'post').then((response) => { + setOpenConfirmDialog(false) + mutate() + update_notification() + }).catch(() => { + }).finally(() => { + setIsSubmitting(false) + }); + } + + return ( + <> + + { + setOpenConfirmDialog(true) + }} + > + + + + + {t("UpdateDialog.resend")} + + {t("UpdateDialog.typography")} + + + + + + + + ); +}; +export default UpdateForm; \ No newline at end of file diff --git a/src/components/dashboard/bank-management/TableRowActions.jsx b/src/components/dashboard/bank-management/TableRowActions.jsx new file mode 100644 index 0000000..18d5e31 --- /dev/null +++ b/src/components/dashboard/bank-management/TableRowActions.jsx @@ -0,0 +1,15 @@ +import {Box} from "@mui/material"; +import UpdateForm from "@/components/dashboard/bank-management/Form/Update"; + +const TableRow = ({row, mutate}) => { + return ( + + + + ); +}; + +export default TableRow; diff --git a/src/components/dashboard/bank-management/index.jsx b/src/components/dashboard/bank-management/index.jsx new file mode 100644 index 0000000..f89ee8a --- /dev/null +++ b/src/components/dashboard/bank-management/index.jsx @@ -0,0 +1,207 @@ +import {Box, Typography} from "@mui/material"; +import {useMemo} from "react"; +import {useTranslations} from "next-intl"; +import moment from "jalali-moment"; +import DataTable from "@/core/components/DataTable"; +import TableRowActions from "@/components/dashboard/bank-management/TableRowActions"; +import {GET_BANK_STATEMENT} from "@/core/data/apiRoutes"; + +function DashboardBankManagementComponent() { + const t = useTranslations(); + const columns = useMemo( + () => [ + { + accessorFn: (row) => row.id, + id: "id", + header: t("BankManagement.id"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.navgan_id, + id: "navgan_id", + header: t("BankManagement.navgan_id"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.name, + id: "name", + header: t("BankManagement.name"), + enableColumnFilter: true, + datatype: "text", + filterFn: "contains", + columnFilterModeOptions: ["contains", "equals", "notEquals"], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.national_id, + id: "national_id", + header: t("BankManagement.national_id"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.national_serial_number, + id: "national_serial_number", + header: t("BankManagement.national_serial_number"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.birthday, + id: "birthday", + header: t("BankManagement.birthday"), + enableColumnFilter: true, + datatype: "text", + filterFn: "contains", + columnFilterModeOptions: ["contains", "equals", "notEquals"], + Cell: ({renderedCellValue}) => ( + {moment(renderedCellValue).locale("fa").format("yyyy/MM/DD")} + ), + }, + { + accessorFn: (row) => row.proposed_amount, + id: "proposed_amount", + header: t("BankManagement.proposed_amount"), + enableColumnFilter: true, + datatype: "text", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.bank_loan_amount, + id: "bank_loan_amount", + header: t("BankManagement.bank_loan_amount"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.branch_name, + id: "branch_name", + header: t("BankManagement.branch_name"), + enableColumnFilter: true, + datatype: "text", + filterFn: "contains", + columnFilterModeOptions: ["contains", "equals", "notEquals"], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.bank_state, + id: "bank_state", + header: t("BankManagement.bank_state"), + enableColumnFilter: true, + datatype: "text", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains" + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + } + ], + [] + ); + return ( + + + + ); +} + +export default DashboardBankManagementComponent; diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js index beb73fd..8c5e197 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -252,6 +252,10 @@ export const ADD_ADMIN_SETTING = BASE_URL + "/dashboard/settings/store" export const UPDATE_ADMIN_SETTING = BASE_URL + "/dashboard/settings/update" export const DELETE_ADMIN_SETTING = BASE_URL + "/dashboard/settings/delete" +//bank statement +export const GET_BANK_STATEMENT = BASE_URL + "/dashboard/bank_referred_loans" +export const RESEND_BANK_STATEMENT = BASE_URL + "/dashboard/bank_referred_loans/resend" + // loan statistics export const GET_LOAN_STATISTICS = BASE_URL + "/dashboard/reports/navgan/statistics" diff --git a/src/core/data/sidebarMenu.jsx b/src/core/data/sidebarMenu.jsx index 28b5a6d..589a04f 100644 --- a/src/core/data/sidebarMenu.jsx +++ b/src/core/data/sidebarMenu.jsx @@ -17,6 +17,7 @@ import AssessmentIcon from '@mui/icons-material/Assessment'; import SecurityIcon from '@mui/icons-material/Security'; import SettingsIcon from '@mui/icons-material/Settings'; import RepartitionIcon from '@mui/icons-material/Repartition'; +import AccountBalanceIcon from '@mui/icons-material/AccountBalance'; const sidebarMenu = [ [ @@ -108,6 +109,16 @@ const sidebarMenu = [ selected: false, permissions: ["manage_province_affairs_navgan"], }, + { + key: "sidebar.bank-management", + secondary: "secondary.navgan-province-manager", + name: "management", + type: "page", + route: "/dashboard/bank-management", + icon: , + selected: false, + permissions: ["manage_bank_referred_loans"], + }, { key: "sidebar.navgan-loan-management", secondary: "secondary.navgan-loan-management", diff --git a/src/pages/dashboard/bank-management/index.jsx b/src/pages/dashboard/bank-management/index.jsx new file mode 100644 index 0000000..2a92155 --- /dev/null +++ b/src/pages/dashboard/bank-management/index.jsx @@ -0,0 +1,21 @@ +import {parse} from "next-useragent"; +import DashboardBankManagementComponent from "@/components/dashboard/bank-management"; + +export default function BankManagement() { + 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: "Dashboard.bank_management_page", + isBot, + locale, + layout: {name: 'DashboardLayout', props: {permissions: ["manage_bank_referred_loans"]}} + }, + }; +}