From f973faffd9adc551a4c1effccaf79f74f46539c4 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 20 Nov 2023 10:32:00 +0330 Subject: [PATCH] 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