diff --git a/public/fontiran.scss b/public/fontiran.scss
index 86d585d..5ee0036 100644
--- a/public/fontiran.scss
+++ b/public/fontiran.scss
@@ -167,3 +167,10 @@ This set of fonts are used in this project under the license: (.....)
url('./fonts/woff/Parastoo-Bold.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('./fonts/ttf/Parastoo-Bold.ttf') format('truetype');
}
+
+@font-face {
+ font-family: Bnazanin;
+ font-style: normal;
+ font-weight: normal;
+ src: url('./fonts/ttf/BNazanin.ttf') format('truetype');
+}
diff --git a/public/fonts/ttf/BNazanin.ttf b/public/fonts/ttf/BNazanin.ttf
new file mode 100644
index 0000000..4e59251
Binary files /dev/null and b/public/fonts/ttf/BNazanin.ttf differ
diff --git a/public/images/logo.png b/public/images/logo.png
new file mode 100644
index 0000000..075e3fe
Binary files /dev/null and b/public/images/logo.png differ
diff --git a/public/images/logo.svg b/public/images/logo.svg
deleted file mode 100644
index eebb9fa..0000000
--- a/public/images/logo.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json
index c905835..fa27cd6 100644
--- a/public/locales/fa/app.json
+++ b/public/locales/fa/app.json
@@ -17,6 +17,10 @@
"online_message": "شما به اینترنت وصل هستید",
"offline_message": "اتصال شما به اینترنت قطع شده است",
"routing_to": "در حال انتقال به صفحه",
+ "data_not_found": "اطلاعاتی یافت نشد!",
+ "btn_print": "چاپ",
+ "print_loading": "درحال پردازش اطلاعات ...",
+ "button_back_to_previous": "بازگشت به صفحه قبل",
"header": {
"open_profile": "پروفایل",
"edit_profile": " پروفایل",
@@ -206,6 +210,7 @@
"upload_file_required": "وارد کردن صورت جلسه کارگروه استانی الزامیست",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 2Mb باشد",
"upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
+ "print_final_credit_amount": "چاپ صورت جلسه تعیین مبلغ نهایی",
"max_amount": "حداکثر مبلغ تصویب شده {value} میلیون ریال می باشد"
},
"RefahiProvinceManager": {
@@ -305,6 +310,7 @@
"upload_file_required": "وارد کردن گزارش کارشناسی الزامیست",
"upload_file_unit": "فایل بارگذاری شده باید حداکثر 2Mb باشد",
"upload_file_format": "فرمت قابل قبول : png,jpg,pdf",
+ "print_report": "چاپ گزارش کارشناسی ماشین آلات",
"max_amount": "حداکثر مبلغ پیشنهادی {value} میلیون ریال می باشد"
},
"UserManagement": {
diff --git a/public/print.scss b/public/print.scss
new file mode 100644
index 0000000..990a647
--- /dev/null
+++ b/public/print.scss
@@ -0,0 +1,9 @@
+@media print {
+ body {
+ margin: 0;
+ padding: 0;
+ }
+ @page {
+ size: A4;
+ }
+}
\ No newline at end of file
diff --git a/src/components/dashboard/commercial-chief/TableTollbar.jsx b/src/components/dashboard/commercial-chief/TableTollbar.jsx
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/dashboard/development-assistant/TableTollbar.jsx b/src/components/dashboard/development-assistant/TableTollbar.jsx
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/dashboard/inspector-expert/TableTollbar.jsx b/src/components/dashboard/inspector-expert/TableTollbar.jsx
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/dashboard/machinary-office/Buttons/printReport.jsx b/src/components/dashboard/machinary-office/Buttons/printReport.jsx
new file mode 100644
index 0000000..47aab16
--- /dev/null
+++ b/src/components/dashboard/machinary-office/Buttons/printReport.jsx
@@ -0,0 +1,48 @@
+import PrintIcon from "@mui/icons-material/Print";
+import {Button, CircularProgress} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useRouter} from "next/router";
+import {useState} from "react";
+import useRequest from "@/lib/app/hooks/useRequest";
+import {GET_MACHINARY_OFFICE} from "@/core/data/apiRoutes";
+import usePrint from "@/lib/app/hooks/usePrint";
+
+const PrintReport = () => {
+ const t = useTranslations();
+ const router = useRouter()
+ const [loading, setLoading] = useState(false)
+ const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}})
+ const {setPrintPage, setPrintTitle} = usePrint()
+ const clickHandler = () => {
+ setLoading(true)
+ const params = new URLSearchParams();
+ params.set("start", '0');
+ params.set("filters", '[]');
+ params.set("sorting", '[]');
+ requestServer(`${GET_MACHINARY_OFFICE}?${params}`, 'get').then((response) => {
+ const _data = response.data.data
+ setPrintPage(_data.length)
+ setPrintTitle(t('MachinaryOffice.print_report'))
+ sessionStorage.setItem('report-print', JSON.stringify(_data))
+ router.push('/dashboard/machinery-expert/prints/report')
+ }).catch(() => {
+ setLoading(false)
+ })
+ }
+
+ return (
+ : }
+ onClick={clickHandler}
+ >
+ {t("MachinaryOffice.print_report")}
+
+ )
+}
+
+export default PrintReport
\ No newline at end of file
diff --git a/src/components/dashboard/machinary-office/Prints/report/Content.jsx b/src/components/dashboard/machinary-office/Prints/report/Content.jsx
new file mode 100644
index 0000000..8098ecb
--- /dev/null
+++ b/src/components/dashboard/machinary-office/Prints/report/Content.jsx
@@ -0,0 +1,96 @@
+import PrintablePage from "@/core/components/PrintablePage";
+import {Box, Stack, Typography} from "@mui/material";
+
+const Content = ({data}) => {
+ return (
+ <>
+
+
+ {'گزارش کارشناسی ماشین آلات'}
+
+
+ {'با توجه به نامه شماره'}
+ 35482
+ {'مورخ'}
+ 1402/08/20
+ {'معاون محترم برنامه ریزی سازمان راهداری و حمل و نقل جاده ای در خصوص تسهیلات بند (الف) تبصره (18) قانون بودجه سال'}
+ 1402
+ {'موضوع بازسازی ناوگان اتوبوس و مینی بوس و نیز تصویب آن درشورای برنامه ریزی و توسعه استان'}
+ تهران
+ {'و نامه شماره'}
+ 35482
+ {'مورخ'}
+ 1402/08/20
+ {'اداره کل راهداری و حمل و نقل جاده ای'}
+ تهران
+ {'در خصوص استفاده از ظرفیت انجمن های صنفی رانندگان در تاریخ'}
+ 1402/08/20
+ {'از ناوگان اتوبوس/مینی بوس به شماره پلاک انتظامی'}
+ 25پ4582
+ {'و شماره هوشمند ناوگان'}
+ 5875698725
+ {'به مالکیت آقای'}
+ امیرحسین محمودی
+ {'با کد ملی'}
+ 0311318897
+ {'و شماره تماس'}
+ 09120630655
+ {'ساکن شهرستان'}
+ تهران
+ {'در جلسه مطرح شد که نتیجه آن به شرح ذیل مورد تایید می باشد.'}
+
+
+ {'مبلغ پیشنهادی به عدد .............................................. ریال و به حروف ...................................................................... ریال می باشد.'}
+ {'توضیحات : ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................'}
+
+ {'نام و نام خانوادگی کارشناس:'}
+ {'تاریخ و امضاء'}
+
+
+
+ >
+ )
+}
+
+export default Content
\ No newline at end of file
diff --git a/src/components/dashboard/machinary-office/Prints/report/index.jsx b/src/components/dashboard/machinary-office/Prints/report/index.jsx
new file mode 100644
index 0000000..54dca24
--- /dev/null
+++ b/src/components/dashboard/machinary-office/Prints/report/index.jsx
@@ -0,0 +1,60 @@
+import {useEffect, useState} from "react";
+import CenterLayout from "@/layouts/CenterLayout";
+import {useTranslations} from "next-intl";
+import {Stack, Typography} from "@mui/material";
+import Content from "@/components/dashboard/machinary-office/Prints/report/Content";
+
+const ReportComponent = () => {
+ const t = useTranslations()
+ const [data, setData] = useState(null)
+ const [loading, setLoading] = useState(true)
+ const [isNotData, setIsNotData] = useState(true)
+
+ useEffect(() => {
+ if (sessionStorage.getItem('report-print') === null) {
+ setLoading(false)
+ setIsNotData(true)
+ sessionStorage.setItem('report-print', 'seen')
+ } else if (sessionStorage.getItem('report-print') === 'seen') {
+ setLoading(false)
+ setData(null)
+ setIsNotData(true)
+ } else if (data) {
+ setLoading(false)
+ sessionStorage.setItem('report-print', 'seen')
+ setIsNotData(false)
+ } else {
+ setLoading(true)
+ setData(JSON.parse(sessionStorage.getItem('report-print')))
+ setIsNotData(true)
+ }
+ }, [data]);
+
+ return (
+
+ {loading ? (
+
+
+
+ {t('print_loading')}
+
+
+
+ ) : !data ? (
+
+
+ {t('data_not_found')}
+
+
+ ) : !data.length ? (
+
+
+ {t('data_not_found')}
+
+
+ ) : data.map(item => )}
+
+ )
+}
+
+export default ReportComponent
\ No newline at end of file
diff --git a/src/components/dashboard/machinary-office/TableTolbar.jsx b/src/components/dashboard/machinary-office/TableTolbar.jsx
deleted file mode 100644
index e267691..0000000
--- a/src/components/dashboard/machinary-office/TableTolbar.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import {Stack, Tooltip} from "@mui/material";
-import {useTranslations} from "next-intl";
-
-function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
-}
-
-export default TableToolbar;
diff --git a/src/components/dashboard/machinary-office/TableToolbar.jsx b/src/components/dashboard/machinary-office/TableToolbar.jsx
new file mode 100644
index 0000000..9704f95
--- /dev/null
+++ b/src/components/dashboard/machinary-office/TableToolbar.jsx
@@ -0,0 +1,12 @@
+import {Stack} from "@mui/material";
+import PrintReport from "@/components/dashboard/machinary-office/Buttons/printReport";
+
+const TableToolbar = () => {
+ return (
+
+
+
+ )
+}
+
+export default TableToolbar
\ No newline at end of file
diff --git a/src/components/dashboard/machinary-office/index.jsx b/src/components/dashboard/machinary-office/index.jsx
index 820519e..853c065 100644
--- a/src/components/dashboard/machinary-office/index.jsx
+++ b/src/components/dashboard/machinary-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/machinary-office/TableToolbar";
function DashboardMachinaryOfficeComponent() {
const t = useTranslations();
@@ -160,7 +161,8 @@ function DashboardMachinaryOfficeComponent() {
tableUrl={GET_MACHINARY_OFFICE}
columns={columns}
selectableRow={false}
- enableCustomToolbar={false}
+ enableCustomToolbar={true}
+ CustomToolbar={TableToolbar}
enableLastUpdate={true}
sorting={[{
id: 'id', desc: false
diff --git a/src/components/dashboard/navgan-province-manager/TableTollbar.jsx b/src/components/dashboard/navgan-province-manager/TableTollbar.jsx
deleted file mode 100644
index e267691..0000000
--- a/src/components/dashboard/navgan-province-manager/TableTollbar.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import {Stack, Tooltip} from "@mui/material";
-import {useTranslations} from "next-intl";
-
-function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
-}
-
-export default TableToolbar;
diff --git a/src/components/dashboard/passenger-boss/Buttons/printFinalCreditAmount.jsx b/src/components/dashboard/passenger-boss/Buttons/printFinalCreditAmount.jsx
new file mode 100644
index 0000000..58a97af
--- /dev/null
+++ b/src/components/dashboard/passenger-boss/Buttons/printFinalCreditAmount.jsx
@@ -0,0 +1,48 @@
+import PrintIcon from "@mui/icons-material/Print";
+import {Button, CircularProgress} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useRouter} from "next/router";
+import {useState} from "react";
+import useRequest from "@/lib/app/hooks/useRequest";
+import {GET_PASSENGER_BOSS} from "@/core/data/apiRoutes";
+import usePrint from "@/lib/app/hooks/usePrint";
+
+const PrintFinalCreditAmount = () => {
+ const t = useTranslations();
+ const router = useRouter()
+ const [loading, setLoading] = useState(false)
+ const requestServer = useRequest({auth: true, pending: false, success: {notification: {show: false}}})
+ const {setPrintPage, setPrintTitle} = usePrint()
+ const clickHandler = () => {
+ setLoading(true)
+ const params = new URLSearchParams();
+ params.set("start", '0');
+ params.set("filters", '[]');
+ params.set("sorting", '[]');
+ requestServer(`${GET_PASSENGER_BOSS}?${params}`, 'get').then((response) => {
+ const _data = response.data.data
+ setPrintPage(_data.length)
+ setPrintTitle(t('PassengerBoss.print_final_credit_amount'))
+ sessionStorage.setItem('final-credit-amount-print', JSON.stringify(_data))
+ router.push('/dashboard/passenger-boss/prints/final-credit-amount')
+ }).catch(() => {
+ setLoading(false)
+ })
+ }
+
+ return (
+ : }
+ onClick={clickHandler}
+ >
+ {t("PassengerBoss.print_final_credit_amount")}
+
+ )
+}
+
+export default PrintFinalCreditAmount
\ No newline at end of file
diff --git a/src/components/dashboard/passenger-boss/Prints/final-credit-amount/Content.jsx b/src/components/dashboard/passenger-boss/Prints/final-credit-amount/Content.jsx
new file mode 100644
index 0000000..e9844ee
--- /dev/null
+++ b/src/components/dashboard/passenger-boss/Prints/final-credit-amount/Content.jsx
@@ -0,0 +1,123 @@
+import PrintablePage from "@/core/components/PrintablePage";
+import {Box, Grid, Stack, Typography} from "@mui/material";
+
+const Content = ({data}) => {
+ return (
+ <>
+
+
+ {'فرم صورتجلسه تعیین مبلغ نهایی اعتبار'}
+
+
+ {'با توجه به نامه شماره'}
+ 35482
+ {'مورخ'}
+ 1402/08/20
+ {'معاون محترم برنامه ریزی سازمان راهداری و حمل و نقل جاده ای در خصوص تسهیلات بند (الف) تبصره (18) قانون بودجه سال'}
+ 1402
+ {'موضوع بازسازی ناوگان اتوبوس و مینی بوس و نیز تصویب آن درشورای برنامه ریزی و توسعه استان'}
+ تهران
+ {'و نامه شماره'}
+ 35482
+ {'مورخ'}
+ 1402/08/20
+ {'اداره کل راهداری و حمل و نقل جاده ای'}
+ تهران
+ {'در خصوص استفاده از ظرفیت انجمن های صنفی رانندگان در تاریخ'}
+ 1402/08/20
+ {'از ناوگان اتوبوس/مینی بوس به شماره پلاک انتظامی'}
+ 25پ4582
+ {'و شماره هوشمند ناوگان'}
+ 5875698725
+ {'به مالکیت آقای'}
+ امیرحسین محمودی
+ {'با کد ملی'}
+ 0311318897
+ {'و شماره تماس'}
+ 09120630655
+ {'ساکن شهرستان'}
+ تهران
+ {'در جلسه مطرح شد که نتیجه آن به شرح ذیل مورد تایید می باشد.'}
+
+
+ {'با توجه به گزارش واصله از اداره ماشین آلات (نامه در پیوست موجود می باشد) جهت بازسازی ناوگان مذکور مبلغ .............................................. ریال معادل .............................................. تومان مورد تایید می باشد.'}
+
+
+
+
+ رئیس انجمن
+
+
+
+
+ رئیس اداره مسافر
+
+
+
+
+
+
+
+
+
+
+ امضاء
+
+
+
+
+ امضاء
+
+
+
+
+ امضاء
+
+
+
+
+ امضاء
+
+
+
+
+ >
+ )
+}
+
+export default Content
\ No newline at end of file
diff --git a/src/components/dashboard/passenger-boss/Prints/final-credit-amount/index.jsx b/src/components/dashboard/passenger-boss/Prints/final-credit-amount/index.jsx
new file mode 100644
index 0000000..9fd6a78
--- /dev/null
+++ b/src/components/dashboard/passenger-boss/Prints/final-credit-amount/index.jsx
@@ -0,0 +1,60 @@
+import {useEffect, useState} from "react";
+import CenterLayout from "@/layouts/CenterLayout";
+import {useTranslations} from "next-intl";
+import {Stack, Typography} from "@mui/material";
+import Content from "@/components/dashboard/passenger-boss/Prints/final-credit-amount/Content";
+
+const FinalCreditAmountComponent = () => {
+ const t = useTranslations()
+ const [data, setData] = useState(null)
+ const [loading, setLoading] = useState(true)
+ const [isNotData, setIsNotData] = useState(true)
+
+ useEffect(() => {
+ if (sessionStorage.getItem('final-credit-amount-print') === null) {
+ setLoading(false)
+ setIsNotData(true)
+ sessionStorage.setItem('final-credit-amount-print', 'seen')
+ } else if (sessionStorage.getItem('final-credit-amount-print') === 'seen') {
+ setLoading(false)
+ setData(null)
+ setIsNotData(true)
+ } else if (data) {
+ setLoading(false)
+ sessionStorage.setItem('final-credit-amount-print', 'seen')
+ setIsNotData(false)
+ } else {
+ setLoading(true)
+ setData(JSON.parse(sessionStorage.getItem('final-credit-amount-print')))
+ setIsNotData(true)
+ }
+ }, [data]);
+
+ return (
+
+ {loading ? (
+
+
+
+ {t('print_loading')}
+
+
+
+ ) : !data ? (
+
+
+ {t('data_not_found')}
+
+
+ ) : !data.length ? (
+
+
+ {t('data_not_found')}
+
+
+ ) : data.map(item => )}
+
+ )
+}
+
+export default FinalCreditAmountComponent
\ No newline at end of file
diff --git a/src/components/dashboard/passenger-boss/TableTollbar.jsx b/src/components/dashboard/passenger-boss/TableTollbar.jsx
deleted file mode 100644
index e267691..0000000
--- a/src/components/dashboard/passenger-boss/TableTollbar.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import {Stack, Tooltip} from "@mui/material";
-import {useTranslations} from "next-intl";
-
-function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
-}
-
-export default TableToolbar;
diff --git a/src/components/dashboard/passenger-boss/TableToolbar.jsx b/src/components/dashboard/passenger-boss/TableToolbar.jsx
new file mode 100644
index 0000000..ed224f4
--- /dev/null
+++ b/src/components/dashboard/passenger-boss/TableToolbar.jsx
@@ -0,0 +1,12 @@
+import {Stack} from "@mui/material";
+import PrintFinalCreditAmount from "@/components/dashboard/passenger-boss/Buttons/printFinalCreditAmount";
+
+const TableToolbar = () => {
+ return (
+
+
+
+ )
+}
+
+export default TableToolbar
\ No newline at end of file
diff --git a/src/components/dashboard/passenger-boss/index.jsx b/src/components/dashboard/passenger-boss/index.jsx
index c338f6e..1a13b3b 100644
--- a/src/components/dashboard/passenger-boss/index.jsx
+++ b/src/components/dashboard/passenger-boss/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-boss/TableToolbar";
function DashboardPassengerOfficeComponent() {
const t = useTranslations();
@@ -161,7 +162,8 @@ function DashboardPassengerOfficeComponent() {
tableUrl={GET_PASSENGER_BOSS}
columns={columns}
selectableRow={false}
- enableCustomToolbar={false}
+ enableCustomToolbar={true}
+ CustomToolbar={TableToolbar}
enableLastUpdate={true}
sorting={[{
id: 'id', desc: false
diff --git a/src/components/dashboard/passenger-office/TableTollbar.jsx b/src/components/dashboard/passenger-office/TableTollbar.jsx
deleted file mode 100644
index e267691..0000000
--- a/src/components/dashboard/passenger-office/TableTollbar.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import {Stack, Tooltip} from "@mui/material";
-import {useTranslations} from "next-intl";
-
-function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
-}
-
-export default TableToolbar;
diff --git a/src/components/dashboard/province-head-expert/TableTollbar.jsx b/src/components/dashboard/province-head-expert/TableTollbar.jsx
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/dashboard/refahi-province-manager/TableTollbar.jsx b/src/components/dashboard/refahi-province-manager/TableTollbar.jsx
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/dashboard/transportation-assistance/TableTollbar.jsx b/src/components/dashboard/transportation-assistance/TableTollbar.jsx
deleted file mode 100644
index e267691..0000000
--- a/src/components/dashboard/transportation-assistance/TableTollbar.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import {Stack, Tooltip} from "@mui/material";
-import {useTranslations} from "next-intl";
-
-function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
-}
-
-export default TableToolbar;
diff --git a/src/components/layouts/Dashboard/Header/index.jsx b/src/components/layouts/Dashboard/Header/index.jsx
index 8760960..8050806 100644
--- a/src/components/layouts/Dashboard/Header/index.jsx
+++ b/src/components/layouts/Dashboard/Header/index.jsx
@@ -1,5 +1,5 @@
import MenuIcon from "@mui/icons-material/Menu";
-import {AppBar, Box, Container, CssBaseline, IconButton, Stack, Toolbar, useTheme} from "@mui/material";
+import {AppBar, Box, Container, IconButton, Stack, Toolbar, useTheme} from "@mui/material";
import ProfileMenu from "./ProfileMenu";
function Header({drawerWidth, handleDrawerToggle}) {
@@ -7,7 +7,6 @@ function Header({drawerWidth, handleDrawerToggle}) {
return (
<>
-
+
+
+ {user.username}
+
+
+ );
+}
diff --git a/src/components/layouts/Print/Header/ProfileMenu.jsx b/src/components/layouts/Print/Header/ProfileMenu.jsx
new file mode 100644
index 0000000..415d501
--- /dev/null
+++ b/src/components/layouts/Print/Header/ProfileMenu.jsx
@@ -0,0 +1,62 @@
+import {Avatar, IconButton, Menu, Tooltip} from "@mui/material";
+import {useState} from "react";
+import ProfileData from "./ProfileData";
+import ProfileOptions from "./ProfileOptions";
+import {useTranslations} from "next-intl";
+import useUser from "@/lib/app/hooks/useUser";
+
+function ProfileMenu() {
+ const t = useTranslations();
+ const [anchorElUser, setAnchorElUser] = useState(null);
+ const {user} = useUser();
+
+ const handleOpenUserMenu = (event) => {
+ setAnchorElUser(event.currentTarget);
+ };
+ const handleCloseUserMenu = () => {
+ setAnchorElUser(null);
+ };
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+export default ProfileMenu;
diff --git a/src/components/layouts/Print/Header/ProfileOptionLogOut.jsx b/src/components/layouts/Print/Header/ProfileOptionLogOut.jsx
new file mode 100644
index 0000000..2a6cf85
--- /dev/null
+++ b/src/components/layouts/Print/Header/ProfileOptionLogOut.jsx
@@ -0,0 +1,49 @@
+import {Box, Button, MenuItem, Typography} from "@mui/material";
+import MeetingRoomIcon from "@mui/icons-material/MeetingRoom";
+import useUser from "@/lib/app/hooks/useUser";
+import {useTranslations} from "next-intl";
+
+export default function ProfileOptionLogOut({handleCloseUserMenu}) {
+ const t = useTranslations();
+ const {clearToken} = useUser();
+ const handleClickLogOut = () => {
+ handleCloseUserMenu();
+ clearToken();
+ };
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/components/layouts/Print/Header/ProfileOptions.jsx b/src/components/layouts/Print/Header/ProfileOptions.jsx
new file mode 100644
index 0000000..6e7bdba
--- /dev/null
+++ b/src/components/layouts/Print/Header/ProfileOptions.jsx
@@ -0,0 +1,49 @@
+import {Box, MenuItem, Typography} from "@mui/material";
+import {NextLinkComposed} from "@/core/components/LinkRouting";
+import {useTranslations} from "next-intl";
+import headerProfileItems from "@/core/data/headerProfileItems";
+import ProfileOptionLogOut from "./ProfileOptionLogOut";
+
+export default function ProfileOptions({handleCloseUserMenu}) {
+ const t = useTranslations();
+
+ return (
+ <>
+ {headerProfileItems.map((profile_item) => (
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/components/layouts/Print/Header/index.jsx b/src/components/layouts/Print/Header/index.jsx
new file mode 100644
index 0000000..7c0d990
--- /dev/null
+++ b/src/components/layouts/Print/Header/index.jsx
@@ -0,0 +1,72 @@
+import {AppBar, Button, Container, Stack, Toolbar, Typography, useTheme} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useRouter} from "next/router";
+import {useState} from "react";
+import usePrint from "@/lib/app/hooks/usePrint";
+
+function Header({drawerWidth, handleDrawerToggle}) {
+ const theme = useTheme();
+ const t = useTranslations()
+ const router = useRouter()
+ const {printDetails} = usePrint()
+ const [disabled, setDisabled] = useState(false)
+
+ return (
+
+
+
+
+
+
+
+ {printDetails.title}
+ {'تعداد صفحه:'} {printDetails.count}
+
+
+
+
+
+
+
+ );
+}
+
+export default Header;
\ No newline at end of file
diff --git a/src/components/layouts/Print/index.jsx b/src/components/layouts/Print/index.jsx
new file mode 100644
index 0000000..afa6585
--- /dev/null
+++ b/src/components/layouts/Print/index.jsx
@@ -0,0 +1,14 @@
+import Header from "@/components/layouts/Print/Header";
+import {Toolbar} from "@mui/material";
+
+const Print = (props) => {
+ return (
+ <>
+
+
+ {props.children}
+ >
+ )
+}
+
+export default Print
\ No newline at end of file
diff --git a/src/core/components/PrintablePage.jsx b/src/core/components/PrintablePage.jsx
new file mode 100644
index 0000000..70a264b
--- /dev/null
+++ b/src/core/components/PrintablePage.jsx
@@ -0,0 +1,82 @@
+import {Box, Container, Divider, Grid, Paper, Stack, Typography} from '@mui/material';
+
+const PrintablePage = ({children, header, footer}) => (
+ <>
+
+
+
+
+
+
+
+
+
+ باسمه تعالی
+ جمهوری اسلامی ایران
+ وزارت راه و
+ شهرسازی
+ سازمان
+ راهداری و حمل و نقل جاده
+ ای
+
+
+
+ شماره:
+ تاریخ:
+ پیوست:
+
+
+
+
+ {children}
+
+
+
+
+
+ آدرس: تهران-بلوار
+ کشاورز-خیابان فلسطین جنوبی-خیابان
+ دمشق-پلاک17
+ تلفن: 88-88804379
+ تلفن گویا: 88804400
+ کدپستی: 1416753941
+
+
+ صندوق پستی: 3773-14155
+ پست الکترونیک: info@rmto.ir
+ سایت الکترونیک: www.rmto.ir
+
+
+
+
+
+ >
+);
+
+export default PrintablePage;
\ No newline at end of file
diff --git a/src/layouts/PrintLayout.jsx b/src/layouts/PrintLayout.jsx
new file mode 100644
index 0000000..301a161
--- /dev/null
+++ b/src/layouts/PrintLayout.jsx
@@ -0,0 +1,12 @@
+import WithAuthMiddleware from "@/middlewares/WithAuth";
+import Print from "@/components/layouts/Print";
+
+const PrintLayout = (props) => {
+ return (
+
+
+
+ )
+}
+
+export default PrintLayout
\ No newline at end of file
diff --git a/src/layouts/index.jsx b/src/layouts/index.jsx
index 4d4ed7f..a69d886 100644
--- a/src/layouts/index.jsx
+++ b/src/layouts/index.jsx
@@ -1,8 +1,10 @@
import DashboardLayout from "@/layouts/DashboardLayout";
import {Fragment} from "react";
+import PrintLayout from "@/layouts/PrintLayout";
const layoutList = {
- DashboardLayout
+ DashboardLayout,
+ PrintLayout
}
const Layout = ({layout = {}, children}) => {
diff --git a/src/lib/app/contexts/print.jsx b/src/lib/app/contexts/print.jsx
new file mode 100644
index 0000000..20fd1dc
--- /dev/null
+++ b/src/lib/app/contexts/print.jsx
@@ -0,0 +1,24 @@
+import {createContext, useReducer} from "react";
+
+export const PrintContext = createContext();
+
+const reducer = (state, action) => {
+ switch (action.type) {
+ case "SET_PRINT_PAGE":
+ return {
+ ...state, count: action.count
+ };
+ case "SET_PRINT_TITLE":
+ return {
+ ...state, title: action.title
+ };
+ }
+};
+export const PrintProvider = ({children}) => {
+ const [printDetails, printDispatch] = useReducer(reducer, {title: '', count: 0});
+ return (
+
+ {children}
+
+ );
+};
\ No newline at end of file
diff --git a/src/lib/app/hooks/usePrint.jsx b/src/lib/app/hooks/usePrint.jsx
new file mode 100644
index 0000000..35a1017
--- /dev/null
+++ b/src/lib/app/hooks/usePrint.jsx
@@ -0,0 +1,18 @@
+import {useContext} from "react";
+import {PrintContext} from "@/lib/app/contexts/print";
+
+const usePrint = () => {
+ const {printDetails, printDispatch} = useContext(PrintContext);
+
+ const setPrintPage = (count) => {
+ printDispatch({type: 'SET_PRINT_PAGE', count})
+ }
+
+ const setPrintTitle = (title) => {
+ printDispatch({type: 'SET_PRINT_TITLE', title})
+ }
+
+ return {printDetails, setPrintPage, setPrintTitle}
+};
+
+export default usePrint;
\ No newline at end of file
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx
index 8d2f3b0..9824687 100644
--- a/src/pages/_app.jsx
+++ b/src/pages/_app.jsx
@@ -9,6 +9,7 @@ import {NextIntlProvider} from "next-intl";
import TitlePage from "@/core/components/TitlePage";
import Layout from "@/layouts";
import {ToastProvider} from "@/lib/app/contexts/toast";
+import {PrintProvider} from "@/lib/app/contexts/print";
const App = ({Component, pageProps}) => {
@@ -22,9 +23,11 @@ const App = ({Component, pageProps}) => {
-
-
-
+
+
+
+
+
diff --git a/src/pages/dashboard/machinery-expert/prints/report.jsx b/src/pages/dashboard/machinery-expert/prints/report.jsx
new file mode 100644
index 0000000..526851b
--- /dev/null
+++ b/src/pages/dashboard/machinery-expert/prints/report.jsx
@@ -0,0 +1,21 @@
+import {parse} from "next-useragent";
+import ReportComponent from "@/components/dashboard/machinary-office/Prints/report";
+
+export default function Report() {
+ 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.machinary_office_page",
+ isBot,
+ locale,
+ layout: {name: 'PrintLayout'}
+ },
+ };
+}
\ No newline at end of file
diff --git a/src/pages/dashboard/passenger-boss/prints/final-credit-amount.jsx b/src/pages/dashboard/passenger-boss/prints/final-credit-amount.jsx
new file mode 100644
index 0000000..0bd763b
--- /dev/null
+++ b/src/pages/dashboard/passenger-boss/prints/final-credit-amount.jsx
@@ -0,0 +1,21 @@
+import {parse} from "next-useragent";
+import FinalCreditAmountComponent from "@/components/dashboard/passenger-boss/Prints/final-credit-amount";
+
+export default function FinalCreditAmount() {
+ 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.passenger_boss_page",
+ isBot,
+ locale,
+ layout: {name: 'PrintLayout'}
+ },
+ };
+}
\ No newline at end of file