From 6cf30a591c20679584a2934fe8b78d6f58c2a016 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Tue, 14 Jul 2026 08:59:49 +0330 Subject: [PATCH 1/4] add delete violation and base report page --- .../diverReports/DriverReportsList.jsx | 20 +++--- .../reports/diverReports/index.jsx | 62 +++++++---------- .../machinesReports/MachinesReportsList.jsx | 32 ++++++--- .../reports/machinesReports/index.jsx | 62 +++++++---------- .../MachinesReportsList.jsx | 22 ++++-- .../reports/machinesTypeReports/index.jsx | 69 ++++++++----------- .../Actions/DeleteViolation/DeleteContent.jsx | 42 +++++++++++ .../Actions/DeleteViolation/index.jsx | 33 +++++++++ .../violations/RowActions/index.jsx | 2 + .../violations/ViolationsList.jsx | 27 -------- src/core/utils/routes.js | 5 +- 11 files changed, 209 insertions(+), 167 deletions(-) create mode 100644 src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/DeleteContent.jsx create mode 100644 src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/index.jsx diff --git a/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx b/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx index bca2edf..1c18129 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx @@ -4,16 +4,18 @@ import { Box } from "@mui/material"; import { useMemo } from "react"; import Toolbar from "./Toolbar"; import RowActions from "./RowActions"; +import { GET_DRIVERS_ACTIVITY_REPORT } from "@/core/utils/routes"; -const DriverReportsList = ({ data, specialFilter }) => { +const DriverReportsList = ({ specialFilter }) => { const columns = useMemo(() => { return [ { accessorKey: "driver_id", header: "کد یکتا", id: "driver_id", - enableColumnFilter: false, - enableSorting: false, + enableColumnFilter: true, + columnFilterModeOptions: ["equals", "contains"], + enableSorting: true, datatype: "numeric", grow: false, size: 50, @@ -22,8 +24,9 @@ const DriverReportsList = ({ data, specialFilter }) => { accessorKey: "driver_name", header: "نام راننده", id: "driver_name", - enableColumnFilter: false, - enableSorting: false, + enableColumnFilter: true, + columnFilterModeOptions: ["equals", "contains"], + enableSorting: true, datatype: "text", grow: false, size: 50, @@ -33,7 +36,7 @@ const DriverReportsList = ({ data, specialFilter }) => { header: "کارکرد", id: "func", enableColumnFilter: false, - enableSorting: false, + enableSorting: true, datatype: "number", grow: false, size: 50, @@ -43,7 +46,7 @@ const DriverReportsList = ({ data, specialFilter }) => { header: "تعداد ماموریت", id: "missions", enableColumnFilter: false, - enableSorting: false, + enableSorting: true, datatype: "number", grow: false, size: 50, @@ -56,8 +59,9 @@ const DriverReportsList = ({ data, specialFilter }) => { { - const [data, setData] = useState(null); const { data: userPermissions } = usePermissions(); const { user } = useAuth(); - const requestServer = useRequest(); const hasProvincesPermission = userPermissions?.includes("mission-report-country"); const defaultValues = { @@ -32,38 +28,32 @@ const DriverReportsPage = () => { ]; const [specialFilter, setSpecialFilter] = useState(defaultFilter); - const onSearchSubmit = async (data) => { - const params = new URLSearchParams(); - params.set("from_date", `${data.from_date} 00:00:00`); - params.set("date_to", `${data.date_to} 23:59:59`); - setSpecialFilter([ - { value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" }, - { value: `${data.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" }, - { value: `${data.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" }, - ]); - if (data.province_id === "-1") { - try { - const response = await requestServer(`${GET_DRIVER_COUNTRY_ACTIVITY_REPORT}?${params}`); - const result = response.data.data; + const onSearchSubmit = (data) => { + const filters = [ + { + value: `${data.from_date} 00:00:00`, + datatype: "date", + id: "start_time", + fn: "greaterThan", + }, + { + value: `${data.date_to} 23:59:59`, + datatype: "date", + id: "finish_time", + fn: "lessThan", + }, + ]; - setData({ - data: result.activities, - filters: data, - }); - } catch (e) {} - } else { - try { - params.set("province_id", `${data.province_id}`); - const response = await requestServer(`${GET_DRIVER_PROVINCE_ACTIVITY_REPORT}?${params}`); - - const result = response.data.data; - - setData({ - data: result.activities, - filters: data, - }); - } catch (e) {} + if (data.province_id !== "-1") { + filters.unshift({ + value: data.province_id, + datatype: "numeric", + id: "province_id", + fn: "equals", + }); } + + setSpecialFilter(filters); }; useEffect(() => { @@ -100,7 +90,7 @@ const DriverReportsPage = () => { handleSubmit={handleSubmit} onSearchSubmit={onSearchSubmit} /> - {!data ? : } + ); }; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx index ca50d9c..baaa830 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx @@ -4,17 +4,23 @@ import { Box } from "@mui/material"; import { useMemo } from "react"; import Toolbar from "./Toolbar"; import RowActions from "./RowActions"; +import { + GET_MACHINES_ACTIVITY_REPORT, + GET_MACHINES_COUNTRY_ACTIVITY_REPORT, + GET_MACHINES_PROVINCE_ACTIVITY_REPORT, +} from "@/core/utils/routes"; -const MachinesReportsList = ({ data, specialFilter }) => { +const MachinesReportsList = ({ specialFilter }) => { const columns = useMemo(() => { return [ { accessorKey: "machine_id", header: "کد یکتا", id: "machine_id", - enableColumnFilter: false, - enableSorting: false, - datatype: "numeric", + enableColumnFilter: true, + columnFilterModeOptions: ["equals", "contains"], + enableSorting: true, + datatype: "text", grow: false, size: 50, }, @@ -22,8 +28,9 @@ const MachinesReportsList = ({ data, specialFilter }) => { accessorKey: "car_name", header: "مدل ماشین", id: "car_name", - enableColumnFilter: false, - enableSorting: false, + enableColumnFilter: true, + columnFilterModeOptions: ["equals", "contains"], + enableSorting: true, datatype: "text", grow: false, size: 50, @@ -32,8 +39,9 @@ const MachinesReportsList = ({ data, specialFilter }) => { accessorKey: "machine_code", header: "کد ماشین", id: "machine_code", - enableColumnFilter: false, - enableSorting: false, + enableColumnFilter: true, + columnFilterModeOptions: ["equals", "contains"], + enableSorting: true, datatype: "text", grow: false, size: 50, @@ -43,6 +51,7 @@ const MachinesReportsList = ({ data, specialFilter }) => { header: "کارکرد", id: "func", enableColumnFilter: false, + columnFilterModeOptions: ["equals", "contains"], enableSorting: false, datatype: "number", grow: false, @@ -53,7 +62,7 @@ const MachinesReportsList = ({ data, specialFilter }) => { header: "تعداد ماموریت", id: "missions", enableColumnFilter: false, - enableSorting: false, + enableSorting: true, datatype: "number", grow: false, size: 50, @@ -67,11 +76,12 @@ const MachinesReportsList = ({ data, specialFilter }) => { diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/index.jsx index af47ba9..8c4eb68 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/index.jsx @@ -1,11 +1,9 @@ "use client"; import PageTitle from "@/core/components/PageTitle"; -import { GET_MACHINES_COUNTRY_ACTIVITY_REPORT, GET_MACHINES_PROVINCE_ACTIVITY_REPORT } from "@/core/utils/routes"; import { useAuth } from "@/lib/contexts/auth"; import { usePermissions } from "@/lib/hooks/usePermissions"; -import useRequest from "@/lib/hooks/useRequest"; import { yupResolver } from "@hookform/resolvers/yup"; -import { LinearProgress, Stack } from "@mui/material"; +import { Stack } from "@mui/material"; import moment from "jalali-moment"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; @@ -14,10 +12,8 @@ import MachinesReportsList from "./MachinesReportsList"; import SearchReportList from "./Search"; const MachinesReportsPage = () => { - const [data, setData] = useState(null); const { data: userPermissions } = usePermissions(); const { user } = useAuth(); - const requestServer = useRequest(); const hasProvincesPermission = userPermissions?.includes("mission-report-country"); const defaultValues = { @@ -32,38 +28,32 @@ const MachinesReportsPage = () => { ]; const [specialFilter, setSpecialFilter] = useState(defaultFilter); - const onSearchSubmit = async (data) => { - const params = new URLSearchParams(); - params.set("from_date", `${data.from_date} 00:00:00`); - params.set("date_to", `${data.date_to} 23:59:59`); - setSpecialFilter([ - { value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" }, - { value: `${data.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" }, - { value: `${data.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" }, - ]); - if (data.province_id === "-1") { - try { - const response = await requestServer(`${GET_MACHINES_COUNTRY_ACTIVITY_REPORT}?${params}`); - const result = response.data.data; + const onSearchSubmit = (data) => { + const filters = [ + { + value: `${data.from_date} 00:00:00`, + datatype: "date", + id: "start_time", + fn: "greaterThan", + }, + { + value: `${data.date_to} 23:59:59`, + datatype: "date", + id: "finish_time", + fn: "lessThan", + }, + ]; - setData({ - data: result.activities, - filters: data, - }); - } catch (e) {} - } else { - try { - params.set("province_id", `${data.province_id}`); - const response = await requestServer(`${GET_MACHINES_PROVINCE_ACTIVITY_REPORT}?${params}`); - - const result = response.data.data; - - setData({ - data: result.activities, - filters: data, - }); - } catch (e) {} + if (data.province_id !== "-1") { + filters.unshift({ + value: data.province_id, + datatype: "numeric", + id: "province_id", + fn: "equals", + }); } + + setSpecialFilter(filters); }; useEffect(() => { @@ -100,7 +90,7 @@ const MachinesReportsPage = () => { handleSubmit={handleSubmit} onSearchSubmit={onSearchSubmit} /> - {!data ? : } + ); }; diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx index 4f8b994..198b001 100644 --- a/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx @@ -3,17 +3,22 @@ import DataTableWithAuth from "@/core/components/DataTableWithAuth"; import { Box } from "@mui/material"; import { useMemo } from "react"; import Toolbar from "./Toolbar"; +import { + GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT, + GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT, +} from "@/core/utils/routes"; // import RowActions from "./RowActions"; -const MachinesReportsList = ({ data, specialFilter }) => { +const MachinesReportsList = ({ specialFilter }) => { const columns = useMemo(() => { return [ { accessorKey: "car_type", header: "نوع ماشین", id: "car_type", - enableColumnFilter: false, - enableSorting: false, + enableColumnFilter: true, + columnFilterModeOptions: ["equals", "contains"], + enableSorting: true, datatype: "text", grow: false, size: 50, @@ -23,7 +28,7 @@ const MachinesReportsList = ({ data, specialFilter }) => { header: "کارکرد", id: "func", enableColumnFilter: false, - enableSorting: false, + enableSorting: true, datatype: "number", grow: false, size: 50, @@ -33,7 +38,7 @@ const MachinesReportsList = ({ data, specialFilter }) => { header: "تعداد ماموریت", id: "missions", enableColumnFilter: false, - enableSorting: false, + enableSorting: true, datatype: "number", grow: false, size: 50, @@ -46,11 +51,16 @@ const MachinesReportsList = ({ data, specialFilter }) => { x.id === "province_id")?.value === "-1" + ? GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT + : GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT + } page_name={"roadMissionReportMachineTypeReport"} table_name={"roadMissionReportMachineTypeReportList"} enablePagination={false} specialFilter={specialFilter} + need_filter={true} // enableRowActions // RowActions={RowActions} /> diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/index.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/index.jsx index add1f5c..6982d6a 100644 --- a/src/components/dashboard/roadMissions/reports/machinesTypeReports/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/index.jsx @@ -1,14 +1,9 @@ "use client"; import PageTitle from "@/core/components/PageTitle"; -import { - GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT, - GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT, -} from "@/core/utils/routes"; import { useAuth } from "@/lib/contexts/auth"; import { usePermissions } from "@/lib/hooks/usePermissions"; -import useRequest from "@/lib/hooks/useRequest"; import { yupResolver } from "@hookform/resolvers/yup"; -import { LinearProgress, Stack } from "@mui/material"; +import { Stack } from "@mui/material"; import moment from "jalali-moment"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; @@ -17,10 +12,8 @@ import MachinesReportsList from "./MachinesReportsList"; import SearchReportList from "./Search"; const MachinesTypeReportsPage = () => { - const [data, setData] = useState(null); const { data: userPermissions } = usePermissions(); const { user } = useAuth(); - const requestServer = useRequest(); const hasProvincesPermission = userPermissions?.includes("mission-report-country"); const defaultValues = { @@ -30,43 +23,37 @@ const MachinesTypeReportsPage = () => { }; const defaultFilter = [ { value: `${defaultValues.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" }, - { value: `${defaultValues.from_date}`, datatype: "date", id: "from_date", fn: "between" }, - { value: `${defaultValues.date_to}`, datatype: "date", id: "date_to", fn: "between" }, + { value: `${defaultValues.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" }, + { value: `${defaultValues.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" }, ]; const [specialFilter, setSpecialFilter] = useState(defaultFilter); - const onSearchSubmit = async (data) => { - const params = new URLSearchParams(); - params.set("from_date", `${data.from_date} 00:00:00`); - params.set("date_to", `${data.date_to} 23:59:59`); - setSpecialFilter([ - { value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" }, - { value: `${data.from_date}`, datatype: "date", id: "from_date", fn: "between" }, - { value: `${data.date_to}`, datatype: "date", id: "date_to", fn: "between" }, - ]); - if (data.province_id === "-1") { - try { - const response = await requestServer(`${GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT}?${params}`); - const result = response.data.data; + const onSearchSubmit = (data) => { + const filters = [ + { + value: `${data.from_date} 00:00:00`, + datatype: "date", + id: "start_time", + fn: "greaterThan", + }, + { + value: `${data.date_to} 23:59:59`, + datatype: "date", + id: "finish_time", + fn: "lessThan", + }, + ]; - setData({ - data: result.activities, - filters: data, - }); - } catch (e) {} - } else { - try { - params.set("province_id", `${data.province_id}`); - const response = await requestServer(`${GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT}?${params}`); - - const result = response.data.data; - - setData({ - data: result.activities, - filters: data, - }); - } catch (e) {} + if (data.province_id !== "-1") { + filters.unshift({ + value: data.province_id, + datatype: "numeric", + id: "province_id", + fn: "equals", + }); } + + setSpecialFilter(filters); }; useEffect(() => { @@ -103,7 +90,7 @@ const MachinesTypeReportsPage = () => { handleSubmit={handleSubmit} onSearchSubmit={onSearchSubmit} /> - {!data ? : } + ); }; diff --git a/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/DeleteContent.jsx b/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/DeleteContent.jsx new file mode 100644 index 0000000..004dc4d --- /dev/null +++ b/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/DeleteContent.jsx @@ -0,0 +1,42 @@ +import { Button, DialogActions, DialogContent, Stack, Typography } from "@mui/material"; +import React, { useState } from "react"; +import useRequest from "@/lib/hooks/useRequest"; +import { DELETE_VIOLATION } from "@/core/utils/routes"; + +const DeleteContent = ({ rowId, mutate, setOpenDeleteDialog }) => { + const [submitting, setSubmitting] = useState(false); + const requestServer = useRequest({ notificationSuccess: true }); + const handleClick = () => { + setSubmitting(true); + requestServer(`${DELETE_VIOLATION}/${rowId}`, "post", { + hasSidebarUpdate: true, + }) + .then(() => { + mutate(); + setOpenDeleteDialog(false); + setSubmitting(false); + }) + .catch(() => { + setSubmitting(false); + }); + }; + return ( + <> + + + آیا از حذف تخلف اطمینان دارید؟ + + + + + + + + ); +}; + +export default DeleteContent; diff --git a/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/index.jsx b/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/index.jsx new file mode 100644 index 0000000..2d36395 --- /dev/null +++ b/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/index.jsx @@ -0,0 +1,33 @@ +import { useState } from "react"; +import { Dialog, DialogTitle, IconButton, Tooltip } from "@mui/material"; +import DeleteIcon from "@mui/icons-material/Delete"; +import DeleteContent from "./DeleteContent"; + +const DeleteViolation = ({ mutate, rowId }) => { + const [openDeleteDialog, setOpenDeleteDialog] = useState(false); + + return ( + <> + + setOpenDeleteDialog(true)}> + + + + setOpenDeleteDialog(false)} + PaperProps={{ + sx: { + boxShadow: "rgba(60, 64, 67, 0.3) 0px 1px 16px 0px, rgba(60, 64, 67, 0.15) 0px 1px 10px 0px", + }, + }} + dir="rtl" + maxWidth={"md"} + > + حذف تخلف + + + + ); +} +export default DeleteViolation \ No newline at end of file diff --git a/src/components/dashboard/roadMissions/violations/RowActions/index.jsx b/src/components/dashboard/roadMissions/violations/RowActions/index.jsx index 7d45f68..3725894 100644 --- a/src/components/dashboard/roadMissions/violations/RowActions/index.jsx +++ b/src/components/dashboard/roadMissions/violations/RowActions/index.jsx @@ -1,5 +1,6 @@ // import CreateWithoutProcess from "../Actions/CreateWithoutProcess"; import EditViolation from "../Actions/EditViolation"; +import DeleteViolation from "../Actions/DeleteViolation"; const RowActions = ({ row, mutate }) => { // const canEdit = row.original.status === 0 && row.original.type === 1; @@ -7,6 +8,7 @@ const RowActions = ({ row, mutate }) => { <> {!row.original.mileage && } {/*{canEdit && }*/} + ); }; diff --git a/src/components/dashboard/roadMissions/violations/ViolationsList.jsx b/src/components/dashboard/roadMissions/violations/ViolationsList.jsx index 0f4f5fe..0827966 100644 --- a/src/components/dashboard/roadMissions/violations/ViolationsList.jsx +++ b/src/components/dashboard/roadMissions/violations/ViolationsList.jsx @@ -61,23 +61,6 @@ const ViolationsList = () => { columnFilterModeOptions: ["equals", "contains"], grow: false, }, - { - accessorKey: "status", - header: "وضعیت", - id: "status", - enableColumnFilter: true, - datatype: "numeric", - filterMode: "equals", - sortDescFirst: true, - grow: false, - columnSelectOption: () => { - return violationsCategoryStatus.map((category) => ({ - value: category.id, - label: category.name_fa, - })); - }, - Cell: ({ row }) => (row.original.type === 1 ? "خروج بدون مجوز" : "عدم تحرک"), - }, { accessorKey: "machine_code", header: "کد خودرو", @@ -142,16 +125,6 @@ const ViolationsList = () => { grow: false, Cell: ({ row }) => row.original.machine?.car_name || "-", }, - { - accessorKey: "mission_id", - header: "کد ماموریت", - id: "mission_id", - enableColumnFilter: false, - datatype: "numeric", - filterMode: "equals", - grow: false, - Cell: ({ row }) => row.original.mission_id || "-", - }, { accessorKey: "request_date", header: "تاریخ تخلف", diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js index e8cd60f..ce5e6ff 100644 --- a/src/core/utils/routes.js +++ b/src/core/utils/routes.js @@ -249,14 +249,14 @@ export const FINISH_MISSION = api + "/api/v3/missions/control_unit/finish"; export const GET_ROAD_MISSIONS_VIOLATIONS_LIST = api + "/api/v3/missions/violation_management"; export const GET_MISSION_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report/country_activity"; export const GET_MISSION_CITY_ACTIVITY_REPORT = api + "/api/v3/missions/report/country_activity"; -export const GET_MACHINES_COUNTRY_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/country_machines_activity"; +export const GET_MACHINES_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/machines_activity"; export const GET_MACHINES_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machines_activity"; export const EXPORT_GET_MACHINES_COUNTRY_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/country_machines_activity_excel"; export const EXPORT_GET_MACHINES_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machines_activity_excel"; -export const GET_DRIVER_COUNTRY_ACTIVITY_REPORT = +export const GET_DRIVERS_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/country_machine_drivers_activity"; export const GET_DRIVER_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machine_drivers_activity"; @@ -275,6 +275,7 @@ export const EXPORT_GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machine_types_activity_excel"; export const CREATE_VIOLATION = api + "/api/v3/missions/violation_management"; export const EDIT_VIOLATION = api + "/api/v3/missions/violation_management"; +export const DELETE_VIOLATION = api + "/api/v3/missions/violation_management"; export const EXPORT_COUNTRY_ROAD_MISSIONS_REPORTS = api + "/api/v3/missions/report/country_excel_activity"; export const EXPORT_PROVINCE_ROAD_MISSIONS_REPORTS = api + "/api/v3/missions/report/province_excel_activity"; From 2c7679e52bc929b099ba5258bfbc34860e968b2f Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Tue, 14 Jul 2026 14:44:21 +0330 Subject: [PATCH 2/4] add excel report to road missions --- .../diverReports/DriverReportsList.jsx | 4 +- .../reports/diverReports/ExcelPrint/index.jsx | 11 +-- .../DriverList/ExcelPrint/index.jsx | 79 +++++++++++++++++++ .../DriverList/Toolbar.jsx | 11 +++ .../DriverDetailsDialog/DriverList/index.jsx | 7 +- .../machinesReports/ExcelPrint/index.jsx | 15 +--- .../machinesReports/MachinesReportsList.jsx | 8 +- .../MachineMissionsList/ExcelPrint/index.jsx | 70 ++++++++++++++++ .../MachineMissionsList/Toolbar.jsx | 11 +++ .../MachineMissionsList/index.jsx | 2 + .../machinesTypeReports/ExcelPrint/index.jsx | 15 +--- .../MachinesReportsList.jsx | 16 ++-- .../MachineMissionsList/ExcelPrint/index.jsx | 72 +++++++++++++++++ .../MachineMissionsList/Toolbar.jsx | 11 +++ .../MachineMissionsList/index.jsx | 9 ++- .../machinesTypeReports/RowActions/index.jsx | 6 +- src/core/components/DataTable/Main.js | 17 +++- src/core/utils/routes.js | 17 ++-- 18 files changed, 325 insertions(+), 56 deletions(-) create mode 100644 src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/ExcelPrint/index.jsx create mode 100644 src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/Toolbar.jsx create mode 100644 src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx create mode 100644 src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/Toolbar.jsx create mode 100644 src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx create mode 100644 src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/Toolbar.jsx diff --git a/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx b/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx index 1c18129..42425c7 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx @@ -14,6 +14,7 @@ const DriverReportsList = ({ specialFilter }) => { header: "کد یکتا", id: "driver_id", enableColumnFilter: true, + filterMode: "equals", columnFilterModeOptions: ["equals", "contains"], enableSorting: true, datatype: "numeric", @@ -25,6 +26,7 @@ const DriverReportsList = ({ specialFilter }) => { header: "نام راننده", id: "driver_name", enableColumnFilter: true, + filterMode: "equals", columnFilterModeOptions: ["equals", "contains"], enableSorting: true, datatype: "text", @@ -36,7 +38,7 @@ const DriverReportsList = ({ specialFilter }) => { header: "کارکرد", id: "func", enableColumnFilter: false, - enableSorting: true, + enableSorting: false, datatype: "number", grow: false, size: 50, diff --git a/src/components/dashboard/roadMissions/reports/diverReports/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/diverReports/ExcelPrint/index.jsx index daab8a9..a7ad42c 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/ExcelPrint/index.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/ExcelPrint/index.jsx @@ -1,7 +1,6 @@ "use client"; import { - EXPORT_GET_DRIVER_COUNTRY_ACTIVITY_REPORT, - EXPORT_GET_DRIVER_PROVINCE_ACTIVITY_REPORT, + EXPORT_GET_DRIVER_ACTIVITY_REPORT, } from "@/core/utils/routes"; import useRequest from "@/lib/hooks/useRequest"; import { useTheme } from "@emotion/react"; @@ -34,11 +33,7 @@ const PrintExcel = ({ table, filterData }) => { const clickHandler = () => { setLoading(true); - const CountryOrProvince = activeFilters.find((item) => item.id === "province_id"); - const requestUrl = - CountryOrProvince.value === "-1" - ? EXPORT_GET_DRIVER_COUNTRY_ACTIVITY_REPORT - : EXPORT_GET_DRIVER_PROVINCE_ACTIVITY_REPORT; + const requestUrl = EXPORT_GET_DRIVER_ACTIVITY_REPORT requestServer(`${requestUrl}?${filterParams}`, "get", { requestOptions: { responseType: "blob" }, }) @@ -66,7 +61,7 @@ const PrintExcel = ({ table, filterData }) => { disabled={loading} sx={{ textTransform: "unset", alignSelf: "center" }} startIcon={loading ? : } - onClick={clickHandler} + // onClick={clickHandler} > خروجی اکسل diff --git a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/ExcelPrint/index.jsx new file mode 100644 index 0000000..ed6023a --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/ExcelPrint/index.jsx @@ -0,0 +1,79 @@ +"use client"; +import { EXPORT_GET_DRIVER_DETAILS_ACTIVITY_REPORT } from "@/core/utils/routes"; +import useRequest from "@/lib/hooks/useRequest"; +import { useTheme } from "@emotion/react"; +import DescriptionIcon from "@mui/icons-material/Description"; +import { Button, CircularProgress, IconButton, useMediaQuery } from "@mui/material"; +import FileSaver from "file-saver"; +import moment from "jalali-moment"; +import { useMemo, useState } from "react"; + +const PrintExcel = ({ table, filterData, specialFilterData }) => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + const [loading, setLoading] = useState(false); + const requestServer = useRequest({ notificationSuccess: true }); + const activeFilters = Object.entries(filterData).reduce((acc, [key, filter]) => { + if (filter.value) { + acc.push({ id: filter.id, value: filter.value }); + } + return acc; + }, []); + const activeSpecialFilters = Object.entries(specialFilterData).reduce((acc, [key, filter]) => { + if (filter.value) { + acc.push({ id: filter.id, value: filter.value }); + } + return acc; + }, []); + const filterParams = useMemo(() => { + const params = new URLSearchParams(); + activeFilters.length > 0 && + activeFilters.map((filter, index) => { + params.set(`${filter.id}`, filter.value); + }); + activeSpecialFilters.length > 0 && + activeSpecialFilters.map((filter, index) => { + params.set(`${filter.id}`, filter.value); + }); + return params; + }, [activeFilters, activeSpecialFilters]); + + const clickHandler = () => { + setLoading(true); + const requestUrl = EXPORT_GET_DRIVER_DETAILS_ACTIVITY_REPORT; + requestServer(`${requestUrl}?${filterParams}`, "get", { + requestOptions: { responseType: "blob" }, + }) + .then((response) => { + const filename = `خروجی کارتابل ریزگزارشات راننده تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`; + FileSaver.saveAs(response.data, filename); + }) + .catch(() => {}) + .finally(() => { + setLoading(false); + }); + }; + + return ( + <> + {isMobile ? ( + + + + ) : ( + + )} + + ); +}; +export default PrintExcel; diff --git a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/Toolbar.jsx b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/Toolbar.jsx new file mode 100644 index 0000000..fab6fb8 --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/Toolbar.jsx @@ -0,0 +1,11 @@ +import { Box } from "@mui/material"; +import PrintExcel from "./ExcelPrint"; + +const Toolbar = ({ table, filterData, specialFilterData, mutate }) => { + return ( + + + + ); +}; +export default Toolbar; diff --git a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/index.jsx b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/index.jsx index 3c12ce3..0a4d142 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/index.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/index.jsx @@ -5,6 +5,7 @@ import useCities from "@/lib/hooks/useCities"; import useProvinces from "@/lib/hooks/useProvince"; import { Box } from "@mui/material"; import { useMemo } from "react"; +import Toolbar from "./Toolbar"; const DriverList = ({ row, specialFilter }) => { const columns = useMemo(() => { @@ -155,11 +156,15 @@ const DriverList = ({ row, specialFilter }) => { <> { const clickHandler = () => { setLoading(true); - const CountryOrProvince = activeFilters.find((item) => item.id === "province_id"); - const requestUrl = - CountryOrProvince.value === "-1" - ? EXPORT_GET_MACHINES_COUNTRY_ACTIVITY_REPORT - : EXPORT_GET_MACHINES_PROVINCE_ACTIVITY_REPORT; + const requestUrl = EXPORT_GET_MACHINES_ACTIVITY_REPORT requestServer(`${requestUrl}?${filterParams}`, "get", { requestOptions: { responseType: "blob" }, }) .then((response) => { - const filename = `خروجی کارتابل گزارشات گشت راهداری تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`; + const filename = `خروجی کارتابل گزارشات ماشین ها تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`; FileSaver.saveAs(response.data, filename); }) .catch(() => {}) @@ -66,7 +59,7 @@ const PrintExcel = ({ table, filterData }) => { disabled={loading} sx={{ textTransform: "unset", alignSelf: "center" }} startIcon={loading ? : } - onClick={clickHandler} + // onClick={clickHandler} > خروجی اکسل diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx index baaa830..726d021 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx @@ -18,6 +18,7 @@ const MachinesReportsList = ({ specialFilter }) => { header: "کد یکتا", id: "machine_id", enableColumnFilter: true, + filterMode: "equals", columnFilterModeOptions: ["equals", "contains"], enableSorting: true, datatype: "text", @@ -28,7 +29,8 @@ const MachinesReportsList = ({ specialFilter }) => { accessorKey: "car_name", header: "مدل ماشین", id: "car_name", - enableColumnFilter: true, + enableColumnFilter: false, + filterMode: "equals", columnFilterModeOptions: ["equals", "contains"], enableSorting: true, datatype: "text", @@ -41,7 +43,7 @@ const MachinesReportsList = ({ specialFilter }) => { id: "machine_code", enableColumnFilter: true, columnFilterModeOptions: ["equals", "contains"], - enableSorting: true, + enableSorting: false, datatype: "text", grow: false, size: 50, @@ -52,7 +54,7 @@ const MachinesReportsList = ({ specialFilter }) => { id: "func", enableColumnFilter: false, columnFilterModeOptions: ["equals", "contains"], - enableSorting: false, + enableSorting: true, datatype: "number", grow: false, size: 50, diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx new file mode 100644 index 0000000..3efb595 --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx @@ -0,0 +1,70 @@ +"use client"; +import { EXPORT_GET_MACHINES_ACTIVITY_REPORT } from "@/core/utils/routes"; +import useRequest from "@/lib/hooks/useRequest"; +import { useTheme } from "@emotion/react"; +import DescriptionIcon from "@mui/icons-material/Description"; +import { Button, CircularProgress, IconButton, useMediaQuery } from "@mui/material"; +import FileSaver from "file-saver"; +import moment from "jalali-moment"; +import { useMemo, useState } from "react"; + +const PrintExcel = ({ table, filterData }) => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + const [loading, setLoading] = useState(false); + const requestServer = useRequest({ notificationSuccess: true }); + const activeFilters = Object.entries(filterData).reduce((acc, [key, filter]) => { + if (filter.value) { + acc.push({ id: filter.id, value: filter.value }); + } + return acc; + }, []); + + const filterParams = useMemo(() => { + const params = new URLSearchParams(); + activeFilters.length > 0 && + activeFilters.map((filter, index) => { + params.set(`${filter.id}`, filter.value); + }); + return params; + }, [activeFilters]); + + const clickHandler = () => { + setLoading(true); + const requestUrl = EXPORT_GET_MACHINES_ACTIVITY_REPORT + requestServer(`${requestUrl}?${filterParams}`, "get", { + requestOptions: { responseType: "blob" }, + }) + .then((response) => { + const filename = `خروجی کارتابل گزارشات ماشین ها تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`; + FileSaver.saveAs(response.data, filename); + }) + .catch(() => {}) + .finally(() => { + setLoading(false); + }); + }; + + return ( + <> + {isMobile ? ( + + + + ) : ( + + )} + + ); +}; +export default PrintExcel; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/Toolbar.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/Toolbar.jsx new file mode 100644 index 0000000..afc132c --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/Toolbar.jsx @@ -0,0 +1,11 @@ +import { Box } from "@mui/material"; +import PrintExcel from "./ExcelPrint"; + +const Toolbar = ({ table, filterData, mutate }) => { + return ( + + + + ); +}; +export default Toolbar; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx index 57a5ef9..5a83510 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx @@ -5,6 +5,7 @@ import useCities from "@/lib/hooks/useCities"; import useProvinces from "@/lib/hooks/useProvince"; import { Box } from "@mui/material"; import { useMemo } from "react"; +import Toolbar from "./Toolbar"; const MachineMissionsList = ({ row, specialFilter }) => { const columns = useMemo(() => { @@ -156,6 +157,7 @@ const MachineMissionsList = ({ row, specialFilter }) => { { const clickHandler = () => { setLoading(true); - const CountryOrProvince = activeFilters.find((item) => item.id === "province_id"); - const requestUrl = - CountryOrProvince.value === "-1" - ? EXPORT_GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT - : EXPORT_GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT; + const requestUrl = EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT; requestServer(`${requestUrl}?${filterParams}`, "get", { requestOptions: { responseType: "blob" }, }) .then((response) => { - const filename = `خروجی کارتابل گزارشات گشت راهداری تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`; + const filename = `خروجی کارتابل گزارشات نوع ماشین تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`; FileSaver.saveAs(response.data, filename); }) .catch(() => {}) @@ -68,7 +61,7 @@ const PrintExcel = ({ table, filterData }) => { disabled={loading} sx={{ textTransform: "unset", alignSelf: "center" }} startIcon={loading ? : } - onClick={clickHandler} + // onClick={clickHandler} > خروجی اکسل diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx index 198b001..c6b9e55 100644 --- a/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx @@ -4,10 +4,9 @@ import { Box } from "@mui/material"; import { useMemo } from "react"; import Toolbar from "./Toolbar"; import { - GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT, - GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT, + GET_MACHINES_TYPE_ACTIVITY_REPORT, } from "@/core/utils/routes"; -// import RowActions from "./RowActions"; +import RowActions from "./RowActions"; const MachinesReportsList = ({ specialFilter }) => { const columns = useMemo(() => { @@ -17,6 +16,7 @@ const MachinesReportsList = ({ specialFilter }) => { header: "نوع ماشین", id: "car_type", enableColumnFilter: true, + filterMode: "equals", columnFilterModeOptions: ["equals", "contains"], enableSorting: true, datatype: "text", @@ -51,18 +51,14 @@ const MachinesReportsList = ({ specialFilter }) => { x.id === "province_id")?.value === "-1" - ? GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT - : GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT - } + table_url={GET_MACHINES_TYPE_ACTIVITY_REPORT} page_name={"roadMissionReportMachineTypeReport"} table_name={"roadMissionReportMachineTypeReportList"} enablePagination={false} specialFilter={specialFilter} need_filter={true} - // enableRowActions - // RowActions={RowActions} + enableRowActions + RowActions={RowActions} /> ); diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx new file mode 100644 index 0000000..40242e8 --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx @@ -0,0 +1,72 @@ +"use client"; +import { + EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT, +} from "@/core/utils/routes"; +import useRequest from "@/lib/hooks/useRequest"; +import { useTheme } from "@emotion/react"; +import DescriptionIcon from "@mui/icons-material/Description"; +import { Button, CircularProgress, IconButton, useMediaQuery } from "@mui/material"; +import FileSaver from "file-saver"; +import moment from "jalali-moment"; +import { useMemo, useState } from "react"; + +const PrintExcel = ({ table, filterData }) => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + const [loading, setLoading] = useState(false); + const requestServer = useRequest({ notificationSuccess: true }); + const activeFilters = Object.entries(filterData).reduce((acc, [key, filter]) => { + if (filter.value) { + acc.push({ id: filter.id, value: filter.value }); + } + return acc; + }, []); + + const filterParams = useMemo(() => { + const params = new URLSearchParams(); + activeFilters.length > 0 && + activeFilters.map((filter, index) => { + params.set(`${filter.id}`, filter.value); + }); + return params; + }, [activeFilters]); + + const clickHandler = () => { + setLoading(true); + const requestUrl = EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT; + requestServer(`${requestUrl}?${filterParams}`, "get", { + requestOptions: { responseType: "blob" }, + }) + .then((response) => { + const filename = `خروجی کارتابل گزارشات نوع ماشین تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`; + FileSaver.saveAs(response.data, filename); + }) + .catch(() => {}) + .finally(() => { + setLoading(false); + }); + }; + + return ( + <> + {isMobile ? ( + + + + ) : ( + + )} + + ); +}; +export default PrintExcel; diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/Toolbar.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/Toolbar.jsx new file mode 100644 index 0000000..afc132c --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/Toolbar.jsx @@ -0,0 +1,11 @@ +import { Box } from "@mui/material"; +import PrintExcel from "./ExcelPrint"; + +const Toolbar = ({ table, filterData, mutate }) => { + return ( + + + + ); +}; +export default Toolbar; diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx index 87f612d..5fb32f9 100644 --- a/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx @@ -1,7 +1,8 @@ import DataTableWithAuth from "@/core/components/DataTableWithAuth"; -import { GET_MACHINE_MISSIONS_DETAILS, GET_MACHINE_TYPE_MISSIONS_DETAILS } from "@/core/utils/routes"; +import { GET_MACHINE_TYPE_MISSIONS_DETAILS } from "@/core/utils/routes"; import { Box } from "@mui/material"; import { useMemo } from "react"; +import Toolbar from "./Toolbar"; const MachineMissionsList = ({ row }) => { const columns = useMemo( @@ -91,10 +92,14 @@ const MachineMissionsList = ({ row }) => { <> { - return <>{/**/}; + return <> + + ; }; export default RowActions; diff --git a/src/core/components/DataTable/Main.js b/src/core/components/DataTable/Main.js index 61c16cb..3812f4c 100644 --- a/src/core/components/DataTable/Main.js +++ b/src/core/components/DataTable/Main.js @@ -38,6 +38,7 @@ const DataTable_Main = (props) => { RowActions, specific_data, specialFilter, + specialQueries } = props; const flatColumns = flattenArrayOfObjects(columns, "columns"); const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 }); @@ -70,8 +71,15 @@ const DataTable_Main = (props) => { })) ) ); + if (specialQueries) { + Object.entries(specialQueries).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== "") { + params.set(key, String(value)); + } + }); + } return `${table_url}?${params}`; - }, [table_url, filterData, pagination, sortData, specialFilter]); + }, [table_url, filterData, pagination, sortData, specialFilter, specialQueries]); const fetcher = async (url) => { try { @@ -152,7 +160,12 @@ const DataTable_Main = (props) => { renderTopToolbarCustomActions: ({ table }) => ( <> {TableToolbar && ( - + )} ), diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js index ce5e6ff..3bd09ac 100644 --- a/src/core/utils/routes.js +++ b/src/core/utils/routes.js @@ -253,20 +253,27 @@ export const GET_MACHINES_ACTIVITY_REPORT = api + "/api/v3/missions/report_machi export const GET_MACHINES_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machines_activity"; export const EXPORT_GET_MACHINES_COUNTRY_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/country_machines_activity_excel"; +export const EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/machines_activity_excel"; export const EXPORT_GET_MACHINES_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machines_activity_excel"; +export const EXPORT_GET_MACHINES_ACTIVITY_REPORT = + api + "/api/v3/missions/report_machine/machines_activity_excel"; export const GET_DRIVERS_ACTIVITY_REPORT = - api + "/api/v3/missions/report_machine/country_machine_drivers_activity"; -export const GET_DRIVER_PROVINCE_ACTIVITY_REPORT = - api + "/api/v3/missions/report_machine/province_machine_drivers_activity"; + api + "/api/v3/missions/report_machine/machine_drivers_activity"; +export const GET_DRIVER_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machine_drivers_activity"; export const EXPORT_GET_DRIVER_COUNTRY_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/country_machine_drivers_activity_excel"; + +export const EXPORT_GET_DRIVER_ACTIVITY_REPORT = + api + "/api/v3/missions/report_machine/machine_drivers_activity_excel"; +export const EXPORT_GET_DRIVER_DETAILS_ACTIVITY_REPORT = + api + "/api/v3/missions/report_machine/machine_driver_details_report_excel"; export const EXPORT_GET_DRIVER_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machine_drivers_activity_excel"; -export const GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT = - api + "/api/v3/missions/report_machine/country_machine_types_activity"; +export const GET_MACHINES_TYPE_ACTIVITY_REPORT = + api + "/api/v3/missions/report_machine/machine_types_activity"; export const GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machine_types_activity"; export const EXPORT_GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT = From f78a2c3cbb5d6c66d960b6edf79367311cf3ce2e Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Tue, 14 Jul 2026 14:46:03 +0330 Subject: [PATCH 3/4] build and format --- .../reports/diverReports/ExcelPrint/index.jsx | 6 ++---- .../reports/machinesReports/ExcelPrint/index.jsx | 2 +- .../MachineMissionsList/ExcelPrint/index.jsx | 2 +- .../machinesTypeReports/ExcelPrint/index.jsx | 4 +--- .../machinesTypeReports/MachinesReportsList.jsx | 4 +--- .../MachineMissionsList/ExcelPrint/index.jsx | 4 +--- .../machinesTypeReports/RowActions/index.jsx | 8 +++++--- .../violations/Actions/DeleteViolation/index.jsx | 4 ++-- src/core/components/DataTable/Main.js | 2 +- src/core/utils/routes.js | 15 ++++++--------- 10 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/components/dashboard/roadMissions/reports/diverReports/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/diverReports/ExcelPrint/index.jsx index a7ad42c..171225d 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/ExcelPrint/index.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/ExcelPrint/index.jsx @@ -1,7 +1,5 @@ "use client"; -import { - EXPORT_GET_DRIVER_ACTIVITY_REPORT, -} from "@/core/utils/routes"; +import { EXPORT_GET_DRIVER_ACTIVITY_REPORT } from "@/core/utils/routes"; import useRequest from "@/lib/hooks/useRequest"; import { useTheme } from "@emotion/react"; import DescriptionIcon from "@mui/icons-material/Description"; @@ -33,7 +31,7 @@ const PrintExcel = ({ table, filterData }) => { const clickHandler = () => { setLoading(true); - const requestUrl = EXPORT_GET_DRIVER_ACTIVITY_REPORT + const requestUrl = EXPORT_GET_DRIVER_ACTIVITY_REPORT; requestServer(`${requestUrl}?${filterParams}`, "get", { requestOptions: { responseType: "blob" }, }) diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/ExcelPrint/index.jsx index 3efb595..956512e 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/ExcelPrint/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/ExcelPrint/index.jsx @@ -31,7 +31,7 @@ const PrintExcel = ({ table, filterData }) => { const clickHandler = () => { setLoading(true); - const requestUrl = EXPORT_GET_MACHINES_ACTIVITY_REPORT + const requestUrl = EXPORT_GET_MACHINES_ACTIVITY_REPORT; requestServer(`${requestUrl}?${filterParams}`, "get", { requestOptions: { responseType: "blob" }, }) diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx index 3efb595..956512e 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx @@ -31,7 +31,7 @@ const PrintExcel = ({ table, filterData }) => { const clickHandler = () => { setLoading(true); - const requestUrl = EXPORT_GET_MACHINES_ACTIVITY_REPORT + const requestUrl = EXPORT_GET_MACHINES_ACTIVITY_REPORT; requestServer(`${requestUrl}?${filterParams}`, "get", { requestOptions: { responseType: "blob" }, }) diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/ExcelPrint/index.jsx index 40242e8..7907bf6 100644 --- a/src/components/dashboard/roadMissions/reports/machinesTypeReports/ExcelPrint/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/ExcelPrint/index.jsx @@ -1,7 +1,5 @@ "use client"; -import { - EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT, -} from "@/core/utils/routes"; +import { EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT } from "@/core/utils/routes"; import useRequest from "@/lib/hooks/useRequest"; import { useTheme } from "@emotion/react"; import DescriptionIcon from "@mui/icons-material/Description"; diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx index c6b9e55..36aaa07 100644 --- a/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/MachinesReportsList.jsx @@ -3,9 +3,7 @@ import DataTableWithAuth from "@/core/components/DataTableWithAuth"; import { Box } from "@mui/material"; import { useMemo } from "react"; import Toolbar from "./Toolbar"; -import { - GET_MACHINES_TYPE_ACTIVITY_REPORT, -} from "@/core/utils/routes"; +import { GET_MACHINES_TYPE_ACTIVITY_REPORT } from "@/core/utils/routes"; import RowActions from "./RowActions"; const MachinesReportsList = ({ specialFilter }) => { diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx index 40242e8..7907bf6 100644 --- a/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/ExcelPrint/index.jsx @@ -1,7 +1,5 @@ "use client"; -import { - EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT, -} from "@/core/utils/routes"; +import { EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT } from "@/core/utils/routes"; import useRequest from "@/lib/hooks/useRequest"; import { useTheme } from "@emotion/react"; import DescriptionIcon from "@mui/icons-material/Description"; diff --git a/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/index.jsx b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/index.jsx index dda7b8f..9b0c58e 100644 --- a/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesTypeReports/RowActions/index.jsx @@ -1,8 +1,10 @@ import MissionDetails from "./MissionDitails"; const RowActions = ({ row }) => { - return <> - - ; + return ( + <> + + + ); }; export default RowActions; diff --git a/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/index.jsx b/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/index.jsx index 2d36395..9d76672 100644 --- a/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/index.jsx +++ b/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/index.jsx @@ -29,5 +29,5 @@ const DeleteViolation = ({ mutate, rowId }) => { ); -} -export default DeleteViolation \ No newline at end of file +}; +export default DeleteViolation; diff --git a/src/core/components/DataTable/Main.js b/src/core/components/DataTable/Main.js index 3812f4c..55921b7 100644 --- a/src/core/components/DataTable/Main.js +++ b/src/core/components/DataTable/Main.js @@ -38,7 +38,7 @@ const DataTable_Main = (props) => { RowActions, specific_data, specialFilter, - specialQueries + specialQueries, } = props; const flatColumns = flattenArrayOfObjects(columns, "columns"); const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 }); diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js index 3bd09ac..df27692 100644 --- a/src/core/utils/routes.js +++ b/src/core/utils/routes.js @@ -256,24 +256,21 @@ export const EXPORT_GET_MACHINES_COUNTRY_ACTIVITY_REPORT = export const EXPORT_GET_MACHINES_TYPE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/machines_activity_excel"; export const EXPORT_GET_MACHINES_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machines_activity_excel"; -export const EXPORT_GET_MACHINES_ACTIVITY_REPORT = - api + "/api/v3/missions/report_machine/machines_activity_excel"; +export const EXPORT_GET_MACHINES_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/machines_activity_excel"; -export const GET_DRIVERS_ACTIVITY_REPORT = - api + "/api/v3/missions/report_machine/machine_drivers_activity"; -export const GET_DRIVER_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machine_drivers_activity"; +export const GET_DRIVERS_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/machine_drivers_activity"; +export const GET_DRIVER_PROVINCE_ACTIVITY_REPORT = + api + "/api/v3/missions/report_machine/province_machine_drivers_activity"; export const EXPORT_GET_DRIVER_COUNTRY_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/country_machine_drivers_activity_excel"; -export const EXPORT_GET_DRIVER_ACTIVITY_REPORT = - api + "/api/v3/missions/report_machine/machine_drivers_activity_excel"; +export const EXPORT_GET_DRIVER_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/machine_drivers_activity_excel"; export const EXPORT_GET_DRIVER_DETAILS_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/machine_driver_details_report_excel"; export const EXPORT_GET_DRIVER_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machine_drivers_activity_excel"; -export const GET_MACHINES_TYPE_ACTIVITY_REPORT = - api + "/api/v3/missions/report_machine/machine_types_activity"; +export const GET_MACHINES_TYPE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/machine_types_activity"; export const GET_MACHINES_TYPE_PROVINCE_ACTIVITY_REPORT = api + "/api/v3/missions/report_machine/province_machine_types_activity"; export const EXPORT_GET_MACHINES_TYPE_COUNTRY_ACTIVITY_REPORT = From 457bef64c4f2d8ac135e1f1f16ca9a4d8c6ed33d Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Tue, 14 Jul 2026 14:55:30 +0330 Subject: [PATCH 4/4] add deleteviolations --- .../violations/Actions/DeleteViolation/DeleteContent.jsx | 2 +- .../dashboard/roadMissions/violations/RowActions/index.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/DeleteContent.jsx b/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/DeleteContent.jsx index 004dc4d..6485cb7 100644 --- a/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/DeleteContent.jsx +++ b/src/components/dashboard/roadMissions/violations/Actions/DeleteViolation/DeleteContent.jsx @@ -8,7 +8,7 @@ const DeleteContent = ({ rowId, mutate, setOpenDeleteDialog }) => { const requestServer = useRequest({ notificationSuccess: true }); const handleClick = () => { setSubmitting(true); - requestServer(`${DELETE_VIOLATION}/${rowId}`, "post", { + requestServer(`${DELETE_VIOLATION}/${rowId}`, "delete", { hasSidebarUpdate: true, }) .then(() => { diff --git a/src/components/dashboard/roadMissions/violations/RowActions/index.jsx b/src/components/dashboard/roadMissions/violations/RowActions/index.jsx index 3725894..b58b41f 100644 --- a/src/components/dashboard/roadMissions/violations/RowActions/index.jsx +++ b/src/components/dashboard/roadMissions/violations/RowActions/index.jsx @@ -8,7 +8,7 @@ const RowActions = ({ row, mutate }) => { <> {!row.original.mileage && } {/*{canEdit && }*/} - + ); };