Merge branch 'release/v1.4.2'

This commit is contained in:
AmirHossein Mahmoodi
2025-07-08 10:59:26 +03:30
16 changed files with 67 additions and 45 deletions

View File

@@ -1,4 +1,4 @@
HOST="rms.witel.ir" HOST="rms.witel.ir"
NEXT_PUBLIC_VERSION="1.4.0" NEXT_PUBLIC_VERSION="1.4.2"
NEXT_PUBLIC_API_URL="https://rms.witel.ir" NEXT_PUBLIC_API_URL="https://rms.witel.ir"
NEXT_PUBLIC_MAPTILE_ENDPOINT="https://rmsmap.rmto.ir/141map" NEXT_PUBLIC_MAPTILE_ENDPOINT="https://rmsmap.rmto.ir/141map"

View File

@@ -1,4 +1,5 @@
import ControlPage from "@/components/dashboard/roadMissions/control"; import ControlPage from "@/components/dashboard/roadMissions/control";
import WithPermission from "@/core/middlewares/withPermission";
export const metadata = { export const metadata = {
title: "کارتابل کنترل", title: "کارتابل کنترل",
@@ -6,10 +7,10 @@ export const metadata = {
const Page = () => { const Page = () => {
return ( return (
<> <>
{/* <WithPermission permission_name={["create-road-item"]}> */} <WithPermission permission_name={["manage-control-unit"]}>
<ControlPage /> <ControlPage />
{/* <ActivityCodeLog activity_code={1152} /> */} {/* <ActivityCodeLog activity_code={1152} /> */}
{/* </WithPermission> */} </WithPermission>
</> </>
); );
}; };

View File

@@ -7,10 +7,10 @@ export const metadata = {
const Page = () => { const Page = () => {
return ( return (
<> <>
{/* <WithPermission permission_name={["create-road-item"]}> */} <WithPermission permission_name={["manage-request-portal-country", "manage-request-portal-province", "manage-request-portal-city"]}>
<OperatorPage /> <OperatorPage />
{/* <ActivityCodeLog activity_code={1152} /> */} {/* <ActivityCodeLog activity_code={1152} /> */}
{/* </WithPermission> */} </WithPermission>
</> </>
); );
}; };

View File

@@ -1,4 +1,5 @@
import TransportationPage from "@/components/dashboard/roadMissions/transportation"; import TransportationPage from "@/components/dashboard/roadMissions/transportation";
import WithPermission from "@/core/middlewares/withPermission";
export const metadata = { export const metadata = {
title: "کارتابل نقلیه", title: "کارتابل نقلیه",
@@ -6,10 +7,10 @@ export const metadata = {
const Page = () => { const Page = () => {
return ( return (
<> <>
{/* <WithPermission permission_name={["create-road-item"]}> */} <WithPermission permission_name={["manage-transportation-unit"]}>
<TransportationPage /> <TransportationPage />
{/* <ActivityCodeLog activity_code={1152} /> */} {/* <ActivityCodeLog activity_code={1152} /> */}
{/* </WithPermission> */} </WithPermission>
</> </>
); );
}; };

View File

@@ -26,7 +26,7 @@ const MissionDates = ({ control }) => {
}} }}
/> />
</Grid> </Grid>
{type == 2 && ( {type == 1 && (
<Grid item xs={12} sm={6}> <Grid item xs={12} sm={6}>
<Controller <Controller
control={control} control={control}
@@ -66,7 +66,7 @@ const MissionDates = ({ control }) => {
}} }}
/> />
</Grid> </Grid>
{type == 2 && ( {type == 1 && (
<Grid item xs={12} sm={6}> <Grid item xs={12} sm={6}>
<Controller <Controller
control={control} control={control}

View File

@@ -13,13 +13,13 @@ const validationSchema = object({
type: string().required("نوع ماموریت را مشخص کنید!"), type: string().required("نوع ماموریت را مشخص کنید!"),
start_date: string().required("تاریخ شروع ماموریت را مشخص کنید!"), start_date: string().required("تاریخ شروع ماموریت را مشخص کنید!"),
start_time: string().when("type", { start_time: string().when("type", {
is: "2", is: "1",
then: (schema) => schema.required("زمان شروع ماموریت را مشخص کنید!"), then: (schema) => schema.required("زمان شروع ماموریت را مشخص کنید!"),
otherwise: (schema) => schema.notRequired(), otherwise: (schema) => schema.notRequired(),
}), }),
end_date: string().required("تاریخ پایان ماموریت را مشخص کنید!"), end_date: string().required("تاریخ پایان ماموریت را مشخص کنید!"),
end_time: string().when("type", { end_time: string().when("type", {
is: "2", is: "1",
then: (schema) => schema.required("زمان شروع ماموریت را مشخص کنید!"), then: (schema) => schema.required("زمان شروع ماموریت را مشخص کنید!"),
otherwise: (schema) => schema.notRequired(), otherwise: (schema) => schema.notRequired(),
}), }),

View File

@@ -1,6 +1,7 @@
import RahdarCode from "@/core/components/RahdarCode"; import RahdarCode from "@/core/components/RahdarCode";
import StyledForm from "@/core/components/StyledForm"; import StyledForm from "@/core/components/StyledForm";
import { yupResolver } from "@hookform/resolvers/yup"; import { yupResolver } from "@hookform/resolvers/yup";
import { Add } from "@mui/icons-material";
import { Button, Stack } from "@mui/material"; import { Button, Stack } from "@mui/material";
import { Controller, useForm } from "react-hook-form"; import { Controller, useForm } from "react-hook-form";
import { object } from "yup"; import { object } from "yup";
@@ -53,6 +54,7 @@ const RahdaranForm = ({ setRahdaran }) => {
type="submit" type="submit"
sx={{ textWrap: "nowrap", px: 3 }} sx={{ textWrap: "nowrap", px: 3 }}
disabled={isSubmitting || !isValid} disabled={isSubmitting || !isValid}
startIcon={<Add />}
> >
افزودن راهدار افزودن راهدار
</Button> </Button>

View File

@@ -54,7 +54,7 @@ const RequestMachinesForm = ({ requests, setRequests }) => {
)} )}
/> />
</Grid> </Grid>
<Grid item xs={12} sm={5}> <Grid item xs={12} sm={4}>
<Controller <Controller
control={control} control={control}
name={"count"} name={"count"}
@@ -76,9 +76,9 @@ const RequestMachinesForm = ({ requests, setRequests }) => {
)} )}
/> />
</Grid> </Grid>
<Grid item xs={12} sm={2}> <Grid item xs={12} sm={3}>
<Button variant="outlined" type="submit" fullWidth startIcon={<Add />}> <Button variant="outlined" type="submit" fullWidth startIcon={<Add />}>
افزودن افزودن خودرو
</Button> </Button>
</Grid> </Grid>
</Grid> </Grid>

View File

@@ -42,7 +42,7 @@ const Verify = ({ types, regions, allData, handlePrev, submitForm, submitting })
<Stack direction={"row"} alignItems={"center"} spacing={1}> <Stack direction={"row"} alignItems={"center"} spacing={1}>
<Typography variant="body2">تاریخ شروع ماموریت</Typography> <Typography variant="body2">تاریخ شروع ماموریت</Typography>
<Divider sx={{ flex: 1 }} /> <Divider sx={{ flex: 1 }} />
{allData.type == 2 ? ( {allData.type == 1 ? (
<Chip <Chip
size="small" size="small"
label={`${moment(allData.start_time).format("HH:mm")} | ${moment(allData.start_date).locale("fa").format("YYYY/MM/DD")}`} label={`${moment(allData.start_time).format("HH:mm")} | ${moment(allData.start_date).locale("fa").format("YYYY/MM/DD")}`}
@@ -57,7 +57,7 @@ const Verify = ({ types, regions, allData, handlePrev, submitForm, submitting })
<Stack direction={"row"} alignItems={"center"} spacing={1}> <Stack direction={"row"} alignItems={"center"} spacing={1}>
<Typography variant="body2">تاریخ پایان ماموریت</Typography> <Typography variant="body2">تاریخ پایان ماموریت</Typography>
<Divider sx={{ flex: 1 }} /> <Divider sx={{ flex: 1 }} />
{allData.type == 2 ? ( {allData.type == 1 ? (
<Chip <Chip
size="small" size="small"
label={`${moment(allData.end_time).format("HH:mm")} | ${moment(allData.end_date).locale("fa").format("YYYY/MM/DD")}`} label={`${moment(allData.end_time).format("HH:mm")} | ${moment(allData.end_date).locale("fa").format("YYYY/MM/DD")}`}

View File

@@ -8,8 +8,8 @@ import Area from "./Area";
import Verify from "./Verify"; import Verify from "./Verify";
const types = [ const types = [
{ id: 1, name_fa: "روزانه" }, { id: 1, name_fa: "ساعتی" },
{ id: 2, name_fa: "ساعتی" }, { id: 2, name_fa: "روزانه" },
]; ];
const regions = [ const regions = [

View File

@@ -30,15 +30,15 @@ const Create = ({ mutate }) => {
type: result.type, type: result.type,
zone: result.region, zone: result.region,
end_point: result.end_point, end_point: result.end_point,
...(result.type == 2 ...(result.type == 1
? { ? {
start_date: `${result.start_date} ${moment(result.start_time).format("HH:mm")}`, start_date: `${result.start_date} ${moment(result.start_time).format("HH:mm")}`,
end_date: `${result.end_date} ${moment(result.end_time).format("HH:mm")}`, end_date: `${result.end_date} ${moment(result.end_time).format("HH:mm")}`,
} }
: { : {
start_date: result.start_date, start_date: result.start_date,
end_date: result.end_date, end_date: result.end_date,
}), }),
}, },
hasSidebarUpdate: true, hasSidebarUpdate: true,
}) })
@@ -46,7 +46,7 @@ const Create = ({ mutate }) => {
mutate(); mutate();
setOpen(false); setOpen(false);
}) })
.catch((error) => {}) .catch((error) => { })
.finally(() => { .finally(() => {
setSubmitting(false); setSubmitting(false);
}); });

View File

@@ -38,15 +38,15 @@ const EditController = ({ row, mutate, openEditDialog, setOpenEditDialog }) => {
type: result.type, type: result.type,
zone: result.region, zone: result.region,
end_point: result.end_point, end_point: result.end_point,
...(result.type == 2 ...(result.type == 1
? { ? {
start_date: `${result.start_date} ${moment(result.start_time).format("HH:mm")}`, start_date: `${result.start_date} ${moment(result.start_time).format("HH:mm")}`,
end_date: `${result.end_date} ${moment(result.end_time).format("HH:mm")}`, end_date: `${result.end_date} ${moment(result.end_time).format("HH:mm")}`,
} }
: { : {
start_date: result.start_date, start_date: result.start_date,
end_date: result.end_date, end_date: result.end_date,
}), }),
}, },
hasSidebarUpdate: true, hasSidebarUpdate: true,
notificationSuccess: true, notificationSuccess: true,
@@ -55,7 +55,7 @@ const EditController = ({ row, mutate, openEditDialog, setOpenEditDialog }) => {
mutate(); mutate();
setOpenEditDialog(false); setOpenEditDialog(false);
}) })
.catch((error) => {}) .catch((error) => { })
.finally(() => { .finally(() => {
setSubmitting(false); setSubmitting(false);
}); });

View File

@@ -38,6 +38,7 @@ const MachinesList = ({ request, dispatch, setOpenMachinesDialog }) => {
<Box sx={{ mt: 3, p: 1 }}> <Box sx={{ mt: 3, p: 1 }}>
<DataTableWithAuth <DataTableWithAuth
need_filter={true} need_filter={true}
table_title="لیست خودرو ها"
columns={columns} columns={columns}
sorting={[{ id: "id", desc: true }]} sorting={[{ id: "id", desc: true }]}
table_url={GET_MACHINES_TABLE_LIST} table_url={GET_MACHINES_TABLE_LIST}

View File

@@ -7,10 +7,27 @@ import { toast } from "react-toastify";
import useTableSetting from "@/lib/hooks/useTableSetting"; import useTableSetting from "@/lib/hooks/useTableSetting";
import { flattenObjectOfObjects } from "@/core/utils/flattenObjectOfObjects"; import { flattenObjectOfObjects } from "@/core/utils/flattenObjectOfObjects";
function filterFalseValues(obj) {
const result = {};
for (const [key, value] of Object.entries(obj)) {
if (value === false) {
result[key] = false;
} else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
const nested = filterFalseValues(value);
if (Object.keys(nested).length > 0) {
result[key] = nested;
}
}
}
return result;
}
function AskForKeepData({ filterData, sortData, hideData, user_id, page_name, table_name, columns }) { function AskForKeepData({ filterData, sortData, hideData, user_id, page_name, table_name, columns }) {
const { filterAction, sortAction, hideAction } = useTableSetting(); const { filterAction, sortAction, hideAction } = useTableSetting();
const filteredHideData = Object.fromEntries(Object.entries(hideData).filter(([key, value]) => value === false)); const filteredHideData = filterFalseValues(hideData);
const flattenHideData = flattenObjectOfObjects(filteredHideData); const flattenHideData = flattenObjectOfObjects(filteredHideData);

View File

@@ -102,21 +102,21 @@ export const pageMenuDev = [
label: "کارتابل", label: "کارتابل",
type: "page", type: "page",
route: "/dashboard/road-missions/operator", route: "/dashboard/road-missions/operator",
permissions: ["all"], permissions: ["manage-request-portal-country", "manage-request-portal-province", "manage-request-portal-city"],
}, },
{ {
id: "roadMissionsManagemnetNaqlie", id: "roadMissionsManagemnetNaqlie",
label: "نقلیه", label: "نقلیه",
type: "page", type: "page",
route: "/dashboard/road-missions/transportation", route: "/dashboard/road-missions/transportation",
permissions: ["all"], permissions: ["manage-transportation-unit"],
}, },
{ {
id: "roadMissionsManagemnetControl", id: "roadMissionsManagemnetControl",
label: "کنترل", label: "کنترل",
type: "page", type: "page",
route: "/dashboard/road-missions/control", route: "/dashboard/road-missions/control",
permissions: ["all"], permissions: ["manage-control-unit"],
}, },
], ],
}, },

View File

@@ -85,7 +85,7 @@ const DataTableProvider = ({ children, user_id, page_name, table_name, columns,
} else { } else {
acc[column.id] = { acc[column.id] = {
id: column.id, id: column.id,
value: storeFilter?.value || "", value: storeFilter?.value ?? "",
filterMode: storeFilter?.filterMode || column.filterMode, filterMode: storeFilter?.filterMode || column.filterMode,
datatype: column.datatype, datatype: column.datatype,
}; };