diff --git a/src/components/dashboard/roadMissions/operator/Actions/Violations/Dialog.jsx b/src/components/dashboard/roadMissions/operator/Actions/Violations/Dialog.jsx index 200b891..8cb7c67 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Violations/Dialog.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Violations/Dialog.jsx @@ -2,7 +2,7 @@ import { Close } from "@mui/icons-material"; import { Dialog, DialogTitle, IconButton } from "@mui/material"; import ViolationsList from "./ViolationsList"; -const ViolationsDialog = ({ open, setOpen, mutate, row }) => { +const ViolationsDialog = ({ open, setOpen, mutate }) => { return ( { تخلفات - {open && } + {open && } ); }; diff --git a/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/Form/MachineAndDriver/index.jsx b/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/Form/MachineAndDriver/index.jsx index 912eb63..8b85d7e 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/Form/MachineAndDriver/index.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/Form/MachineAndDriver/index.jsx @@ -21,7 +21,7 @@ const MachineAndDriver = ({ setTabState, allData, setAllData, handlePrev }) => { راننده diff --git a/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/Form/Rahdaran/List/index.jsx b/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/Form/Rahdaran/List/index.jsx index be31897..a1fc177 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/Form/Rahdaran/List/index.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/Form/Rahdaran/List/index.jsx @@ -25,17 +25,17 @@ const RahdaranList = ({ rahdaran, setRahdaran }) => { my: 1, }} > - + نام و نام خانوادگی: {rahdar.name} - - کدملی: - {rahdar.code} - + {/**/} + {/* کدملی:*/} + {/* - /!*{rahdar.code}*!/*/} + {/**/} handleRemove(index)}> diff --git a/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/index.jsx b/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/index.jsx index 9010671..72ae833 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/index.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/MissionCorrection/index.jsx @@ -5,7 +5,7 @@ import { Dialog, IconButton, Tooltip } from "@mui/material"; import { useState } from "react"; import CreateForm from "./Form"; -const MissionCorrection = ({ row, mutate }) => { +const MissionCorrection = ({ row, mutate, baseMutate }) => { const [submitting, setSubmitting] = useState(false); const requestServer = useRequest({ notificationSuccess: true }); const [open, setOpen] = useState(false); @@ -31,6 +31,7 @@ const MissionCorrection = ({ row, mutate }) => { }) .then((response) => { mutate(); + baseMutate() setOpen(false); }) .catch((error) => {}) diff --git a/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/index.jsx b/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/index.jsx index 24e9532..a384e03 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/index.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Violations/RowActions/index.jsx @@ -1,9 +1,9 @@ import MissionCorrection from "./MissionCorrection"; -export default function RowActions({ row, mutate }) { +export default function RowActions({ row, mutate, baseMutate }) { return ( <> - + ); } diff --git a/src/components/dashboard/roadMissions/operator/Actions/Violations/ViolationsList.jsx b/src/components/dashboard/roadMissions/operator/Actions/Violations/ViolationsList.jsx index 40edd7a..82a993d 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Violations/ViolationsList.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Violations/ViolationsList.jsx @@ -7,7 +7,7 @@ import useCities from "@/lib/hooks/useCities"; import CustomSelectByDependency from "@/core/components/DataTable/filter/fieldsType/CustomSelectByDependency"; import useProvinces from "@/lib/hooks/useProvince"; -const ViolationsList = ({ setOpen }) => { +const ViolationsList = ({ setOpen, mutate }) => { const columns = useMemo(() => { const dynamicColumns = { header: "استان", @@ -132,7 +132,7 @@ const ViolationsList = ({ setOpen }) => { table_name={"operatorViolationsList"} enableRowActions positionActionsColumn={"first"} - RowActions={(props) => } + RowActions={(props) => } /> diff --git a/src/components/dashboard/roadMissions/operator/Actions/Violations/index.jsx b/src/components/dashboard/roadMissions/operator/Actions/Violations/index.jsx index 3d5f48a..261fb4e 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Violations/index.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Violations/index.jsx @@ -4,7 +4,7 @@ import ViolationsDialog from "./Dialog"; import theme from "@/core/utils/theme"; import RemoveRoadIcon from "@mui/icons-material/RemoveRoad"; -const OperatorViolations = ({ row, mutate }) => { +const OperatorViolations = ({ mutate }) => { const [open, setOpen] = useState(false); const isMobile = useMediaQuery(theme.breakpoints.down("sm")); return ( @@ -26,7 +26,7 @@ const OperatorViolations = ({ row, mutate }) => { )} - + ); }; diff --git a/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/GetItemInfo/index.jsx b/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/GetItemInfo/index.jsx index 6e3afa0..ce38e38 100644 --- a/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/GetItemInfo/index.jsx +++ b/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/GetItemInfo/index.jsx @@ -8,6 +8,7 @@ import { ExitToApp } from "@mui/icons-material"; import { Box, Button, DialogActions, DialogContent, Grid, Stack } from "@mui/material"; import { Controller, useForm } from "react-hook-form"; import { object, string } from "yup"; +import LtrTextField from "@/core/components/LtrTextField"; const validationSchema = object({ explanation: string().required("موضوع را مشخص کنید!"), @@ -125,6 +126,29 @@ const GetItemInfo = ({ allData, setAllData, handlePrev, setTabState }) => { }} /> + + + ( + { + if (isNaN(Number(e.target.value))) return; + field.onChange(e.target.value); + }} + size="small" + fullWidth + label="کیلومتر خودرو / ساعت کار" + InputLabelProps={{ shrink: true }} + /> + )} + /> + + diff --git a/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/Verify/index.jsx b/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/Verify/index.jsx index 89e0b41..39f511f 100644 --- a/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/Verify/index.jsx +++ b/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/Verify/index.jsx @@ -60,6 +60,11 @@ const Verify = ({ allData, handlePrev, submitForm, submitting }) => { + + کیلومتر خودرو / ساعت کار + + + تاریخ شروع ماموریت diff --git a/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/index.jsx b/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/index.jsx index 0adbb1f..aa5f3f7 100644 --- a/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/index.jsx +++ b/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/Form/index.jsx @@ -25,7 +25,6 @@ const reducer = (state, action) => { }; const CreateForm = ({ defaultValues, submitForm, setOpen, submitting, oldBound }) => { - console.log("defaultValues", defaultValues); const [allData, dispatch] = useReducer(reducer, defaultValues); const [tabState, setTabState] = useState(0); diff --git a/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/index.jsx b/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/index.jsx index 31c0005..b1ed8a9 100644 --- a/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/index.jsx +++ b/src/components/dashboard/roadMissions/operator/RowActions/Add/AddController/Dialog/index.jsx @@ -18,6 +18,7 @@ const DialogAdd = ({ mutate, setOpen, oldBound, rahdaran, machine, row }) => { driver: row.original.driver_id, zone: result.region, type: result.type, + end_km: result.end_km, ...(result.type == 1 ? { end_date: `${result.end_date} ${moment(result.end_time).format("HH:mm")}`, @@ -54,6 +55,7 @@ const DialogAdd = ({ mutate, setOpen, oldBound, rahdaran, machine, row }) => { rahdaran: rahdaran.filter((r) => !r.is_driver), bound_type: "polyline", type: "", + end_km : "", end_date: "", end_time: null, end_point: "", diff --git a/src/components/dashboard/roadMissions/operator/RowActions/Edit/EditController/index.jsx b/src/components/dashboard/roadMissions/operator/RowActions/Edit/EditController/index.jsx index 6d9cac7..e838647 100644 --- a/src/components/dashboard/roadMissions/operator/RowActions/Edit/EditController/index.jsx +++ b/src/components/dashboard/roadMissions/operator/RowActions/Edit/EditController/index.jsx @@ -3,61 +3,75 @@ import useRequest from "@/lib/hooks/useRequest"; import DialogLoading from "@/core/components/DialogLoading"; import CreateForm from "../../../Actions/Create/Form"; import moment from "jalali-moment"; -import L from "leaflet"; +import polyline from "@mapbox/polyline"; import { GET_RAHDARAN_BY_ID, UPDATE_REQUEST_MISSION } from "@/core/utils/routes"; const EditController = ({ row, mutate, openEditDialog, setOpenEditDialog }) => { - const latLngs = useMemo(() => { - return row.original.area.coordinates.map(([lng, lat]) => [lat, lng]); - }, [row.original.area.coordinates]); - - const bound = useMemo( - () => (row.original.area.type === "polygon" ? L.polygon(latLngs) : L.polyline(latLngs)), - [row.original.area.type, latLngs] - ); - const [submitting, setSubmitting] = useState(false); const [rahdaran, setRahdaran] = useState(null); const [rahdaranLoading, setRahdaranLoading] = useState(true); + const requestServer = useRequest(); + const locations = useMemo(() => { + if (!row.original.encoded_route) return []; + + const decoded = polyline.decode(row.original.encoded_route, 6); + + if (decoded.length === 0) return []; + + return [ + { + lat: decoded[0][0], + lon: decoded[0][1], + }, + { + lat: decoded[decoded.length - 1][0], + lon: decoded[decoded.length - 1][1], + }, + ]; + }, [row.original.encoded_route]); + useEffect(() => { setRahdaranLoading(true); + requestServer(`${GET_RAHDARAN_BY_ID}/${row.original.id}`, "get") .then((response) => { setRahdaran(response.data.data); - setRahdaranLoading(false); }) - .catch((e) => { + .catch(() => {}) + .finally(() => { setRahdaranLoading(false); }); }, [row.original.id]); const submitForm = async (result) => { setSubmitting(true); - const latlngs = result.bound.getLatLngs(); - const normalized = result.bound_type === "polygon" ? latlngs : [latlngs]; - - const area = normalized.map((ring) => ring.map(({ lat, lng }) => [lat, lng])); await requestServer(`${UPDATE_REQUEST_MISSION}/${row.original.id}`, "post", { data: { explanation: result.explanation, category_id: result.category_id, + ...(result.category_id == 3 ? { road_observed_id: result.road_observed_id, } : {}), - area: { - type: result.bound_type, - coordinates: area[0], - }, - ...(result.rahdaran.length != 0 ? { rahdaran: result.rahdaran.map((r) => r.id) } : {}), + + encoded_route: result.area, + + ...(result.rahdaran.length !== 0 + ? { + rahdaran: result.rahdaran.map((r) => r.id), + } + : {}), + requested_machines: result.requested_machines, type: result.type, zone: result.region, end_point: result.end_point, + ...(result.type == 1 ? { start_date: `${result.start_date} ${moment(result.start_time).format("HH:mm")}`, @@ -71,46 +85,51 @@ const EditController = ({ row, mutate, openEditDialog, setOpenEditDialog }) => { hasSidebarUpdate: true, notificationSuccess: true, }) - .then((response) => { + .then(() => { mutate(); setOpenEditDialog(false); }) - .catch((error) => {}) + .catch(() => {}) .finally(() => { setSubmitting(false); }); }; - return ( - <> - {rahdaranLoading ? ( - - ) : ( - !r.isDriver), - requested_machines: row.original.requested_machines, - bound: bound, - bound_type: row.original.area.type, - type: row.original.type, - start_date: moment(row.original.start_date).format("YYYY-MM-DD"), - start_time: moment(row.original.start_date).toDate(), - end_date: moment(row.original.end_date).format("YYYY-MM-DD"), - end_time: moment(row.original.end_date).toDate(), - end_point: row.original.end_point, - region: row.original.zone, - }} - submitForm={submitForm} - submitting={submitting} - open={openEditDialog} - setOpen={setOpenEditDialog} - mutate={mutate} - /> - )} - + return rahdaranLoading ? ( + + ) : ( + !r.isDriver), + + requested_machines: row.original.requested_machines, + + area: row.original.encoded_route, + locations, + + type: row.original.type, + + start_date: moment(row.original.start_date).format("YYYY-MM-DD"), + start_time: moment(row.original.start_date).toDate(), + + end_date: moment(row.original.end_date).format("YYYY-MM-DD"), + end_time: moment(row.original.end_date).toDate(), + + end_point: row.original.end_point, + region: row.original.zone, + }} + submitForm={submitForm} + submitting={submitting} + open={openEditDialog} + setOpen={setOpenEditDialog} + mutate={mutate} + /> ); }; + export default EditController; diff --git a/src/components/dashboard/roadMissions/operator/Toolbar.jsx b/src/components/dashboard/roadMissions/operator/Toolbar.jsx index 071b9c0..b3f0e65 100644 --- a/src/components/dashboard/roadMissions/operator/Toolbar.jsx +++ b/src/components/dashboard/roadMissions/operator/Toolbar.jsx @@ -7,7 +7,7 @@ const Toolbar = ({ table, filterData, mutate }) => { return ( - + {/**/} ); diff --git a/src/components/dashboard/roadMissions/transportation/RowActions/Allocation/Form/MachinesDialog/MachineList/index.jsx b/src/components/dashboard/roadMissions/transportation/RowActions/Allocation/Form/MachinesDialog/MachineList/index.jsx index 4173929..b602ea4 100644 --- a/src/components/dashboard/roadMissions/transportation/RowActions/Allocation/Form/MachinesDialog/MachineList/index.jsx +++ b/src/components/dashboard/roadMissions/transportation/RowActions/Allocation/Form/MachinesDialog/MachineList/index.jsx @@ -78,7 +78,6 @@ const MachinesList = ({ machineType, setMachine, setOpenMachinesDialog }) => { columns={columns} specialFilter={[ { value: machineType, datatype: "text", id: "car_type", fn: "equals" }, - { value: 1, datatype: "numeric", id: "status", fn: "equals" }, { value: city_id ? city_id : province_id, datatype: "numeric", diff --git a/src/components/dashboard/roadMissions/violations/Actions/EditViolation/EditController.jsx b/src/components/dashboard/roadMissions/violations/Actions/EditViolation/EditController.jsx index 85fd833..8742351 100644 --- a/src/components/dashboard/roadMissions/violations/Actions/EditViolation/EditController.jsx +++ b/src/components/dashboard/roadMissions/violations/Actions/EditViolation/EditController.jsx @@ -11,6 +11,7 @@ const EditController = ({ rowId, mutate, setOpen, row }) => { const defaultData = { end_date: endDate, + end_km : "", end_time: row?.original?.enter_time ? new Date(row.original.enter_time) : null, }; const handleSubmit = async (result) => { @@ -19,6 +20,7 @@ const EditController = ({ rowId, mutate, setOpen, row }) => { if (result.end_date && result.end_time) { payload.enter_time = `${result.end_date} ${moment(result.end_time).format("HH:mm")}`; } + payload.end_km = result.end_km; await requestServer(`${EDIT_VIOLATION}/${rowId}`, "post", { data: payload, diff --git a/src/components/dashboard/roadMissions/violations/Actions/EditViolation/EditViolationForm.jsx b/src/components/dashboard/roadMissions/violations/Actions/EditViolation/EditViolationForm.jsx index 4beac95..7efdf23 100644 --- a/src/components/dashboard/roadMissions/violations/Actions/EditViolation/EditViolationForm.jsx +++ b/src/components/dashboard/roadMissions/violations/Actions/EditViolation/EditViolationForm.jsx @@ -1,9 +1,10 @@ -import { useForm } from "react-hook-form"; +import { Controller, useForm } from "react-hook-form"; import { yupResolver } from "@hookform/resolvers/yup"; import StyledForm from "@/core/components/StyledForm"; import { Box, Button, DialogActions, DialogContent, Grid, Stack } from "@mui/material"; import MissionDates from "./MissionDates"; import * as yup from "yup"; +import LtrTextField from "@/core/components/LtrTextField"; export const schema = yup .object({ @@ -55,7 +56,7 @@ const EditViolationForm = ({ setOpenMachinesDialog, defaultValues, onSubmitBase <> - + @@ -73,7 +74,28 @@ const EditViolationForm = ({ setOpenMachinesDialog, defaultValues, onSubmitBase )} - + + ( + { + if (isNaN(Number(e.target.value))) return; + field.onChange(e.target.value); + }} + size="small" + fullWidth + label="کیلومتر خودرو / ساعت کار" + InputLabelProps={{ shrink: true }} + /> + )} + /> + +