diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/GashtCreate.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/GashtCreate.jsx
index 1a3b3bc..32df0cd 100644
--- a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/GashtCreate.jsx
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/GashtCreate.jsx
@@ -4,13 +4,7 @@ import GashtCreateContent from "./GashtCreateContent";
const GashtCreate = ({ open, setOpen, mutate, rowId }) => {
return (
);
};
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/GashtCreateContent.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/GashtCreateContent.jsx
index d2ff576..a37e36f 100644
--- a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/GashtCreateContent.jsx
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/GashtCreateContent.jsx
@@ -1,28 +1,46 @@
-import { Box, Button, DialogActions, DialogContent, Grid, Stack, Tab, Tabs } from "@mui/material";
+import { Box, Button, DialogActions, DialogContent, Tab, Tabs } from "@mui/material";
import { useForm } from "react-hook-form";
import { yupResolver } from "@hookform/resolvers/yup";
import * as yup from "yup";
-import MuiDatePicker from "@/core/components/MuiDatePicker";
import InsertDriveFileIcon from "@mui/icons-material/InsertDriveFile";
import FileCopyIcon from "@mui/icons-material/FileCopy";
-import InfoIcon from "@mui/icons-material/Info";
-import GetItemsForm from "@/components/dashboard/roadItems/operator/Actions/Create/Forms/GetItemsForm";
-import GetSubItemsForm from "@/components/dashboard/roadItems/operator/Actions/Create/Forms/GetSubItemsForm";
-import GetItemInfo from "@/components/dashboard/roadItems/operator/Actions/Create/Forms/GetItemInfo";
import ExitToAppIcon from "@mui/icons-material/ExitToApp";
import KeyboardDoubleArrowRightIcon from "@mui/icons-material/KeyboardDoubleArrowRight";
import BeenhereIcon from "@mui/icons-material/Beenhere";
import StyledForm from "@/core/components/StyledForm";
-import React from "react";
-import { TabPanel } from "@mui/lab";
+import React, { useState } from "react";
+import SearchItemInfo from "./SearchItemInfo";
+import moment from "jalali-moment";
+import GetItemInfo from "./RowActions/GetItemInfo";
+
+function TabPanel(props) {
+ const { children, value, index } = props;
+ return (
+
+ {value === index && {children}}
+
+ );
+}
+
+const defaultValues = {
+ start_date: moment(new Date()).format("YYYY-MM-DD"),
+ end_date: moment(new Date()).format("YYYY-MM-DD"),
+ item_id: "",
+ road_patrol_id: "",
+};
+
+const defaultFilter = [
+ { value: `${defaultValues.item_id}`, datatype: "text", id: "item_id", fn: "equals" },
+ { value: `${defaultValues.road_patrol_id}`, datatype: "text", id: "road_patrol_id", fn: "equals" },
+ { value: `${defaultValues.start_date}`, datatype: "date", id: "roadPatrol.start_time", fn: "equals" },
+ { value: `${defaultValues.end_date}`, datatype: "date", id: "roadPatrol.end_time", fn: "equals" },
+];
const GashtCreateContent = ({ mutate, setOpen }) => {
- const defaultValues = {
- start_date: null,
- end_date: null,
- item_id: null,
- road_patrol_id: null,
- };
+ const [tabState, setTabState] = useState(0);
+ const [itemInfo, setItemInfo] = useState(null);
+ const [submitCompleteForm, setSubmitCompleteForm] = useState(false);
+ const [specialFilter, setSpecialFilter] = useState(defaultFilter);
const validationSchema = yup
.object()
@@ -36,6 +54,21 @@ const GashtCreateContent = ({ mutate, setOpen }) => {
return (!!values.start_date && !!values.end_date) || !!values.item_id || !!values.road_patrol_id;
});
+ const handleChangeTab = (event, newValue) => {
+ setTabState(newValue);
+ };
+ const handleClose = () => {
+ setOpen(false);
+ };
+
+ const handlePrev = () => {
+ if (tabState === 0) {
+ handleClose();
+ } else {
+ setTabState(tabState - 1);
+ }
+ };
+
const {
control,
getValues,
@@ -49,41 +82,53 @@ const GashtCreateContent = ({ mutate, setOpen }) => {
resolver: yupResolver(validationSchema),
mode: "onBlur",
});
+ const onSearchSubmit = async (data) => {
+ setSpecialFilter([
+ { value: `${data.item_id}`, datatype: "text", id: "item_id", fn: "equals" },
+ { value: `${data.road_patrol_id}`, datatype: "text", id: "road_patrol_id", fn: "equals" },
+ { value: `${data.start_date}`, datatype: "date", id: "roadPatrol.start_time", fn: "equals" },
+ { value: `${data.end_date}`, datatype: "date", id: "roadPatrol.end_time", fn: "equals" },
+ ]);
+ };
return (
-
+ <>
- } label="انتخاب آیتم" />
- } label="انتخاب موضوع مشاهده شده" />
+ } label="انتخاب مورد مشاهده شده" />
+ } label="اطلاعات مورد مشاهده شده" />
-
+
+
+
-
@@ -98,19 +143,21 @@ const GashtCreateContent = ({ mutate, setOpen }) => {
>
{tabState === 0 ? "بستن" : "مرحله قبل"}
- {tabState === 2 && (
+ {tabState === 1 && (
}
>
- {isSubmitting ? "در حال ثبت فعالیت" : "ثبت فعالیت"}
+ {submitCompleteForm ? "درحال ثبت فعالیت..." : "ثبت فعالیت"}
)}
-
+ >
);
};
export default GashtCreateContent;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/LocationForm/LocationFormContent.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/LocationForm/LocationFormContent.jsx
new file mode 100644
index 0000000..f012434
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/LocationForm/LocationFormContent.jsx
@@ -0,0 +1,31 @@
+"use client";
+import { Box, Button, DialogActions, DialogContent, Stack } from "@mui/material";
+import React from "react";
+import dynamic from "next/dynamic";
+import MapLoading from "@/core/components/MapLayer/Loading";
+import ShowLocationMarker from "@/core/components/ShowLocationMarker";
+const MapLayer = dynamic(() => import("@/core/components/MapLayer"), {
+ loading: () => ,
+ ssr: false,
+});
+
+const LocationFormContent = ({ setOpenLocationDialog, start_lat, start_lng }) => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+export default LocationFormContent;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/LocationForm/index.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/LocationForm/index.jsx
new file mode 100644
index 0000000..09df6ad
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/LocationForm/index.jsx
@@ -0,0 +1,36 @@
+import React, { useState } from "react";
+import { Tooltip, IconButton, Dialog, DialogTitle } from "@mui/material";
+import ExploreIcon from "@mui/icons-material/Explore";
+import LocationFormContent from "./LocationFormContent";
+const LocationForm = ({ start_lat, start_lng }) => {
+ const [openLocationDialog, setOpenLocationDialog] = useState(false);
+
+ return (
+ <>
+
+ setOpenLocationDialog(true)}>
+
+
+
+
+ >
+ );
+};
+export default LocationForm;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/CompleteItem.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/CompleteItem.jsx
new file mode 100644
index 0000000..059aac9
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/CompleteItem.jsx
@@ -0,0 +1,231 @@
+import { Button, DialogActions, Grid, Stack } from "@mui/material";
+import PreviousStatesInfo from "./PreviousStatesInfo";
+import NumberField from "@/core/components/NumberField";
+import { Controller, useForm } from "react-hook-form";
+import CarCode from "@/core/components/CarCode";
+import RahdarCode from "@/core/components/RahdarCode";
+import ImageUpload from "@/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/ImageUpload";
+import MuiDatePicker from "@/core/components/MuiDatePicker";
+import MuiTimePicker from "@/core/components/MuiTimePicker";
+import MapInfoTwoMarker from "@/core/components/MapInfoTwoMarker";
+import MapInfoOneMarker from "@/core/components/MapInfoOneMarker";
+import { yupResolver } from "@hookform/resolvers/yup";
+import StyledForm from "@/core/components/StyledForm";
+import { array, mixed, number, object, string } from "yup";
+import useRequest from "@/lib/hooks/useRequest";
+import BeenhereIcon from "@mui/icons-material/Beenhere";
+import React, { useEffect } from "react";
+import { CREATE_ROAD_ITEMS } from "@/core/utils/routes";
+
+const CompleteItem = ({ subItem, itemInfo, setSubmitCompleteForm, mutate, setOpen }) => {
+ const requestServer = useRequest({ notificationSuccess: true });
+
+ const defaultValues = {
+ item_id: itemInfo?.item_id || null,
+ sub_item_id: itemInfo?.sub_item_id || null,
+ amount: "",
+ activity_time: "",
+ activity_date: "",
+ before_image: null,
+ after_image: null,
+ cmms_machines: null,
+ rahdaran_id: null,
+ start_point: { lat: itemInfo?.start_lat || "", lng: itemInfo?.start_lon || "" },
+ end_point: { lat: itemInfo?.end_lat || "", lng: itemInfo?.end_lon || "" },
+ };
+
+ const validationSchema = object({
+ item_id: number().required("نوع آیتم را مشخص کنید!"),
+ sub_item_id: number().required("موضوع مشاهده شده را مشخص کنید!"),
+ amount: string().required("وارد کردن مقدار الزامیست!"),
+ cmms_machines: array().required("وارد کردن کد خودرو الزامیست!"),
+ rahdaran_id: array().required("وارد کردن کد راهداران الزامیست!").min(1, "حداقل یک کد راهدار باید وارد شود!"), // بررسی حداقل یک آیتم,
+ activity_time: string().required("لطفا زمان فعالیت را انتخاب کنید!"),
+ activity_date: string().required("لطفاً تاریخ شروع فعالیت را انتخاب کنید!"),
+ before_image: mixed()
+ .nullable()
+ .test("before-image-required", "لطفا عکس قبل از اقدام را بارگذاری کنید!", function (value) {
+ const { subItem } = this.options.context;
+ const needsImage = subItem?.needs_image === 1;
+ if (needsImage) {
+ return !!value;
+ }
+ return true;
+ }),
+ after_image: mixed()
+ .nullable()
+ .test("after-image-required", "لطفا عکس بعد از اقدام را بارگذاری کنید!", function (value) {
+ const { subItem } = this.options.context;
+ const needsImage = subItem?.needs_image === 1;
+ if (needsImage) {
+ return !!value;
+ }
+ return true;
+ }),
+ start_point: mixed()
+ .test("start-point-required", "لطفاً نقطه شروع را مشخص کنید!", function (value) {
+ return !!value; // چک میکند که مقدار موجود است
+ })
+ .required("لطفاً نقطه شروع را مشخص کنید!"),
+ end_point: mixed().test("end-point-required", "لطفاً نقطه پایان را مشخص کنید!", function (value) {
+ const { subItem } = this.options.context;
+ const needsEndPoint = subItem?.needs_end_point === 1;
+ if (needsEndPoint) {
+ return !!value; // چک میکند که مقدار موجود است
+ }
+ return true;
+ }),
+ });
+
+ const {
+ control,
+ watch,
+ getValues,
+ register,
+ handleSubmit,
+ setValue,
+ resetField,
+ formState: { errors, isSubmitting },
+ } = useForm({
+ defaultValues,
+ resolver: yupResolver(validationSchema),
+ mode: "onBlur",
+ context: { subItem },
+ });
+
+ useEffect(() => {
+ setSubmitCompleteForm(isSubmitting);
+ }, [isSubmitting]);
+ const onSubmit = async (data) => {
+ let endPoint;
+ let startPoint = `${data.start_point.lat},${data.start_point.lng}`;
+ if (subItem.needs_end_point === 1) {
+ endPoint = `${data.end_point.lat},${data.end_point.lng}`;
+ }
+ const formData = new FormData();
+ data.after_image !== null && formData.append("after_image", data.after_image);
+ data.before_image !== null && formData.append("before_image", data.before_image);
+ subItem.needs_end_point === 1 && formData.append("end_point", endPoint);
+ formData.append("start_point", startPoint);
+ formData.append("activity_time", data.activity_time);
+ formData.append("activity_date", data.activity_date);
+ formData.append("amount", data.amount);
+ formData.append("item_id", data.item_id);
+ formData.append("sub_item_id", data.sub_item_id);
+ data.cmms_machines.forEach((machine, index) => formData.append(`machines_id[${index}]`, machine.id));
+ data.rahdaran_id.forEach((rahdar, index) => formData.append(`rahdaran_id[${index}]`, rahdar.id));
+
+ await requestServer(CREATE_ROAD_ITEMS, "post", {
+ data: formData,
+ })
+ .then((response) => {
+ mutate();
+ setOpen(false);
+ })
+ .catch((error) => {});
+ };
+
+ return (
+
+
+
+
+
+
+ {
+ if (!isNaN(event.target.value)) {
+ setValue("amount", event.target.value);
+ } else {
+ setValue("amount", watch("amount"));
+ }
+ }}
+ helperText={errors.amount ? errors.amount.message : null}
+ variant="outlined"
+ fullWidth
+ />
+
+
+ {
+ return (
+ field.onChange(value || [])}
+ error={error}
+ multiple={true}
+ />
+ );
+ }}
+ name={"cmms_machines"}
+ />
+
+
+ {
+ return (
+ field.onChange(value || [])}
+ error={error}
+ />
+ );
+ }}
+ name={"rahdaran_id"}
+ />
+
+
+ {subItem.needs_image ? (
+
+ ) : null}
+
+
+
+
+
+
+
+
+
+
+
+
+ {subItem?.needs_end_point === 1 ? (
+
+ ) : (
+
+ )}
+
+
+
+ );
+};
+export default CompleteItem;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/GetItemInfo.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/GetItemInfo.jsx
new file mode 100644
index 0000000..e11fbd3
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/GetItemInfo.jsx
@@ -0,0 +1,28 @@
+import { LinearProgress, Typography } from "@mui/material";
+import useRoadItemGetISubtems from "@/lib/hooks/useRoadItemGetISubtems";
+import CompleteItem from "./CompleteItem";
+
+const GetItemInfo = ({ itemInfo, setSubmitCompleteForm, mutate, setOpen }) => {
+ const { subItemsList, loadingSubItemsList, errorSubItemsList } = useRoadItemGetISubtems(itemInfo?.item_id);
+ const subItem = subItemsList.find((SubItem) => SubItem.sub_item === itemInfo?.sub_item_id);
+ return (
+ <>
+ {loadingSubItemsList ? (
+
+ ) : errorSubItemsList ? (
+
+ خطا در دریافت اطلاعات!!!
+
+ ) : (
+
+ )}
+ >
+ );
+};
+export default GetItemInfo;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/ImageUpload.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/ImageUpload.jsx
new file mode 100644
index 0000000..3efd1d9
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/ImageUpload.jsx
@@ -0,0 +1,131 @@
+import { FormControl, FormHelperText, Grid } from "@mui/material";
+import UploadSystem from "@/core/components/UploadSystem";
+import { Controller } from "react-hook-form";
+import React, { useEffect, useState } from "react";
+
+const ImageUpload = ({ control, setValue, errors, getValues, beforeImage = null, afterImage = null }) => {
+ const [beforeImg, setBeforeImg] = useState(beforeImage ? beforeImage : null);
+ const [beforeFileType, setBeforeFileType] = useState(beforeImage ? "image/" : null);
+ const [beforeFileName, setBeforeFileName] = useState(null);
+ const [showBeforeImage, setShowBeforeImage] = useState(!beforeImage);
+
+ const [afterImg, setAfterImg] = useState(afterImage ? afterImage : null);
+ const [afterFileType, setAfterFileType] = useState(afterImage ? "image/" : null);
+ const [afterFileName, setAfterFileName] = useState(null);
+ const [showAfterImage, setShowAfterImage] = useState(!afterImage);
+
+ useEffect(() => {
+ if (getValues("before_image")) {
+ setShowBeforeImage(false);
+ setBeforeImg(getValues("before_image"));
+ setBeforeFileType("image/");
+ }
+ if (getValues("after_image")) {
+ setShowAfterImage(false);
+ setAfterImg(getValues("after_image"));
+ setAfterFileType("image/");
+ }
+ }, [getValues]);
+
+ const handleBeforeFileChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setBeforeImg(URL.createObjectURL(uploadedFile));
+ setBeforeFileType(fileType);
+ setBeforeFileName(fileName);
+ setValue("before_image", uploadedFile);
+ setShowBeforeImage(false);
+ }
+ };
+ const handleAfterFileChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setAfterImg(URL.createObjectURL(uploadedFile));
+ setAfterFileType(fileType);
+ setAfterFileName(fileName);
+ setValue("after_image", uploadedFile);
+ setShowAfterImage(false);
+ }
+ };
+ return (
+
+
+ {
+ return (
+
+
+ عکس قبل از اقدام
+
+
+
+ {errors.before_image ? errors.before_image.message : null}
+
+
+ );
+ }}
+ />
+
+
+ {
+ return (
+
+
+ عکس بعد از اقدام
+
+
+
+ {errors.after_image ? errors.after_image.message : null}
+
+
+ );
+ }}
+ />
+
+
+ );
+};
+export default ImageUpload;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/PreviousStatesInfo.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/PreviousStatesInfo.jsx
new file mode 100644
index 0000000..57c8839
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/PreviousStatesInfo.jsx
@@ -0,0 +1,43 @@
+import { Box, Chip, Divider, Grid, Typography } from "@mui/material";
+import InsertDriveFileIcon from "@mui/icons-material/InsertDriveFile";
+import FileCopyIcon from "@mui/icons-material/FileCopy";
+
+const PreviousStatesInfo = ({ itemInfo }) => {
+ return (
+
+
+
+ }
+ label={
+
+ آیتم انتخاب شده
+
+ }
+ />
+
+
+
+ {itemInfo.item_name || "هیچ آیتمی انتخاب نشده است"}
+
+
+
+
+ }
+ label={
+
+ موضوع مشاهدهشده
+
+ }
+ />
+
+
+
+ {itemInfo?.sub_item_name || "هیچ موضوعی انتخاب نشده است"}
+
+
+
+ );
+};
+export default PreviousStatesInfo;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/SubItemForm/index.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/SubItemForm/index.jsx
new file mode 100644
index 0000000..ba8a902
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/SubItemForm/index.jsx
@@ -0,0 +1,21 @@
+import React from "react";
+import { Tooltip, IconButton } from "@mui/material";
+import UndoIcon from "@mui/icons-material/Undo";
+const SubItemForm = ({ row, setTabState, setItemInfo }) => {
+ return (
+ <>
+
+ {
+ setTabState(1);
+ setItemInfo(row.original);
+ }}
+ >
+
+
+
+ >
+ );
+};
+export default SubItemForm;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/index.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/index.jsx
new file mode 100644
index 0000000..84e8a31
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/RowActions/index.jsx
@@ -0,0 +1,11 @@
+import { Box } from "@mui/material";
+import SubItemForm from "./SubItemForm";
+
+const RowActions = ({ row, mutate, setTabState, setItemInfo }) => {
+ return (
+
+
+
+ );
+};
+export default RowActions;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/SearchItemInfo.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/SearchItemInfo.jsx
new file mode 100644
index 0000000..611e7d8
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/SearchItemInfo.jsx
@@ -0,0 +1,42 @@
+import { LinearProgress, Typography } from "@mui/material";
+import useRoadItemGetItems from "@/lib/hooks/useRoadItemGetItems";
+import React from "react";
+import SearchItems from "./SearchItems";
+import TableInfo from "./TableInfo";
+
+const SearchItemInfo = ({
+ watch,
+ errors,
+ setValue,
+ register,
+ specialFilter,
+ setTabState,
+ setItemInfo,
+ isSubmitting,
+}) => {
+ const { itemsList, loadingItemsList, errorItemsList } = useRoadItemGetItems();
+ return (
+ <>
+ {loadingItemsList ? (
+
+ ) : errorItemsList ? (
+
+ خطا در دریافت اطلاعات!!!
+
+ ) : (
+ <>
+
+
+ >
+ )}
+ >
+ );
+};
+export default SearchItemInfo;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/SearchItems.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/SearchItems.jsx
new file mode 100644
index 0000000..775b933
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/SearchItems.jsx
@@ -0,0 +1,96 @@
+import { Button, FormControl, FormHelperText, InputLabel, MenuItem, Select, Stack, TextField } from "@mui/material";
+import MuiDatePicker from "@/core/components/MuiDatePicker";
+import SearchIcon from "@mui/icons-material/Search";
+import React from "react";
+
+const SearchItems = ({ setValue, itemsList, watch, errors, register, isSubmitting }) => {
+ const disabledButton =
+ (!!watch("start_date") && !!watch("end_date")) || !!watch("item_id") || !!watch("road_patrol_id");
+
+ return (
+
+
+
+
+
+
+
+
+
+ آیتم فعالیت
+
+ {/*{errors.item_id ? (*/}
+ {/* */}
+ {/* errors.item_id.message*/}
+ {/* */}
+ {/*) : null}*/}
+
+
+
+ {
+ if (!isNaN(event.target.value)) {
+ setValue("road_patrol_id", event.target.value);
+ } else {
+ setValue("road_patrol_id", watch("road_patrol_id"));
+ }
+ }}
+ helperText={errors.road_patrol_id ? errors.road_patrol_id.message : null}
+ variant="outlined"
+ />
+
+
+ }
+ >
+ {isSubmitting ? "درحال دریافت اطلاعات" : "جستجو"}
+
+
+
+ );
+};
+export default SearchItems;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/TableInfo.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/TableInfo.jsx
new file mode 100644
index 0000000..c16dba4
--- /dev/null
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/TableInfo.jsx
@@ -0,0 +1,115 @@
+import { useMemo } from "react";
+import { Box, Stack } from "@mui/material";
+import DataTableWithAuth from "@/core/components/DataTableWithAuth";
+import RowActions from "./RowActions";
+import { GET_OBSERVED_GASHT_LIST } from "@/core/utils/routes";
+import LocationForm from "./LocationForm";
+
+const TableInfo = ({ specialFilter, setTabState, setItemInfo }) => {
+ const columns = useMemo(
+ () => [
+ {
+ accessorKey: "road_patrol_id",
+ header: "کد یکتا گشت",
+ id: "road_patrol_id",
+ enableColumnFilter: false,
+ datatype: "text",
+ filterMode: "equals",
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 50,
+ },
+ {
+ accessorKey: "priority_fa",
+ header: "اولویت",
+ id: "priority_fa",
+ enableColumnFilter: false,
+ datatype: "text",
+ filterMode: "equals",
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 80,
+ },
+ {
+ accessorKey: "local_name",
+ header: "نام محلی",
+ id: "local_name",
+ enableColumnFilter: false,
+ datatype: "text",
+ filterMode: "equals",
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ },
+ {
+ accessorKey: "item_name",
+ header: "نام ایتم",
+ id: "item_name",
+ enableColumnFilter: false,
+ datatype: "text",
+ filterMode: "equals",
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ },
+ {
+ accessorKey: "sub_item_name",
+ header: "موضوع مشاهده شده",
+ id: "sub_item_name",
+ enableColumnFilter: false,
+ datatype: "text",
+ filterMode: "equals",
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ },
+ {
+ accessorKey: "location",
+ header: "موقعیت", // Location
+ id: "location",
+ enableColumnFilter: false,
+ enableSorting: false,
+ datatype: "array",
+ grow: false,
+ size: 50,
+ muiTableBodyCellProps: {
+ sx: {
+ borderLeft: "1px solid #e1e1e1",
+ py: 0,
+ "&:first-of-type": {
+ borderLeft: "unset",
+ },
+ },
+ },
+ Cell: ({ renderedCellValue, row }) => {
+ return (
+
+
+
+ );
+ },
+ },
+ ],
+ []
+ );
+ return (
+ <>
+
+ (
+
+ )}
+ />
+
+ >
+ );
+};
+export default TableInfo;
diff --git a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/index.jsx b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/index.jsx
index ae14476..4379040 100644
--- a/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/index.jsx
+++ b/src/components/dashboard/roadItems/operator/Actions/ObservedGashtCreate/index.jsx
@@ -17,7 +17,11 @@ const ObservedGashtCreate = ({ mutate }) => {
return (
<>
{isMobile ? (
-
+
) : (
diff --git a/src/components/dashboard/roadItems/operator/OperatorList.jsx b/src/components/dashboard/roadItems/operator/OperatorList.jsx
index c5cfaba..9f818e8 100644
--- a/src/components/dashboard/roadItems/operator/OperatorList.jsx
+++ b/src/components/dashboard/roadItems/operator/OperatorList.jsx
@@ -193,7 +193,7 @@ const OperatorList = () => {
},
{
accessorKey: "cmms_machines",
- header: "کد خودرو", // Car ID
+ header: "خودرو ها", // Car ID
id: "cmmsMachines__machine_code",
enableColumnFilter: true,
datatype: "text",
@@ -241,20 +241,17 @@ const OperatorList = () => {
},
},
Cell: ({ renderedCellValue }) => {
- if (renderedCellValue) {
- return (
-
-
-
- );
- }
- return بدون شخص;
+ return (
+
+
+
+ );
},
},
{
- accessorFn: (row) => moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- header: "تاریخ ثبت", // Register Date
- id: "created_at",
+ accessorFn: (row) => moment(row.activity_date_time).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ header: "تاریخ فعالیت", // Start Date
+ id: "activity_date_time",
enableColumnFilter: true,
datatype: "date",
filterMode: "equals",
@@ -263,9 +260,9 @@ const OperatorList = () => {
size: 100,
},
{
- accessorFn: (row) => moment(row.activity_date_time).locale("fa").format("HH:mm | yyyy/MM/DD"),
- header: "تاریخ فعالیت", // Start Date
- id: "activity_date_time",
+ accessorFn: (row) => moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ header: "تاریخ ثبت", // Register Date
+ id: "created_at",
enableColumnFilter: true,
datatype: "date",
filterMode: "equals",
@@ -296,6 +293,7 @@ const OperatorList = () => {
header: "توضیحات کارشناس", // Description
id: "supervisor_description",
enableColumnFilter: false,
+ enableSorting: false,
datatype: "text",
filterMode: "equals",
columnFilterModeOptions: ["equals", "contains"],
@@ -311,11 +309,14 @@ const OperatorList = () => {
},
},
Cell: ({ renderedCellValue }) => {
- return (
-
-
-
- );
+ if (renderedCellValue) {
+ return (
+
+
+
+ );
+ }
+ return بدون توضیحات;
},
},
],
diff --git a/src/components/dashboard/roadItems/operator/RowActions/DescriptionForm/index.jsx b/src/components/dashboard/roadItems/operator/RowActions/DescriptionForm/index.jsx
index 3f748c9..481e2d6 100644
--- a/src/components/dashboard/roadItems/operator/RowActions/DescriptionForm/index.jsx
+++ b/src/components/dashboard/roadItems/operator/RowActions/DescriptionForm/index.jsx
@@ -37,7 +37,7 @@ const DescriptionForm = ({ description }) => {
-
+
{description || "هیچ توضیحی موجود نیست"}
diff --git a/src/components/dashboard/roadItems/operator/RowActions/EditForm/EditFormContent.jsx b/src/components/dashboard/roadItems/operator/RowActions/EditForm/EditFormContent.jsx
index 620f052..164a07a 100644
--- a/src/components/dashboard/roadItems/operator/RowActions/EditForm/EditFormContent.jsx
+++ b/src/components/dashboard/roadItems/operator/RowActions/EditForm/EditFormContent.jsx
@@ -17,7 +17,7 @@ const EditFormContent = ({ setOpenEditDialog, onSubmit, defaultData }) => {
rahdaran_id: defaultData?.rahdaran || null,
};
- const onSubmitBase = (data) => {
+ const onSubmitBase = async (data) => {
let result = { ...data };
(result.before_image === null || result.before_image === defaultValues.before_image) &&
delete result.before_image;
@@ -40,7 +40,7 @@ const EditFormContent = ({ setOpenEditDialog, onSubmit, defaultData }) => {
});
delete result.cmms_machines;
- onSubmit({
+ await onSubmit({
result,
data: {
...data,
diff --git a/src/components/dashboard/roadItems/operator/RowActions/EditForm/EditFormCreate.jsx b/src/components/dashboard/roadItems/operator/RowActions/EditForm/EditFormCreate.jsx
index 4bd9a9c..7f2b6d8 100644
--- a/src/components/dashboard/roadItems/operator/RowActions/EditForm/EditFormCreate.jsx
+++ b/src/components/dashboard/roadItems/operator/RowActions/EditForm/EditFormCreate.jsx
@@ -158,7 +158,7 @@ const EditFormCreate = ({ defaultData, subItem, onSubmitBase, defaultValues, set