@@ -56,12 +77,21 @@ const ActionsDuringPatrol = ({ allData, setAllData, handlePrev, setTabState }) =
>
{actionsList.map((action, index) => (
- deleteAction(index)}
- />
+ {action.instant_action == 1 ? (
+ deleteAction(index)}
+ />
+ ) : (
+ deleteAction(index)}
+ />
+ )}
))}
diff --git a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/CompeleteRequest.jsx b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/CompeleteRequest.jsx
index 40f59da..0fa5919 100644
--- a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/CompeleteRequest.jsx
+++ b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/CompeleteRequest.jsx
@@ -109,19 +109,34 @@ const CompeleteRequest = ({ allData, handlePrev, mutate, setOpen }) => {
formData.append(`stop_points[${index}][startDT]`, stop_point.startDT);
});
allData.observed_items.forEach((observed_item, index) => {
- formData.append(`observed_items[${index}][instant_action]`, 1);
- formData.append(`observed_items[${index}][local_name]`, "");
- formData.append(`observed_items[${index}][start_point]`, observed_item.result.start_point);
- formData.append(`observed_items[${index}][end_point]`, observed_item.result.end_point);
- formData.append(`observed_items[${index}][amount]`, observed_item.result.amount);
- formData.append(`observed_items[${index}][before_image]`, observed_item.result.before_image);
- formData.append(`observed_items[${index}][after_image]`, observed_item.result.after_image);
- formData.append(`observed_items[${index}][item_id]`, observed_item.result.item_id);
- formData.append(`observed_items[${index}][sub_item_id]`, observed_item.result.sub_item_id);
- formData.append(`observed_items[${index}][road_item_machines_id][]`, allData.roadPatrolMachinesId.id);
- allData.road_patrol_rahdaran_id.forEach((rahdar, i) =>
- formData.append(`observed_items[${index}][road_item_rahdaran_id][]`, rahdar.id)
- );
+ if (observed_item.instant_action == 1) {
+ formData.append(`observed_items[${index}][instant_action]`, observed_item.instant_action);
+ formData.append(`observed_items[${index}][local_name]`, "");
+ formData.append(`observed_items[${index}][start_point]`, observed_item.result.start_point);
+ if (observed_item.result.end_point)
+ formData.append(`observed_items[${index}][end_point]`, observed_item.result.end_point);
+ formData.append(`observed_items[${index}][amount]`, observed_item.result.amount);
+ formData.append(`observed_items[${index}][before_image]`, observed_item.result.before_image);
+ formData.append(`observed_items[${index}][after_image]`, observed_item.result.after_image);
+ formData.append(`observed_items[${index}][item_id]`, observed_item.result.item_id);
+ formData.append(`observed_items[${index}][sub_item_id]`, observed_item.result.sub_item_id);
+ formData.append(
+ `observed_items[${index}][road_item_machines_id][]`,
+ allData.roadPatrolMachinesId.id
+ );
+ allData.road_patrol_rahdaran_id.forEach((rahdar, i) =>
+ formData.append(`observed_items[${index}][road_item_rahdaran_id][]`, rahdar.id)
+ );
+ } else {
+ formData.append(`observed_items[${index}][instant_action]`, observed_item.instant_action);
+ formData.append(`observed_items[${index}][local_name]`, observed_item.result.local_name);
+ formData.append(`observed_items[${index}][priority]`, observed_item.result.priority);
+ formData.append(`observed_items[${index}][start_point]`, observed_item.result.start_point);
+ if (observed_item.result.end_point)
+ formData.append(`observed_items[${index}][end_point]`, observed_item.result.end_point);
+ formData.append(`observed_items[${index}][item_id]`, observed_item.result.item_id);
+ formData.append(`observed_items[${index}][sub_item_id]`, observed_item.result.sub_item_id);
+ }
});
formData.append("start_time", allData.start_time);
formData.append("end_time", allData.end_time);
diff --git a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/CreateFormContentObservedItem.jsx b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/CreateFormContentObservedItem.jsx
new file mode 100644
index 0000000..63b0ec9
--- /dev/null
+++ b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/CreateFormContentObservedItem.jsx
@@ -0,0 +1,203 @@
+import GetItemsForm from "@/components/dashboard/roadItems/operator/Actions/Create/Forms/GetItemsForm";
+import GetSubItemsForm from "@/components/dashboard/roadItems/operator/Actions/Create/Forms/GetSubItemsForm";
+import StyledForm from "@/core/components/StyledForm";
+import { useTheme } from "@emotion/react";
+import { yupResolver } from "@hookform/resolvers/yup";
+import BeenhereIcon from "@mui/icons-material/Beenhere";
+import ExitToAppIcon from "@mui/icons-material/ExitToApp";
+import FileCopyIcon from "@mui/icons-material/FileCopy";
+import InfoIcon from "@mui/icons-material/Info";
+import InsertDriveFileIcon from "@mui/icons-material/InsertDriveFile";
+import KeyboardDoubleArrowRightIcon from "@mui/icons-material/KeyboardDoubleArrowRight";
+import { Box, Button, DialogActions, DialogContent, Tab, Tabs, useMediaQuery } from "@mui/material";
+import { useState } from "react";
+import { useForm } from "react-hook-form";
+import { mixed, number, object, string } from "yup";
+import GetObservedItemInfo from "./GetObservedItemInfo";
+
+function TabPanel(props) {
+ const { children, value, index } = props;
+ return (
+
+ {value === index && {children}}
+
+ );
+}
+
+const validationSchema = object({
+ item_id: number().required("نوع آیتم را مشخص کنید!"),
+ sub_item_id: number().required("اقدام انجام شده را مشخص کنید!"),
+ local_name: string().required("نام محلی را مشخص کنید!"),
+ priority: string().required("اولویت را مشخص کنید!"),
+ start_point: mixed()
+ .test("start-point-required", "لطفاً نقطه شروع را مشخص کنید!", function (value) {
+ return !!value; // چک میکند که مقدار موجود است
+ })
+ .required("لطفاً نقطه شروع را مشخص کنید!"),
+ end_point: mixed().test("end-point-required", "لطفاً نقطه پایان را مشخص کنید!", function (value) {
+ const { subItemsList } = this.options.context;
+ const needsEndPoint = subItemsList?.needs_end_point === 1;
+ if (needsEndPoint) {
+ return !!value; // چک میکند که مقدار موجود است
+ }
+ return true;
+ }),
+});
+
+const CreateFormContentObservedItem = ({ setOpen, onSubmit }) => {
+ const defaultValues = {
+ item_id: null,
+ sub_item_id: null,
+ local_name: "",
+ priority: "1",
+ start_point: "",
+ end_point: "",
+ };
+
+ const [tabState, setTabState] = useState(0);
+ const [itemsList, setItemsList] = useState();
+ const [subItemsList, setSubItemsList] = useState([]);
+ const theme = useTheme();
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
+
+ const handleClose = () => {
+ setOpen(false);
+ };
+
+ const handleChangeTab = (event, newValue) => {
+ setTabState(newValue);
+ };
+
+ const handlePrev = () => {
+ if (tabState === 2) {
+ const fieldsToReset = ["local_name", "priority", "start_point", "end_point"];
+ fieldsToReset.forEach((field) => resetField(field));
+ }
+ if (tabState === 0) {
+ handleClose();
+ } else {
+ setTabState(tabState - 1);
+ }
+ };
+ const {
+ control,
+ watch,
+ getValues,
+ register,
+ handleSubmit,
+ setValue,
+ resetField,
+ formState: { errors, isSubmitting },
+ } = useForm({
+ defaultValues,
+ resolver: yupResolver(validationSchema),
+ mode: "onBlur",
+ context: { subItemsList },
+ });
+ const onSubmitBase = async (data) => {
+ let result = { ...data };
+
+ if (result.end_point === "") {
+ delete result.end_point;
+ delete data.end_point;
+ } else {
+ result.end_point = `${result.end_point.lat},${result.end_point.lng}`;
+ }
+
+ if (result.start_point === "") {
+ delete result.start_point;
+ delete data.start_point;
+ } else {
+ result.start_point = `${result.start_point.lat},${result.start_point.lng}`;
+ }
+
+ await onSubmit({
+ result,
+ data: {
+ ...data,
+ item_name: itemsList.name,
+ sub_item_name: subItemsList.name,
+ unit_fa: subItemsList.unit,
+ },
+ });
+ };
+
+ return (
+
+
+ } label="انتخاب آیتم" />
+ } label="انتخاب اقدام مشاهده شده" />
+ } label="اطلاعات فعالیت" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ : }
+ >
+ {tabState === 0 ? "بستن" : "مرحله قبل"}
+
+ {tabState === 2 && (
+ }
+ >
+ {isSubmitting ? "در حال ثبت فعالیت" : "ثبت فعالیت"}
+
+ )}
+
+
+ );
+};
+export default CreateFormContentObservedItem;
diff --git a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/GetObservedItemInfo.jsx b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/GetObservedItemInfo.jsx
new file mode 100644
index 0000000..63a1953
--- /dev/null
+++ b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/GetObservedItemInfo.jsx
@@ -0,0 +1,55 @@
+import MapInfoOneMarker from "@/core/components/MapInfoOneMarker";
+import MapInfoTwoMarker from "@/core/components/MapInfoTwoMarker";
+import { FormControl, InputLabel, MenuItem, OutlinedInput, Select, Stack, TextField } from "@mui/material";
+import PreviousStatesInfoInObservedItem from "./PreviousStatesInfoInObservedItem";
+
+const GetObservedItemInfo = ({ register, itemsList, subItemsList, control, setValue, errors, watch, getValues }) => {
+ return (
+
+
+
+
+
+
+
+
+
+
+ اولویت
+
+ }
+ size="small"
+ displayEmpty
+ >
+
+
+
+
+
+
+
+ {subItemsList?.needs_end_point === 1 ? (
+
+ ) : (
+
+ )}
+
+
+ );
+};
+export default GetObservedItemInfo;
diff --git a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ModalActionsDuringPatrol.jsx b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ModalActionsDuringPatrol.jsx
index 073fd9e..97be471 100644
--- a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ModalActionsDuringPatrol.jsx
+++ b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ModalActionsDuringPatrol.jsx
@@ -3,7 +3,7 @@ import { Dialog } from "@mui/material";
const ModalActionsDuringPatrol = ({ open, setOpen, setActionsList }) => {
const HandleSubmit = async (data) => {
- setActionsList((prev) => [...prev, data]);
+ setActionsList((prev) => [...prev, { ...data, instant_action: 1 }]);
setOpen(false);
};
diff --git a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ModalObservedItemPatrol.jsx b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ModalObservedItemPatrol.jsx
new file mode 100644
index 0000000..9a6c0fc
--- /dev/null
+++ b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ModalObservedItemPatrol.jsx
@@ -0,0 +1,16 @@
+import { Dialog } from "@mui/material";
+import CreateFormContentObservedItem from "./CreateFormContentObservedItem";
+
+const ModalObservedItemPatrol = ({ open, setOpen, setActionsList }) => {
+ const HandleSubmit = async (data) => {
+ setActionsList((prev) => [...prev, { ...data, instant_action: 0 }]);
+ setOpen(false);
+ };
+
+ return (
+
+ );
+};
+export default ModalObservedItemPatrol;
diff --git a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ObservedInfo.jsx b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ObservedInfo.jsx
new file mode 100644
index 0000000..16b9953
--- /dev/null
+++ b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/ObservedInfo.jsx
@@ -0,0 +1,37 @@
+"use client";
+
+import DeleteIcon from "@mui/icons-material/Delete";
+import VisibilityIcon from "@mui/icons-material/Visibility";
+import { Box, Card, CardActions, CardHeader, Chip, IconButton, Typography } from "@mui/material";
+
+const ObservedInfo = ({ action, deleteAction }) => {
+ return (
+
+ }
+ title={
+
+ {action.data.item_name}
+
+ }
+ subheader={action.data.sub_item_name}
+ />
+
+
+
+
+
+
+
+
+ );
+};
+
+export default ObservedInfo;
diff --git a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/PreviousStatesInfoInObservedItem.jsx b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/PreviousStatesInfoInObservedItem.jsx
new file mode 100644
index 0000000..7476631
--- /dev/null
+++ b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/PreviousStatesInfoInObservedItem.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 PreviousStatesInfoInObservedItem = ({ itemsList, subItemsList }) => {
+ return (
+
+
+
+ }
+ label={
+
+ آیتم انتخاب شده
+
+ }
+ />
+
+
+
+ {itemsList.name || "هیچ آیتمی انتخاب نشده است"}
+
+
+
+
+ }
+ label={
+
+ اقدام مشاهده شده
+
+ }
+ />
+
+
+
+ {subItemsList?.name || "هیچ اقدامی انتخاب نشده است"}
+
+
+
+ );
+};
+export default PreviousStatesInfoInObservedItem;