diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json
index 8de5762..b9b8070 100644
--- a/public/locales/fa/app.json
+++ b/public/locales/fa/app.json
@@ -170,7 +170,8 @@
"state_name": "وضعیت درخواست",
"confirm": "ارجاع به کارشناس ماشین آلات",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 2Mb باشد",
- "upload_file_format": "فرمت قابل قبول : png,jpg,pdf"
+ "upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
+ "excel_report": "گزارش اکسل"
},
"CommercialChief": {
"name": "نام",
@@ -195,7 +196,8 @@
"state_name": "وضعیت درخواست",
"confirm": "تایید نهایی و ارجاع به بانک",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 2Mb باشد",
- "upload_file_format": "فرمت قابل قبول : png,jpg,pdf"
+ "upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
+ "excel_report": "گزارش اکسل"
},
"PassengerBoss": {
"name": "نام",
@@ -213,7 +215,8 @@
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 2Mb باشد",
"upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
"print_final_credit_amount": "چاپ صورت جلسه تعیین مبلغ نهایی",
- "max_amount": "حداکثر مبلغ تصویب شده {value} میلیون ریال می باشد"
+ "max_amount": "حداکثر مبلغ تصویب شده {value} میلیون ریال می باشد",
+ "excel_report": "گزارش اکسل"
},
"RefahiProvinceManager": {
"name": "نام",
@@ -284,7 +287,8 @@
"state_name": "وضعیت درخواست",
"confirm": "ارجاع به مدیر کل استانی",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 2Mb باشد",
- "upload_file_format": "فرمت قابل قبول : png,jpg,pdf"
+ "upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
+ "excel_report": "گزارش اکسل"
},
"InspectorExpert": {
"name": "نام",
@@ -313,7 +317,8 @@
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 2Mb باشد",
"upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
"print_report": "چاپ گزارش کارشناسی ماشین آلات",
- "max_amount": "حداکثر مبلغ پیشنهادی {value} میلیون ریال می باشد"
+ "max_amount": "حداکثر مبلغ پیشنهادی {value} میلیون ریال می باشد",
+ "excel_report": "گزارش اکسل"
},
"UserManagement": {
"name": "نام",
diff --git a/src/components/dashboard/machinary-office/Buttons/printExcel.jsx b/src/components/dashboard/machinary-office/Buttons/printExcel.jsx
new file mode 100644
index 0000000..cba05a0
--- /dev/null
+++ b/src/components/dashboard/machinary-office/Buttons/printExcel.jsx
@@ -0,0 +1,68 @@
+import {Button, CircularProgress} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useMemo, useState} from "react";
+import useRequest from "@/lib/app/hooks/useRequest";
+import {EXPORT_MACHINARY_OFFICE} from "@/core/data/apiRoutes";
+import moment from "jalali-moment";
+import FileSaver from 'file-saver';
+import DescriptionIcon from '@mui/icons-material/Description';
+
+const PrintExcel = ({table}) => {
+ const t = useTranslations();
+ const [loading, setLoading] = useState(false)
+ const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}})
+ const {columnFilters, columnFilterFns, sorting} = table.getState()
+ const columns = table.getAllColumns()
+
+ const filterParams = useMemo(() => {
+ const params = new URLSearchParams();
+ const filters = columnFilters.map((filter) => {
+ let datatype;
+ for (const i in columns) {
+ if (columns[i].id == filter.id) {
+ datatype = columns[i].columnDef.datatype;
+ }
+ }
+ return {
+ ...filter, fn: columnFilterFns[filter.id], datatype: datatype,
+ };
+ });
+ params.set("start", '0');
+ params.set("filters", JSON.stringify(filters ?? []));
+ params.set("sorting", JSON.stringify(sorting ?? []));
+ return params;
+ }, [columnFilters, columnFilterFns, sorting, columns,]);
+
+
+ const clickHandler = () => {
+ setLoading(true)
+ requestServer(`${EXPORT_MACHINARY_OFFICE}?${filterParams}`, 'get', {
+ auth: true,
+ notification: false,
+ requestOptions: {responseType: 'blob'}
+ }).then((response) => {
+ const filename = `گزارش ماشین آلات تاریخ_${moment().format('jYYYY_jMM_jDD')}.xlsx`;
+ FileSaver.saveAs(response.data, filename);
+ }).catch(() => {
+ }).finally(() => {
+ setLoading(false)
+ })
+ }
+
+
+ return (
+ : }
+ onClick={clickHandler}
+ >
+ {t("MachinaryOffice.excel_report")}
+
+ )
+}
+
+export default PrintExcel
\ No newline at end of file
diff --git a/src/components/dashboard/machinary-office/TableToolbar.jsx b/src/components/dashboard/machinary-office/TableToolbar.jsx
index 9704f95..cdf1562 100644
--- a/src/components/dashboard/machinary-office/TableToolbar.jsx
+++ b/src/components/dashboard/machinary-office/TableToolbar.jsx
@@ -1,10 +1,12 @@
import {Stack} from "@mui/material";
import PrintReport from "@/components/dashboard/machinary-office/Buttons/printReport";
+import PrintExcel from "@/components/dashboard/machinary-office/Buttons/printExcel";
-const TableToolbar = () => {
+const TableToolbar = ({table}) => {
return (
+
)
}
diff --git a/src/components/dashboard/navgan-province-manager/Buttons/printExcel.jsx b/src/components/dashboard/navgan-province-manager/Buttons/printExcel.jsx
new file mode 100644
index 0000000..6c0aac3
--- /dev/null
+++ b/src/components/dashboard/navgan-province-manager/Buttons/printExcel.jsx
@@ -0,0 +1,68 @@
+import {Button, CircularProgress} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useMemo, useState} from "react";
+import useRequest from "@/lib/app/hooks/useRequest";
+import {EXPORT_NAVGAN_PROVINCE_MANAGER} from "@/core/data/apiRoutes";
+import moment from "jalali-moment";
+import FileSaver from 'file-saver';
+import DescriptionIcon from '@mui/icons-material/Description';
+
+const PrintExcel = ({table}) => {
+ const t = useTranslations();
+ const [loading, setLoading] = useState(false)
+ const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}})
+ const {columnFilters, columnFilterFns, sorting} = table.getState()
+ const columns = table.getAllColumns()
+
+ const filterParams = useMemo(() => {
+ const params = new URLSearchParams();
+ const filters = columnFilters.map((filter) => {
+ let datatype;
+ for (const i in columns) {
+ if (columns[i].id == filter.id) {
+ datatype = columns[i].columnDef.datatype;
+ }
+ }
+ return {
+ ...filter, fn: columnFilterFns[filter.id], datatype: datatype,
+ };
+ });
+ params.set("start", '0');
+ params.set("filters", JSON.stringify(filters ?? []));
+ params.set("sorting", JSON.stringify(sorting ?? []));
+ return params;
+ }, [columnFilters, columnFilterFns, sorting, columns,]);
+
+
+ const clickHandler = () => {
+ setLoading(true)
+ requestServer(`${EXPORT_NAVGAN_PROVINCE_MANAGER}?${filterParams}`, 'get', {
+ auth: true,
+ notification: false,
+ requestOptions: {responseType: 'blob'}
+ }).then((response) => {
+ const filename = `گزارش مدیر کل استانی تاریخ_${moment().format('jYYYY_jMM_jDD')}.xlsx`;
+ FileSaver.saveAs(response.data, filename);
+ }).catch(() => {
+ }).finally(() => {
+ setLoading(false)
+ })
+ }
+
+
+ return (
+ : }
+ onClick={clickHandler}
+ >
+ {t("NavganProvinceManager.excel_report")}
+
+ )
+}
+
+export default PrintExcel
\ No newline at end of file
diff --git a/src/components/dashboard/navgan-province-manager/TableToolbar.jsx b/src/components/dashboard/navgan-province-manager/TableToolbar.jsx
new file mode 100644
index 0000000..44a75d9
--- /dev/null
+++ b/src/components/dashboard/navgan-province-manager/TableToolbar.jsx
@@ -0,0 +1,13 @@
+import {Stack} from "@mui/material";
+import PrintExcel from "@/components/dashboard/navgan-province-manager/Buttons/printExcel";
+
+const TableToolbar = ({table}) => {
+
+ return (
+
+
+
+ )
+}
+
+export default TableToolbar
\ No newline at end of file
diff --git a/src/components/dashboard/navgan-province-manager/index.jsx b/src/components/dashboard/navgan-province-manager/index.jsx
index e0e6a39..0397fc5 100644
--- a/src/components/dashboard/navgan-province-manager/index.jsx
+++ b/src/components/dashboard/navgan-province-manager/index.jsx
@@ -6,6 +6,7 @@ import TableRowActions from "./TableRowActions";
import moment from "jalali-moment";
import DataTable from "@/core/components/DataTable";
import MuiDatePicker from "@/core/components/MuiDatePicker";
+import TableToolbar from "@/components/dashboard/navgan-province-manager/TableToolbar";
function DashboardNavganProvinceManagerComponent() {
const t = useTranslations();
@@ -162,7 +163,8 @@ function DashboardNavganProvinceManagerComponent() {
tableUrl={GET_NAVGAN_PROVINCE_MANAGER}
columns={columns}
selectableRow={false}
- enableCustomToolbar={false}
+ enableCustomToolbar={true}
+ CustomToolbar={TableToolbar}
enableLastUpdate={true}
sorting={[{
id: 'id', desc: false
diff --git a/src/components/dashboard/passenger-boss/Buttons/printExcel.jsx b/src/components/dashboard/passenger-boss/Buttons/printExcel.jsx
new file mode 100644
index 0000000..d04f129
--- /dev/null
+++ b/src/components/dashboard/passenger-boss/Buttons/printExcel.jsx
@@ -0,0 +1,68 @@
+import {Button, CircularProgress} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useMemo, useState} from "react";
+import useRequest from "@/lib/app/hooks/useRequest";
+import {EXPORT_PASSENGER_BOSS} from "@/core/data/apiRoutes";
+import moment from "jalali-moment";
+import FileSaver from 'file-saver';
+import DescriptionIcon from '@mui/icons-material/Description';
+
+const PrintExcel = ({table}) => {
+ const t = useTranslations();
+ const [loading, setLoading] = useState(false)
+ const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}})
+ const {columnFilters, columnFilterFns, sorting} = table.getState()
+ const columns = table.getAllColumns()
+
+ const filterParams = useMemo(() => {
+ const params = new URLSearchParams();
+ const filters = columnFilters.map((filter) => {
+ let datatype;
+ for (const i in columns) {
+ if (columns[i].id == filter.id) {
+ datatype = columns[i].columnDef.datatype;
+ }
+ }
+ return {
+ ...filter, fn: columnFilterFns[filter.id], datatype: datatype,
+ };
+ });
+ params.set("start", '0');
+ params.set("filters", JSON.stringify(filters ?? []));
+ params.set("sorting", JSON.stringify(sorting ?? []));
+ return params;
+ }, [columnFilters, columnFilterFns, sorting, columns,]);
+
+
+ const clickHandler = () => {
+ setLoading(true)
+ requestServer(`${EXPORT_PASSENGER_BOSS}?${filterParams}`, 'get', {
+ auth: true,
+ notification: false,
+ requestOptions: {responseType: 'blob'}
+ }).then((response) => {
+ const filename = `گزارش کارگروه استانی تاریخ_${moment().format('jYYYY_jMM_jDD')}.xlsx`;
+ FileSaver.saveAs(response.data, filename);
+ }).catch(() => {
+ }).finally(() => {
+ setLoading(false)
+ })
+ }
+
+
+ return (
+ : }
+ onClick={clickHandler}
+ >
+ {t("PassengerBoss.excel_report")}
+
+ )
+}
+
+export default PrintExcel
\ No newline at end of file
diff --git a/src/components/dashboard/passenger-boss/TableToolbar.jsx b/src/components/dashboard/passenger-boss/TableToolbar.jsx
index ed224f4..91db1f3 100644
--- a/src/components/dashboard/passenger-boss/TableToolbar.jsx
+++ b/src/components/dashboard/passenger-boss/TableToolbar.jsx
@@ -1,10 +1,12 @@
import {Stack} from "@mui/material";
import PrintFinalCreditAmount from "@/components/dashboard/passenger-boss/Buttons/printFinalCreditAmount";
+import PrintExcel from "@/components/dashboard/passenger-boss/Buttons/printExcel";
-const TableToolbar = () => {
+const TableToolbar = ({table}) => {
return (
+
)
}
diff --git a/src/components/dashboard/passenger-office/Buttons/printExcel.jsx b/src/components/dashboard/passenger-office/Buttons/printExcel.jsx
new file mode 100644
index 0000000..c78075a
--- /dev/null
+++ b/src/components/dashboard/passenger-office/Buttons/printExcel.jsx
@@ -0,0 +1,68 @@
+import {Button, CircularProgress} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useMemo, useState} from "react";
+import useRequest from "@/lib/app/hooks/useRequest";
+import {EXPORT_PASSENGER_OFFICE} from "@/core/data/apiRoutes";
+import moment from "jalali-moment";
+import FileSaver from 'file-saver';
+import DescriptionIcon from '@mui/icons-material/Description';
+
+const PrintExcel = ({table}) => {
+ const t = useTranslations();
+ const [loading, setLoading] = useState(false)
+ const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}})
+ const {columnFilters, columnFilterFns, sorting} = table.getState()
+ const columns = table.getAllColumns()
+
+ const filterParams = useMemo(() => {
+ const params = new URLSearchParams();
+ const filters = columnFilters.map((filter) => {
+ let datatype;
+ for (const i in columns) {
+ if (columns[i].id == filter.id) {
+ datatype = columns[i].columnDef.datatype;
+ }
+ }
+ return {
+ ...filter, fn: columnFilterFns[filter.id], datatype: datatype,
+ };
+ });
+ params.set("start", '0');
+ params.set("filters", JSON.stringify(filters ?? []));
+ params.set("sorting", JSON.stringify(sorting ?? []));
+ return params;
+ }, [columnFilters, columnFilterFns, sorting, columns,]);
+
+
+ const clickHandler = () => {
+ setLoading(true)
+ requestServer(`${EXPORT_PASSENGER_OFFICE}?${filterParams}`, 'get', {
+ auth: true,
+ notification: false,
+ requestOptions: {responseType: 'blob'}
+ }).then((response) => {
+ const filename = `گزارش اداره مسافر تاریخ_${moment().format('jYYYY_jMM_jDD')}.xlsx`;
+ FileSaver.saveAs(response.data, filename);
+ }).catch(() => {
+ }).finally(() => {
+ setLoading(false)
+ })
+ }
+
+
+ return (
+ : }
+ onClick={clickHandler}
+ >
+ {t("PassengerOffice.excel_report")}
+
+ )
+}
+
+export default PrintExcel
\ No newline at end of file
diff --git a/src/components/dashboard/passenger-office/TableToolbar.jsx b/src/components/dashboard/passenger-office/TableToolbar.jsx
new file mode 100644
index 0000000..23f3c20
--- /dev/null
+++ b/src/components/dashboard/passenger-office/TableToolbar.jsx
@@ -0,0 +1,13 @@
+import {Stack} from "@mui/material";
+import PrintExcel from "@/components/dashboard/passenger-office/Buttons/printExcel";
+
+const TableToolbar = ({table}) => {
+
+ return (
+
+
+
+ )
+}
+
+export default TableToolbar
\ No newline at end of file
diff --git a/src/components/dashboard/passenger-office/index.jsx b/src/components/dashboard/passenger-office/index.jsx
index b8292a0..1e4f705 100644
--- a/src/components/dashboard/passenger-office/index.jsx
+++ b/src/components/dashboard/passenger-office/index.jsx
@@ -6,6 +6,7 @@ import TableRowActions from "./TableRowActions";
import moment from "jalali-moment";
import DataTable from "@/core/components/DataTable";
import MuiDatePicker from "@/core/components/MuiDatePicker";
+import TableToolbar from "@/components/dashboard/passenger-office/TableToolbar";
function DashboardPassengerOfficeComponent() {
const t = useTranslations();
@@ -161,7 +162,8 @@ function DashboardPassengerOfficeComponent() {
tableUrl={GET_PASSENGER_OFFICE}
columns={columns}
selectableRow={false}
- enableCustomToolbar={false}
+ enableCustomToolbar={true}
+ CustomToolbar={TableToolbar}
enableLastUpdate={true}
sorting={[{
id: 'id', desc: false
diff --git a/src/components/dashboard/transportation-assistance/Buttons/printExcel.jsx b/src/components/dashboard/transportation-assistance/Buttons/printExcel.jsx
new file mode 100644
index 0000000..b74eecc
--- /dev/null
+++ b/src/components/dashboard/transportation-assistance/Buttons/printExcel.jsx
@@ -0,0 +1,68 @@
+import {Button, CircularProgress} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useMemo, useState} from "react";
+import useRequest from "@/lib/app/hooks/useRequest";
+import {EXPORT_TRANSPORTATION_ASSISTANCE} from "@/core/data/apiRoutes";
+import moment from "jalali-moment";
+import FileSaver from 'file-saver';
+import DescriptionIcon from '@mui/icons-material/Description';
+
+const PrintExcel = ({table}) => {
+ const t = useTranslations();
+ const [loading, setLoading] = useState(false)
+ const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}})
+ const {columnFilters, columnFilterFns, sorting} = table.getState()
+ const columns = table.getAllColumns()
+
+ const filterParams = useMemo(() => {
+ const params = new URLSearchParams();
+ const filters = columnFilters.map((filter) => {
+ let datatype;
+ for (const i in columns) {
+ if (columns[i].id == filter.id) {
+ datatype = columns[i].columnDef.datatype;
+ }
+ }
+ return {
+ ...filter, fn: columnFilterFns[filter.id], datatype: datatype,
+ };
+ });
+ params.set("start", '0');
+ params.set("filters", JSON.stringify(filters ?? []));
+ params.set("sorting", JSON.stringify(sorting ?? []));
+ return params;
+ }, [columnFilters, columnFilterFns, sorting, columns,]);
+
+
+ const clickHandler = () => {
+ setLoading(true)
+ requestServer(`${EXPORT_TRANSPORTATION_ASSISTANCE}?${filterParams}`, 'get', {
+ auth: true,
+ notification: false,
+ requestOptions: {responseType: 'blob'}
+ }).then((response) => {
+ const filename = `گزارش معاونت حمل و نقل تاریخ_${moment().format('jYYYY_jMM_jDD')}.xlsx`;
+ FileSaver.saveAs(response.data, filename);
+ }).catch(() => {
+ }).finally(() => {
+ setLoading(false)
+ })
+ }
+
+
+ return (
+ : }
+ onClick={clickHandler}
+ >
+ {t("TransportationAssistance.excel_report")}
+
+ )
+}
+
+export default PrintExcel
\ No newline at end of file
diff --git a/src/components/dashboard/transportation-assistance/TableToolbar.jsx b/src/components/dashboard/transportation-assistance/TableToolbar.jsx
new file mode 100644
index 0000000..1f7c2d2
--- /dev/null
+++ b/src/components/dashboard/transportation-assistance/TableToolbar.jsx
@@ -0,0 +1,13 @@
+import {Stack} from "@mui/material";
+import PrintExcel from "@/components/dashboard/transportation-assistance/Buttons/printExcel";
+
+const TableToolbar = ({table}) => {
+
+ return (
+
+
+
+ )
+}
+
+export default TableToolbar
\ No newline at end of file
diff --git a/src/components/dashboard/transportation-assistance/index.jsx b/src/components/dashboard/transportation-assistance/index.jsx
index 473837c..a1cdae0 100644
--- a/src/components/dashboard/transportation-assistance/index.jsx
+++ b/src/components/dashboard/transportation-assistance/index.jsx
@@ -6,6 +6,7 @@ import TableRowActions from "./TableRowActions";
import moment from "jalali-moment";
import DataTable from "@/core/components/DataTable";
import MuiDatePicker from "@/core/components/MuiDatePicker";
+import TableToolbar from "@/components/dashboard/transportation-assistance/TableToolbar";
function DashboardTransportationAssistanceComponent() {
const t = useTranslations();
@@ -161,7 +162,8 @@ function DashboardTransportationAssistanceComponent() {
tableUrl={GET_TRANSPORTATION_ASSISTANCE}
columns={columns}
selectableRow={false}
- enableCustomToolbar={false}
+ enableCustomToolbar={true}
+ CustomToolbar={TableToolbar}
enableLastUpdate={true}
sorting={[{
id: 'id', desc: false
diff --git a/src/core/components/DataTable.jsx b/src/core/components/DataTable.jsx
index ea3a117..8274f96 100644
--- a/src/core/components/DataTable.jsx
+++ b/src/core/components/DataTable.jsx
@@ -114,6 +114,7 @@ function DataTable(props) {
renderTopToolbarCustomActions={({table}) => (<>
{props.enableCustomToolbar /* send condition */ ?
/* send component */ : }
>)}
renderBottomToolbarCustomActions={({table}) => (<>
diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js
index 7ca5fca..27fbefd 100644
--- a/src/core/data/apiRoutes.js
+++ b/src/core/data/apiRoutes.js
@@ -21,6 +21,9 @@ export const CONFIRM_PASSENGER_OFFICE =
export const REJECT_PASSENGER_OFFICE =
BASE_URL + "/dashboard/passenger_office_chief/reject";
+
+export const EXPORT_PASSENGER_OFFICE =
+ BASE_URL + "/dashboard/passenger_office_chief/export"
//passenger office
//passenger boss
@@ -32,6 +35,8 @@ export const CONFIRM_PASSENGER_BOSS =
export const REJECT_PASSENGER_BOSS =
BASE_URL + "/dashboard/province_working_group/reject";
+export const EXPORT_PASSENGER_BOSS =
+ BASE_URL + "/dashboard/province_working_group/export";
//passenger boss
//transportation assistance
@@ -43,6 +48,8 @@ export const CONFIRM_TRANSPORTATION_ASSISTANCE =
export const REJECT_TRANSPORTATION_ASSISTANCE =
BASE_URL + "/dashboard/transportation_assistant/reject";
+export const EXPORT_TRANSPORTATION_ASSISTANCE =
+ BASE_URL + "/dashboard/transportation_assistant/export";
//transportation assistance
//machinary office
@@ -54,6 +61,8 @@ export const CONFIRM_MACHINARY_OFFICE =
export const REJECT_MACHINARY_OFFICE =
BASE_URL + "/dashboard/machinery_expert/reject";
+export const EXPORT_MACHINARY_OFFICE =
+ BASE_URL + "/dashboard/machinery_expert/export";
//machinary office
//commercial chief
@@ -76,6 +85,8 @@ export const CONFIRM_NAVGAN_PROVINCE_MANAGER =
export const REJECT_NAVGAN_PROVINCE_MANAGER =
BASE_URL + "/dashboard/province_manager/reject";
+export const EXPORT_NAVGAN_PROVINCE_MANAGER =
+ BASE_URL + "/dashboard/province_manager/export";
//navgan province manager
// refahi province manager