send filter data for reports

This commit is contained in:
2026-06-15 15:00:28 +03:30
parent 18674a5b75
commit f42a4ff63b
13 changed files with 105 additions and 95 deletions

View File

@@ -6,107 +6,107 @@ import { Controller, useWatch } from "react-hook-form";
const MissionDates = ({ control }) => {
const type = useWatch({ control, name: "type" });
const start_date = useWatch({ control, name: "start_date" });
const end_date = useWatch({ control, name: "end_date" });
const start_time = useWatch({ control, name: "start_time" });
const end_time = useWatch({ control, name: "end_time" });
const startDateTime = makeDateTime(start_date, start_time);
const endDateTime = makeDateTime(end_date, end_time);
const now = new Date();
const startDateTime = start_date && start_time ? makeDateTime(start_date, start_time) : null;
const endDateTime = end_date && end_time ? makeDateTime(end_date, end_time) : null;
const isSameDay =
start_date && end_date && new Date(start_date).toDateString() === new Date(end_date).toDateString();
const isToday = start_date && new Date(start_date).toDateString() === now.toDateString();
return (
type && (
<>
<Grid item xs={12} sm={6}>
<Controller
control={control}
name={"start_date"}
render={({ field, fieldState: { error } }) => {
return (
name="start_date"
render={({ field, fieldState: { error } }) => (
<MuiDatePicker
name="start_date"
error={error}
value={field.value}
error={error}
disableFuture={false}
minDate={now}
maxDate={end_date ?? null}
placeholder={"تاریخ شروع ماموریت را وارد کنید"}
label={"تاریخ شروع ماموریت"}
setFieldValue={(name, value) => field.onChange(value || [])}
helperText={error ? error.message : null}
label="تاریخ شروع ماموریت"
placeholder="تاریخ شروع ماموریت را وارد کنید"
setFieldValue={(name, value) => field.onChange(value || null)}
helperText={error?.message}
/>
);
}}
)}
/>
</Grid>
{type == 1 && (
<Grid item xs={12} sm={6}>
<Controller
control={control}
name={"start_time"}
render={({ field, fieldState: { error } }) => {
return (
name="start_time"
render={({ field, fieldState: { error } }) => (
<MuiTimePicker
name="start_time"
error={error}
value={field.value}
minTime={
start_date && new Date(start_date).toDateString() === now.toDateString()
? now
: null
}
maxTime={endDateTime ?? null}
placeholder={"زمان شروع ماموریت را وارد کنید"}
label={"زمان شروع ماموریت"}
error={error}
minTime={isToday ? now : null}
maxTime={isSameDay && endDateTime ? endDateTime : null}
label="زمان شروع ماموریت"
placeholder="زمان شروع ماموریت را وارد کنید"
setFieldValue={(name, value) => field.onChange(value || null)}
helperText={error ? error.message : null}
helperText={error?.message}
/>
);
}}
)}
/>
</Grid>
)}
<Grid item xs={12} sm={6}>
<Controller
control={control}
name={"end_date"}
render={({ field, fieldState: { error } }) => {
return (
name="end_date"
render={({ field, fieldState: { error } }) => (
<MuiDatePicker
name="end_date"
error={error}
value={field.value}
error={error}
disableFuture={false}
minDate={start_date ? start_date : now}
placeholder={"تاریخ پایان ماموریت را وارد کنید"}
label={"تاریخ پایان ماموریت"}
setFieldValue={(name, value) => field.onChange(value || [])}
helperText={error ? error.message : null}
minDate={start_date || now}
label="تاریخ پایان ماموریت"
placeholder="تاریخ پایان ماموریت را وارد کنید"
setFieldValue={(name, value) => field.onChange(value || null)}
helperText={error?.message}
/>
);
}}
)}
/>
</Grid>
{type == 1 && (
<Grid item xs={12} sm={6}>
<Controller
control={control}
name={"end_time"}
render={({ field, fieldState: { error } }) => {
return (
name="end_time"
render={({ field, fieldState: { error } }) => (
<MuiTimePicker
name="end_time"
error={error}
value={field.value}
minTime={startDateTime ?? null}
placeholder={"زمان پایان ماموریت را وارد کنید"}
label={"زمان پایان ماموریت"}
error={error}
minTime={isSameDay && startDateTime ? startDateTime : null}
label="زمان پایان ماموریت"
placeholder="زمان پایان ماموریت را وارد کنید"
setFieldValue={(name, value) => field.onChange(value || null)}
helperText={error ? error.message : null}
helperText={error?.message}
/>
);
}}
)}
/>
</Grid>
)}
@@ -114,4 +114,5 @@ const MissionDates = ({ control }) => {
)
);
};
export default MissionDates;

View File

@@ -50,7 +50,8 @@ const DriverReportsList = ({ data, specialFilter }) => {
},
];
}, []);
const cleanedData = specialFilter.filter((item) => !(item.id === "province_id" && item.value === "-1"));
const RowActionsWithRowData = (props) => <RowActions specialFilter={cleanedData} {...props} />;
return (
<Box sx={{ p: 1, border: 1, borderColor: "divider", borderRadius: 1 }}>
<DataTableWithAuth
@@ -62,7 +63,7 @@ const DriverReportsList = ({ data, specialFilter }) => {
enablePagination={false}
specialFilter={specialFilter}
enableRowActions
RowActions={RowActions}
RowActions={RowActionsWithRowData}
/>
</Box>
);

View File

@@ -3,7 +3,7 @@ import { GET_DRIVER_DETAILS } from "@/core/utils/routes";
import { Box } from "@mui/material";
import { useMemo } from "react";
const DriverList = ({ row }) => {
const DriverList = ({ row, specialFilter }) => {
const columns = useMemo(
() => [
{
@@ -93,6 +93,7 @@ const DriverList = ({ row }) => {
<DataTableWithAuth
need_filter={true}
columns={columns}
specialFilter={specialFilter}
sorting={[{ id: "id", desc: true }]}
table_url={`${GET_DRIVER_DETAILS}/${row.driver_id}`}
page_name={"driverListReport"}

View File

@@ -2,14 +2,14 @@ import { Box, Button, DialogActions, DialogContent } from "@mui/material";
import { Stack } from "@mui/system";
import DriverList from "./DriverDetailsDialog/DriverList";
const DriverDetailsTable = ({ row, setOpenDriverDetails }) => {
const DriverDetailsTable = ({ row, setOpenDriverDetails, specialFilter }) => {
return (
<>
<DialogContent dividers>
<Box sx={{ flex: 1 }}>
<Stack spacing={3}>
<Stack spacing={2}>
<DriverList row={row} />
<DriverList specialFilter={specialFilter} row={row} />
</Stack>
</Stack>
</Box>

View File

@@ -3,7 +3,7 @@ import { Dialog, DialogTitle, IconButton, Tooltip } from "@mui/material";
import { useState } from "react";
import DriverDetailsTable from "./Form";
const DriverDetails = ({ row }) => {
const DriverDetails = ({ row, specialFilter }) => {
const [openDriverDetails, setOpenDriverDetails] = useState(false);
return (
@@ -35,7 +35,11 @@ const DriverDetails = ({ row }) => {
</IconButton>
<DialogTitle>ریز گزارشات راننده</DialogTitle>
{openDriverDetails && (
<DriverDetailsTable row={row.original} setOpenDriverDetails={setOpenDriverDetails} />
<DriverDetailsTable
specialFilter={specialFilter}
row={row.original}
setOpenDriverDetails={setOpenDriverDetails}
/>
)}
</Dialog>
</>

View File

@@ -1,6 +1,6 @@
import DriverDetails from "./DriverDetails";
const RowActions = ({ row }) => {
return <DriverDetails row={row} />;
const RowActions = ({ row, specialFilter }) => {
return <DriverDetails specialFilter={specialFilter} row={row} />;
};
export default RowActions;

View File

@@ -27,8 +27,8 @@ const DriverReportsPage = () => {
};
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);
@@ -38,8 +38,8 @@ const DriverReportsPage = () => {
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" },
{ 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 {

View File

@@ -60,7 +60,8 @@ const MachinesReportsList = ({ data, specialFilter }) => {
},
];
}, []);
const cleanedData = specialFilter.filter((item) => !(item.id === "province_id" && item.value === "-1"));
const RowActionsWithRowData = (props) => <RowActions specialFilter={cleanedData} {...props} />;
return (
<Box sx={{ p: 1, border: 1, borderColor: "divider", borderRadius: 1 }}>
<DataTableWithAuth
@@ -72,7 +73,7 @@ const MachinesReportsList = ({ data, specialFilter }) => {
enablePagination={false}
specialFilter={specialFilter}
enableRowActions
RowActions={RowActions}
RowActions={RowActionsWithRowData}
/>
</Box>
);

View File

@@ -3,7 +3,7 @@ import { GET_MACHINE_MISSIONS_DETAILS } from "@/core/utils/routes";
import { Box } from "@mui/material";
import { useMemo } from "react";
const MachineMissionsList = ({ row }) => {
const MachineMissionsList = ({ row, specialFilter }) => {
const columns = useMemo(
() => [
{
@@ -91,6 +91,7 @@ const MachineMissionsList = ({ row }) => {
<>
<Box sx={{ mt: 3 }}>
<DataTableWithAuth
specialFilter={specialFilter}
need_filter={true}
columns={columns}
sorting={[{ id: "id", desc: true }]}

View File

@@ -2,14 +2,14 @@ import { Box, Button, DialogActions, DialogContent } from "@mui/material";
import { Stack } from "@mui/system";
import MachineMissionsList from "./MachineMissionsDetailsDialog/MachineMissionsList";
const MachineMissionsDetailsTable = ({ row, setOpenMachineMissionsDetails }) => {
const MachineMissionsDetailsTable = ({ row, setOpenMachineMissionsDetails, specialFilter }) => {
return (
<>
<DialogContent dividers>
<Box sx={{ flex: 1 }}>
<Stack spacing={3}>
<Stack spacing={2}>
<MachineMissionsList row={row} />
<MachineMissionsList specialFilter={specialFilter} row={row} />
</Stack>
</Stack>
</Box>

View File

@@ -3,7 +3,7 @@ import { Dialog, DialogTitle, IconButton, Tooltip } from "@mui/material";
import { useState } from "react";
import MachineMissionsDetailsTable from "./Form";
const MissionDetails = ({ row }) => {
const MissionDetails = ({ row, specialFilter }) => {
const [openMachineMissionsDetails, setOpenMachineMissionsDetails] = useState(false);
return (
@@ -36,6 +36,7 @@ const MissionDetails = ({ row }) => {
<DialogTitle>ریز گزارشات خودرو</DialogTitle>
{openMachineMissionsDetails && (
<MachineMissionsDetailsTable
specialFilter={specialFilter}
row={row.original}
setOpenMachineMissionsDetails={setOpenMachineMissionsDetails}
/>

View File

@@ -1,6 +1,6 @@
import MissionDetails from "./MissionDitails";
const RowActions = ({ row }) => {
return <MissionDetails row={row} />;
const RowActions = ({ row, specialFilter }) => {
return <MissionDetails specialFilter={specialFilter} row={row} />;
};
export default RowActions;

View File

@@ -27,8 +27,8 @@ const MachinesReportsPage = () => {
};
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);
@@ -38,8 +38,8 @@ const MachinesReportsPage = () => {
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" },
{ 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 {