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 @@ - - - - - - - - - MARHABA - - - 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 ( + + ) +} + +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 ( + + ) +} + +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 ( + <> + + + + + + + {t("header.logout")} + + + + + ); +} 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) => ( + + + + {profile_item.icon} + + + {t(profile_item.name)} + + + + ))} + + + ); +} 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