From d6e8c93b88b3563f2070712d52a2e011e0c949d5 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Sat, 18 Nov 2023 13:53:41 +0330 Subject: [PATCH 1/6] LFFE-26 excel report output for passenger office --- public/locales/fa/app.json | 3 +- .../passenger-office/Buttons/printReport.jsx | 68 +++++++++++++++++++ .../passenger-office/TableToolbar.jsx | 13 ++++ .../dashboard/passenger-office/index.jsx | 4 +- src/core/components/DataTable.jsx | 1 + src/core/data/apiRoutes.js | 3 + 6 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 src/components/dashboard/passenger-office/Buttons/printReport.jsx create mode 100644 src/components/dashboard/passenger-office/TableToolbar.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 12a1600..97a43fc 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": "نام", diff --git a/src/components/dashboard/passenger-office/Buttons/printReport.jsx b/src/components/dashboard/passenger-office/Buttons/printReport.jsx new file mode 100644 index 0000000..8917799 --- /dev/null +++ b/src/components/dashboard/passenger-office/Buttons/printReport.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 TableChartIcon from '@mui/icons-material/TableChart'; + +const PrintReport = ({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 fetchUrl = 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}?${fetchUrl}`, '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 ( + + ) +} + +export default PrintReport \ 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..98a3821 --- /dev/null +++ b/src/components/dashboard/passenger-office/TableToolbar.jsx @@ -0,0 +1,13 @@ +import {Stack} from "@mui/material"; +import PrintReport from "@/components/dashboard/passenger-office/Buttons/printReport"; + +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/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..0922436 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 From b62ca917cb6ba4c6f69878b215674fa166c30299 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Sat, 18 Nov 2023 14:03:34 +0330 Subject: [PATCH 2/6] LFFE-26 change icon --- .../dashboard/passenger-office/Buttons/printReport.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/dashboard/passenger-office/Buttons/printReport.jsx b/src/components/dashboard/passenger-office/Buttons/printReport.jsx index 8917799..041fe6a 100644 --- a/src/components/dashboard/passenger-office/Buttons/printReport.jsx +++ b/src/components/dashboard/passenger-office/Buttons/printReport.jsx @@ -5,7 +5,7 @@ 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 TableChartIcon from '@mui/icons-material/TableChart'; +import DescriptionIcon from '@mui/icons-material/Description'; const PrintReport = ({table}) => { const t = useTranslations(); @@ -57,7 +57,7 @@ const PrintReport = ({table}) => { size="small" disabled={loading} sx={{textTransform: "unset", alignSelf: "center"}} - startIcon={loading ? : } + startIcon={loading ? : } onClick={clickHandler} > {t("PassengerOffice.excel_report")} From a0e69e37fd44c8f00fcb43493ae52622d61139d0 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 20 Nov 2023 10:18:07 +0330 Subject: [PATCH 3/6] LFFE-26 report toolbar transportation assistance --- public/locales/fa/app.json | 3 +- .../passenger-office/Buttons/printReport.jsx | 4 +- .../Buttons/printReport.jsx | 68 +++++++++++++++++++ .../TableToolbar.jsx | 13 ++++ .../transportation-assistance/index.jsx | 4 +- src/core/data/apiRoutes.js | 2 + 6 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 src/components/dashboard/transportation-assistance/Buttons/printReport.jsx create mode 100644 src/components/dashboard/transportation-assistance/TableToolbar.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 97a43fc..82b5230 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -285,7 +285,8 @@ "state_name": "وضعیت درخواست", "confirm": "ارجاع به مدیر کل استانی", "upload_file_unit": "فایل بارگذاری شده باید حداکثر 2Mb باشد", - "upload_file_format": "فرمت قابل قبول : png,jpg,pdf" + "upload_file_format": "فرمت قابل قبول : png,jpg,pdf", + "excel_report": "گزارش اکسل" }, "InspectorExpert": { "name": "نام", diff --git a/src/components/dashboard/passenger-office/Buttons/printReport.jsx b/src/components/dashboard/passenger-office/Buttons/printReport.jsx index 041fe6a..74f4bcc 100644 --- a/src/components/dashboard/passenger-office/Buttons/printReport.jsx +++ b/src/components/dashboard/passenger-office/Buttons/printReport.jsx @@ -14,7 +14,7 @@ const PrintReport = ({table}) => { const {columnFilters, columnFilterFns, sorting} = table.getState() const columns = table.getAllColumns() - const fetchUrl = useMemo(() => { + const filterParams = useMemo(() => { const params = new URLSearchParams(); const filters = columnFilters.map((filter) => { let datatype; @@ -36,7 +36,7 @@ const PrintReport = ({table}) => { const clickHandler = () => { setLoading(true) - requestServer(`${EXPORT_PASSENGER_OFFICE}?${fetchUrl}`, 'get', { + requestServer(`${EXPORT_PASSENGER_OFFICE}?${filterParams}`, 'get', { auth: true, notification: false, requestOptions: {responseType: 'blob'} diff --git a/src/components/dashboard/transportation-assistance/Buttons/printReport.jsx b/src/components/dashboard/transportation-assistance/Buttons/printReport.jsx new file mode 100644 index 0000000..4185d29 --- /dev/null +++ b/src/components/dashboard/transportation-assistance/Buttons/printReport.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 PrintReport = ({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 ( + + ) +} + +export default PrintReport \ 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..08de307 --- /dev/null +++ b/src/components/dashboard/transportation-assistance/TableToolbar.jsx @@ -0,0 +1,13 @@ +import {Stack} from "@mui/material"; +import PrintReport from "@/components/dashboard/transportation-assistance/Buttons/printReport"; + +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/data/apiRoutes.js b/src/core/data/apiRoutes.js index 0922436..0e6d724 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -46,6 +46,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 From f973faffd9adc551a4c1effccaf79f74f46539c4 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 20 Nov 2023 10:32:00 +0330 Subject: [PATCH 4/6] LFFE-26 report toolbar machinary office --- public/locales/fa/app.json | 3 +- .../machinary-office/Buttons/printExcel.jsx | 68 +++++++++++++++++++ .../machinary-office/TableToolbar.jsx | 4 +- src/core/data/apiRoutes.js | 2 + 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/components/dashboard/machinary-office/Buttons/printExcel.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 82b5230..70bb147 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -315,7 +315,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 ( + + ) +} + +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/core/data/apiRoutes.js b/src/core/data/apiRoutes.js index 0e6d724..15c32a4 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -59,6 +59,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 From 22b879c40811e1c358c299f2c0d204e3abe51ca5 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 20 Nov 2023 10:39:07 +0330 Subject: [PATCH 5/6] LFFE-26 report toolbar passenger boss --- public/locales/fa/app.json | 3 +- .../passenger-boss/Buttons/printExcel.jsx | 68 +++++++++++++++++++ .../dashboard/passenger-boss/TableToolbar.jsx | 4 +- .../{printReport.jsx => printExcel.jsx} | 4 +- .../passenger-office/TableToolbar.jsx | 4 +- .../{printReport.jsx => printExcel.jsx} | 4 +- .../TableToolbar.jsx | 4 +- src/core/data/apiRoutes.js | 2 + 8 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 src/components/dashboard/passenger-boss/Buttons/printExcel.jsx rename src/components/dashboard/passenger-office/Buttons/{printReport.jsx => printExcel.jsx} (97%) rename src/components/dashboard/transportation-assistance/Buttons/{printReport.jsx => printExcel.jsx} (97%) diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 70bb147..aeb5a87 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -214,7 +214,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": "نام", 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 ( + + ) +} + +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/printReport.jsx b/src/components/dashboard/passenger-office/Buttons/printExcel.jsx similarity index 97% rename from src/components/dashboard/passenger-office/Buttons/printReport.jsx rename to src/components/dashboard/passenger-office/Buttons/printExcel.jsx index 74f4bcc..c78075a 100644 --- a/src/components/dashboard/passenger-office/Buttons/printReport.jsx +++ b/src/components/dashboard/passenger-office/Buttons/printExcel.jsx @@ -7,7 +7,7 @@ import moment from "jalali-moment"; import FileSaver from 'file-saver'; import DescriptionIcon from '@mui/icons-material/Description'; -const PrintReport = ({table}) => { +const PrintExcel = ({table}) => { const t = useTranslations(); const [loading, setLoading] = useState(false) const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}}) @@ -65,4 +65,4 @@ const PrintReport = ({table}) => { ) } -export default PrintReport \ No newline at end of file +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 index 98a3821..23f3c20 100644 --- a/src/components/dashboard/passenger-office/TableToolbar.jsx +++ b/src/components/dashboard/passenger-office/TableToolbar.jsx @@ -1,11 +1,11 @@ import {Stack} from "@mui/material"; -import PrintReport from "@/components/dashboard/passenger-office/Buttons/printReport"; +import PrintExcel from "@/components/dashboard/passenger-office/Buttons/printExcel"; const TableToolbar = ({table}) => { return ( - + ) } diff --git a/src/components/dashboard/transportation-assistance/Buttons/printReport.jsx b/src/components/dashboard/transportation-assistance/Buttons/printExcel.jsx similarity index 97% rename from src/components/dashboard/transportation-assistance/Buttons/printReport.jsx rename to src/components/dashboard/transportation-assistance/Buttons/printExcel.jsx index 4185d29..b74eecc 100644 --- a/src/components/dashboard/transportation-assistance/Buttons/printReport.jsx +++ b/src/components/dashboard/transportation-assistance/Buttons/printExcel.jsx @@ -7,7 +7,7 @@ import moment from "jalali-moment"; import FileSaver from 'file-saver'; import DescriptionIcon from '@mui/icons-material/Description'; -const PrintReport = ({table}) => { +const PrintExcel = ({table}) => { const t = useTranslations(); const [loading, setLoading] = useState(false) const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}}) @@ -65,4 +65,4 @@ const PrintReport = ({table}) => { ) } -export default PrintReport \ No newline at end of file +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 index 08de307..1f7c2d2 100644 --- a/src/components/dashboard/transportation-assistance/TableToolbar.jsx +++ b/src/components/dashboard/transportation-assistance/TableToolbar.jsx @@ -1,11 +1,11 @@ import {Stack} from "@mui/material"; -import PrintReport from "@/components/dashboard/transportation-assistance/Buttons/printReport"; +import PrintExcel from "@/components/dashboard/transportation-assistance/Buttons/printExcel"; const TableToolbar = ({table}) => { return ( - + ) } diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js index 15c32a4..69d404f 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -35,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 From 05009a222acf1e2e8f9890448bf39e591621c49f Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 20 Nov 2023 10:47:39 +0330 Subject: [PATCH 6/6] LFFE-26 report toolbar navgan province manager --- public/locales/fa/app.json | 3 +- .../Buttons/printExcel.jsx | 68 +++++++++++++++++++ .../navgan-province-manager/TableToolbar.jsx | 13 ++++ .../navgan-province-manager/index.jsx | 4 +- src/core/data/apiRoutes.js | 2 + 5 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/components/dashboard/navgan-province-manager/Buttons/printExcel.jsx create mode 100644 src/components/dashboard/navgan-province-manager/TableToolbar.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index aeb5a87..e8683b3 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -196,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": "نام", 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 ( + + ) +} + +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/core/data/apiRoutes.js b/src/core/data/apiRoutes.js index 69d404f..27fbefd 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -85,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