send filter data for reports
This commit is contained in:
@@ -6,107 +6,107 @@ import { Controller, useWatch } from "react-hook-form";
|
|||||||
|
|
||||||
const MissionDates = ({ control }) => {
|
const MissionDates = ({ control }) => {
|
||||||
const type = useWatch({ control, name: "type" });
|
const type = useWatch({ control, name: "type" });
|
||||||
|
|
||||||
const start_date = useWatch({ control, name: "start_date" });
|
const start_date = useWatch({ control, name: "start_date" });
|
||||||
const end_date = useWatch({ control, name: "end_date" });
|
const end_date = useWatch({ control, name: "end_date" });
|
||||||
|
|
||||||
const start_time = useWatch({ control, name: "start_time" });
|
const start_time = useWatch({ control, name: "start_time" });
|
||||||
const end_time = useWatch({ control, name: "end_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 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 (
|
return (
|
||||||
type && (
|
type && (
|
||||||
<>
|
<>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid item xs={12} sm={6}>
|
||||||
<Controller
|
<Controller
|
||||||
control={control}
|
control={control}
|
||||||
name={"start_date"}
|
name="start_date"
|
||||||
render={({ field, fieldState: { error } }) => {
|
render={({ field, fieldState: { error } }) => (
|
||||||
return (
|
<MuiDatePicker
|
||||||
<MuiDatePicker
|
name="start_date"
|
||||||
name="start_date"
|
value={field.value}
|
||||||
error={error}
|
error={error}
|
||||||
value={field.value}
|
disableFuture={false}
|
||||||
disableFuture={false}
|
minDate={now}
|
||||||
minDate={now}
|
maxDate={end_date ?? null}
|
||||||
maxDate={end_date ?? null}
|
label="تاریخ شروع ماموریت"
|
||||||
placeholder={"تاریخ شروع ماموریت را وارد کنید"}
|
placeholder="تاریخ شروع ماموریت را وارد کنید"
|
||||||
label={"تاریخ شروع ماموریت"}
|
setFieldValue={(name, value) => field.onChange(value || null)}
|
||||||
setFieldValue={(name, value) => field.onChange(value || [])}
|
helperText={error?.message}
|
||||||
helperText={error ? error.message : null}
|
/>
|
||||||
/>
|
)}
|
||||||
);
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
{type == 1 && (
|
{type == 1 && (
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid item xs={12} sm={6}>
|
||||||
<Controller
|
<Controller
|
||||||
control={control}
|
control={control}
|
||||||
name={"start_time"}
|
name="start_time"
|
||||||
render={({ field, fieldState: { error } }) => {
|
render={({ field, fieldState: { error } }) => (
|
||||||
return (
|
<MuiTimePicker
|
||||||
<MuiTimePicker
|
name="start_time"
|
||||||
name="start_time"
|
value={field.value}
|
||||||
error={error}
|
error={error}
|
||||||
value={field.value}
|
minTime={isToday ? now : null}
|
||||||
minTime={
|
maxTime={isSameDay && endDateTime ? endDateTime : null}
|
||||||
start_date && new Date(start_date).toDateString() === now.toDateString()
|
label="زمان شروع ماموریت"
|
||||||
? now
|
placeholder="زمان شروع ماموریت را وارد کنید"
|
||||||
: null
|
setFieldValue={(name, value) => field.onChange(value || null)}
|
||||||
}
|
helperText={error?.message}
|
||||||
maxTime={endDateTime ?? null}
|
/>
|
||||||
placeholder={"زمان شروع ماموریت را وارد کنید"}
|
)}
|
||||||
label={"زمان شروع ماموریت"}
|
|
||||||
setFieldValue={(name, value) => field.onChange(value || null)}
|
|
||||||
helperText={error ? error.message : null}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid item xs={12} sm={6}>
|
||||||
<Controller
|
<Controller
|
||||||
control={control}
|
control={control}
|
||||||
name={"end_date"}
|
name="end_date"
|
||||||
render={({ field, fieldState: { error } }) => {
|
render={({ field, fieldState: { error } }) => (
|
||||||
return (
|
<MuiDatePicker
|
||||||
<MuiDatePicker
|
name="end_date"
|
||||||
name="end_date"
|
value={field.value}
|
||||||
error={error}
|
error={error}
|
||||||
value={field.value}
|
disableFuture={false}
|
||||||
disableFuture={false}
|
minDate={start_date || now}
|
||||||
minDate={start_date ? start_date : now}
|
label="تاریخ پایان ماموریت"
|
||||||
placeholder={"تاریخ پایان ماموریت را وارد کنید"}
|
placeholder="تاریخ پایان ماموریت را وارد کنید"
|
||||||
label={"تاریخ پایان ماموریت"}
|
setFieldValue={(name, value) => field.onChange(value || null)}
|
||||||
setFieldValue={(name, value) => field.onChange(value || [])}
|
helperText={error?.message}
|
||||||
helperText={error ? error.message : null}
|
/>
|
||||||
/>
|
)}
|
||||||
);
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
{type == 1 && (
|
{type == 1 && (
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid item xs={12} sm={6}>
|
||||||
<Controller
|
<Controller
|
||||||
control={control}
|
control={control}
|
||||||
name={"end_time"}
|
name="end_time"
|
||||||
render={({ field, fieldState: { error } }) => {
|
render={({ field, fieldState: { error } }) => (
|
||||||
return (
|
<MuiTimePicker
|
||||||
<MuiTimePicker
|
name="end_time"
|
||||||
name="end_time"
|
value={field.value}
|
||||||
error={error}
|
error={error}
|
||||||
value={field.value}
|
minTime={isSameDay && startDateTime ? startDateTime : null}
|
||||||
minTime={startDateTime ?? null}
|
label="زمان پایان ماموریت"
|
||||||
placeholder={"زمان پایان ماموریت را وارد کنید"}
|
placeholder="زمان پایان ماموریت را وارد کنید"
|
||||||
label={"زمان پایان ماموریت"}
|
setFieldValue={(name, value) => field.onChange(value || null)}
|
||||||
setFieldValue={(name, value) => field.onChange(value || null)}
|
helperText={error?.message}
|
||||||
helperText={error ? error.message : null}
|
/>
|
||||||
/>
|
)}
|
||||||
);
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
@@ -114,4 +114,5 @@ const MissionDates = ({ control }) => {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default MissionDates;
|
export default MissionDates;
|
||||||
|
|||||||
@@ -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 (
|
return (
|
||||||
<Box sx={{ p: 1, border: 1, borderColor: "divider", borderRadius: 1 }}>
|
<Box sx={{ p: 1, border: 1, borderColor: "divider", borderRadius: 1 }}>
|
||||||
<DataTableWithAuth
|
<DataTableWithAuth
|
||||||
@@ -62,7 +63,7 @@ const DriverReportsList = ({ data, specialFilter }) => {
|
|||||||
enablePagination={false}
|
enablePagination={false}
|
||||||
specialFilter={specialFilter}
|
specialFilter={specialFilter}
|
||||||
enableRowActions
|
enableRowActions
|
||||||
RowActions={RowActions}
|
RowActions={RowActionsWithRowData}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { GET_DRIVER_DETAILS } from "@/core/utils/routes";
|
|||||||
import { Box } from "@mui/material";
|
import { Box } from "@mui/material";
|
||||||
import { useMemo } from "react";
|
import { useMemo } from "react";
|
||||||
|
|
||||||
const DriverList = ({ row }) => {
|
const DriverList = ({ row, specialFilter }) => {
|
||||||
const columns = useMemo(
|
const columns = useMemo(
|
||||||
() => [
|
() => [
|
||||||
{
|
{
|
||||||
@@ -93,6 +93,7 @@ const DriverList = ({ row }) => {
|
|||||||
<DataTableWithAuth
|
<DataTableWithAuth
|
||||||
need_filter={true}
|
need_filter={true}
|
||||||
columns={columns}
|
columns={columns}
|
||||||
|
specialFilter={specialFilter}
|
||||||
sorting={[{ id: "id", desc: true }]}
|
sorting={[{ id: "id", desc: true }]}
|
||||||
table_url={`${GET_DRIVER_DETAILS}/${row.driver_id}`}
|
table_url={`${GET_DRIVER_DETAILS}/${row.driver_id}`}
|
||||||
page_name={"driverListReport"}
|
page_name={"driverListReport"}
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ import { Box, Button, DialogActions, DialogContent } from "@mui/material";
|
|||||||
import { Stack } from "@mui/system";
|
import { Stack } from "@mui/system";
|
||||||
import DriverList from "./DriverDetailsDialog/DriverList";
|
import DriverList from "./DriverDetailsDialog/DriverList";
|
||||||
|
|
||||||
const DriverDetailsTable = ({ row, setOpenDriverDetails }) => {
|
const DriverDetailsTable = ({ row, setOpenDriverDetails, specialFilter }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<DialogContent dividers>
|
<DialogContent dividers>
|
||||||
<Box sx={{ flex: 1 }}>
|
<Box sx={{ flex: 1 }}>
|
||||||
<Stack spacing={3}>
|
<Stack spacing={3}>
|
||||||
<Stack spacing={2}>
|
<Stack spacing={2}>
|
||||||
<DriverList row={row} />
|
<DriverList specialFilter={specialFilter} row={row} />
|
||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { Dialog, DialogTitle, IconButton, Tooltip } from "@mui/material";
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import DriverDetailsTable from "./Form";
|
import DriverDetailsTable from "./Form";
|
||||||
|
|
||||||
const DriverDetails = ({ row }) => {
|
const DriverDetails = ({ row, specialFilter }) => {
|
||||||
const [openDriverDetails, setOpenDriverDetails] = useState(false);
|
const [openDriverDetails, setOpenDriverDetails] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -35,7 +35,11 @@ const DriverDetails = ({ row }) => {
|
|||||||
</IconButton>
|
</IconButton>
|
||||||
<DialogTitle>ریز گزارشات راننده</DialogTitle>
|
<DialogTitle>ریز گزارشات راننده</DialogTitle>
|
||||||
{openDriverDetails && (
|
{openDriverDetails && (
|
||||||
<DriverDetailsTable row={row.original} setOpenDriverDetails={setOpenDriverDetails} />
|
<DriverDetailsTable
|
||||||
|
specialFilter={specialFilter}
|
||||||
|
row={row.original}
|
||||||
|
setOpenDriverDetails={setOpenDriverDetails}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import DriverDetails from "./DriverDetails";
|
import DriverDetails from "./DriverDetails";
|
||||||
|
|
||||||
const RowActions = ({ row }) => {
|
const RowActions = ({ row, specialFilter }) => {
|
||||||
return <DriverDetails row={row} />;
|
return <DriverDetails specialFilter={specialFilter} row={row} />;
|
||||||
};
|
};
|
||||||
export default RowActions;
|
export default RowActions;
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ const DriverReportsPage = () => {
|
|||||||
};
|
};
|
||||||
const defaultFilter = [
|
const defaultFilter = [
|
||||||
{ value: `${defaultValues.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
{ value: `${defaultValues.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
||||||
{ value: `${defaultValues.from_date}`, datatype: "date", id: "from_date", fn: "between" },
|
{ value: `${defaultValues.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" },
|
||||||
{ value: `${defaultValues.date_to}`, datatype: "date", id: "date_to", fn: "between" },
|
{ value: `${defaultValues.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" },
|
||||||
];
|
];
|
||||||
const [specialFilter, setSpecialFilter] = useState(defaultFilter);
|
const [specialFilter, setSpecialFilter] = useState(defaultFilter);
|
||||||
|
|
||||||
@@ -38,8 +38,8 @@ const DriverReportsPage = () => {
|
|||||||
params.set("date_to", `${data.date_to} 23:59:59`);
|
params.set("date_to", `${data.date_to} 23:59:59`);
|
||||||
setSpecialFilter([
|
setSpecialFilter([
|
||||||
{ value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
{ value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
||||||
{ value: `${data.from_date}`, datatype: "date", id: "from_date", fn: "between" },
|
{ value: `${data.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" },
|
||||||
{ value: `${data.date_to}`, datatype: "date", id: "date_to", fn: "between" },
|
{ value: `${data.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" },
|
||||||
]);
|
]);
|
||||||
if (data.province_id === "-1") {
|
if (data.province_id === "-1") {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -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 (
|
return (
|
||||||
<Box sx={{ p: 1, border: 1, borderColor: "divider", borderRadius: 1 }}>
|
<Box sx={{ p: 1, border: 1, borderColor: "divider", borderRadius: 1 }}>
|
||||||
<DataTableWithAuth
|
<DataTableWithAuth
|
||||||
@@ -72,7 +73,7 @@ const MachinesReportsList = ({ data, specialFilter }) => {
|
|||||||
enablePagination={false}
|
enablePagination={false}
|
||||||
specialFilter={specialFilter}
|
specialFilter={specialFilter}
|
||||||
enableRowActions
|
enableRowActions
|
||||||
RowActions={RowActions}
|
RowActions={RowActionsWithRowData}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { GET_MACHINE_MISSIONS_DETAILS } from "@/core/utils/routes";
|
|||||||
import { Box } from "@mui/material";
|
import { Box } from "@mui/material";
|
||||||
import { useMemo } from "react";
|
import { useMemo } from "react";
|
||||||
|
|
||||||
const MachineMissionsList = ({ row }) => {
|
const MachineMissionsList = ({ row, specialFilter }) => {
|
||||||
const columns = useMemo(
|
const columns = useMemo(
|
||||||
() => [
|
() => [
|
||||||
{
|
{
|
||||||
@@ -91,6 +91,7 @@ const MachineMissionsList = ({ row }) => {
|
|||||||
<>
|
<>
|
||||||
<Box sx={{ mt: 3 }}>
|
<Box sx={{ mt: 3 }}>
|
||||||
<DataTableWithAuth
|
<DataTableWithAuth
|
||||||
|
specialFilter={specialFilter}
|
||||||
need_filter={true}
|
need_filter={true}
|
||||||
columns={columns}
|
columns={columns}
|
||||||
sorting={[{ id: "id", desc: true }]}
|
sorting={[{ id: "id", desc: true }]}
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ import { Box, Button, DialogActions, DialogContent } from "@mui/material";
|
|||||||
import { Stack } from "@mui/system";
|
import { Stack } from "@mui/system";
|
||||||
import MachineMissionsList from "./MachineMissionsDetailsDialog/MachineMissionsList";
|
import MachineMissionsList from "./MachineMissionsDetailsDialog/MachineMissionsList";
|
||||||
|
|
||||||
const MachineMissionsDetailsTable = ({ row, setOpenMachineMissionsDetails }) => {
|
const MachineMissionsDetailsTable = ({ row, setOpenMachineMissionsDetails, specialFilter }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<DialogContent dividers>
|
<DialogContent dividers>
|
||||||
<Box sx={{ flex: 1 }}>
|
<Box sx={{ flex: 1 }}>
|
||||||
<Stack spacing={3}>
|
<Stack spacing={3}>
|
||||||
<Stack spacing={2}>
|
<Stack spacing={2}>
|
||||||
<MachineMissionsList row={row} />
|
<MachineMissionsList specialFilter={specialFilter} row={row} />
|
||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { Dialog, DialogTitle, IconButton, Tooltip } from "@mui/material";
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import MachineMissionsDetailsTable from "./Form";
|
import MachineMissionsDetailsTable from "./Form";
|
||||||
|
|
||||||
const MissionDetails = ({ row }) => {
|
const MissionDetails = ({ row, specialFilter }) => {
|
||||||
const [openMachineMissionsDetails, setOpenMachineMissionsDetails] = useState(false);
|
const [openMachineMissionsDetails, setOpenMachineMissionsDetails] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -36,6 +36,7 @@ const MissionDetails = ({ row }) => {
|
|||||||
<DialogTitle>ریز گزارشات خودرو</DialogTitle>
|
<DialogTitle>ریز گزارشات خودرو</DialogTitle>
|
||||||
{openMachineMissionsDetails && (
|
{openMachineMissionsDetails && (
|
||||||
<MachineMissionsDetailsTable
|
<MachineMissionsDetailsTable
|
||||||
|
specialFilter={specialFilter}
|
||||||
row={row.original}
|
row={row.original}
|
||||||
setOpenMachineMissionsDetails={setOpenMachineMissionsDetails}
|
setOpenMachineMissionsDetails={setOpenMachineMissionsDetails}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import MissionDetails from "./MissionDitails";
|
import MissionDetails from "./MissionDitails";
|
||||||
|
|
||||||
const RowActions = ({ row }) => {
|
const RowActions = ({ row, specialFilter }) => {
|
||||||
return <MissionDetails row={row} />;
|
return <MissionDetails specialFilter={specialFilter} row={row} />;
|
||||||
};
|
};
|
||||||
export default RowActions;
|
export default RowActions;
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ const MachinesReportsPage = () => {
|
|||||||
};
|
};
|
||||||
const defaultFilter = [
|
const defaultFilter = [
|
||||||
{ value: `${defaultValues.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
{ value: `${defaultValues.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
||||||
{ value: `${defaultValues.from_date}`, datatype: "date", id: "from_date", fn: "between" },
|
{ value: `${defaultValues.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" },
|
||||||
{ value: `${defaultValues.date_to}`, datatype: "date", id: "date_to", fn: "between" },
|
{ value: `${defaultValues.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" },
|
||||||
];
|
];
|
||||||
const [specialFilter, setSpecialFilter] = useState(defaultFilter);
|
const [specialFilter, setSpecialFilter] = useState(defaultFilter);
|
||||||
|
|
||||||
@@ -38,8 +38,8 @@ const MachinesReportsPage = () => {
|
|||||||
params.set("date_to", `${data.date_to} 23:59:59`);
|
params.set("date_to", `${data.date_to} 23:59:59`);
|
||||||
setSpecialFilter([
|
setSpecialFilter([
|
||||||
{ value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
{ value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
||||||
{ value: `${data.from_date}`, datatype: "date", id: "from_date", fn: "between" },
|
{ value: `${data.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" },
|
||||||
{ value: `${data.date_to}`, datatype: "date", id: "date_to", fn: "between" },
|
{ value: `${data.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" },
|
||||||
]);
|
]);
|
||||||
if (data.province_id === "-1") {
|
if (data.province_id === "-1") {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user