diff --git a/.env.example b/.env.example index eb18580..fd33e22 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ HOST="rms.witel.ir" -NEXT_PUBLIC_VERSION="1.7.8" +NEXT_PUBLIC_VERSION="1.8.0" NEXT_PUBLIC_API_URL="https://rms.witel.ir" NEXT_PUBLIC_MAPTILE_ENDPOINT="https://rmsmap.rmto.ir/141map" \ No newline at end of file diff --git a/src/components/dashboard/damages/operator/Actions/create/Forms/DamageItem.jsx b/src/components/dashboard/damages/operator/Actions/create/Forms/DamageItem.jsx index c1ea792..6c0a99f 100644 --- a/src/components/dashboard/damages/operator/Actions/create/Forms/DamageItem.jsx +++ b/src/components/dashboard/damages/operator/Actions/create/Forms/DamageItem.jsx @@ -87,7 +87,9 @@ const DamageItem = ({ baseOnChange, baseDamageItems }) => { `${option.title} - بروزرسانی: ${option.update_time ? moment(option.update_time).locale("fa").format("YYYY/MM/DD") : ""}` } + getOptionLabel={(option) => + `${option.title} - بروزرسانی: ${option.update_time ? moment(option.update_time).locale("fa").format("YYYY/MM/DD") : ""}` + } isOptionEqualToValue={(option, value) => option.id === value.id} loading={loadingDamageItemList} renderInput={(params) => ( diff --git a/src/components/dashboard/damages/operator/RowActions/ChangeStatus/Dialog.jsx b/src/components/dashboard/damages/operator/RowActions/ChangeStatus/Dialog.jsx new file mode 100644 index 0000000..64a3c70 --- /dev/null +++ b/src/components/dashboard/damages/operator/RowActions/ChangeStatus/Dialog.jsx @@ -0,0 +1,26 @@ +import { Close } from "@mui/icons-material"; +import { Dialog, DialogTitle, IconButton } from "@mui/material"; +import ChangeStatusForm from "./Form"; + +const ChangeStatusDialog = ({ open, setOpen, mutate, row }) => { + return ( + + setOpen(false)} + sx={(theme) => ({ + position: "absolute", + right: 8, + top: 8, + zIndex: 50, + color: theme.palette.grey[500], + })} + > + + + تغییر وضعیت + {open && } + + ); +}; +export default ChangeStatusDialog; diff --git a/src/components/dashboard/damages/operator/RowActions/ChangeStatus/Form.jsx b/src/components/dashboard/damages/operator/RowActions/ChangeStatus/Form.jsx new file mode 100644 index 0000000..370587c --- /dev/null +++ b/src/components/dashboard/damages/operator/RowActions/ChangeStatus/Form.jsx @@ -0,0 +1,96 @@ +import SelectBox from "@/core/components/SelectBox"; +import StyledForm from "@/core/components/StyledForm"; +import { CHANGE_STATUS_RECEIPT } from "@/core/utils/routes"; +import useRequest from "@/lib/hooks/useRequest"; +import { yupResolver } from "@hookform/resolvers/yup"; +import { Beenhere, ExitToApp } from "@mui/icons-material"; +import { Button, DialogActions, DialogContent, Grid, Stack } from "@mui/material"; +import { Controller, useForm } from "react-hook-form"; +import { object, string } from "yup"; + +const validationSchema = object({ + status: string().required("وضعیت را مشخص کنید!"), +}); + +const ChangeStatusForm = ({ setOpen, mutate, row }) => { + const requestServer = useRequest({ notificationSuccess: true }); + const defaultValues = { + status: row.original.status || "", + }; + + const handleClose = () => { + setOpen(false); + }; + + const { + control, + handleSubmit, + formState: { isSubmitting }, + } = useForm({ + defaultValues, + resolver: yupResolver(validationSchema), + mode: "all", + }); + const onSubmitBase = async (data) => { + const formData = new FormData(); + formData.append("status_id", data.status); + await requestServer(`${CHANGE_STATUS_RECEIPT}/${row.original.id}`, "post", { + data: formData, + }) + .then((response) => { + mutate(); + setOpen(false); + }) + .catch((error) => {}); + }; + + return ( + + + + + + ( + + )} + /> + + + + + + + + + + ); +}; +export default ChangeStatusForm; diff --git a/src/components/dashboard/damages/operator/RowActions/ChangeStatus/index.jsx b/src/components/dashboard/damages/operator/RowActions/ChangeStatus/index.jsx new file mode 100644 index 0000000..6c237be --- /dev/null +++ b/src/components/dashboard/damages/operator/RowActions/ChangeStatus/index.jsx @@ -0,0 +1,19 @@ +import { Reply } from "@mui/icons-material"; +import { IconButton, Tooltip } from "@mui/material"; +import { useState } from "react"; +import ChangeStatusDialog from "./Dialog"; + +const ChangeStatus = ({ row, mutate }) => { + const [open, setOpen] = useState(false); + return ( + <> + + setOpen(true)}> + + + + + + ); +}; +export default ChangeStatus; diff --git a/src/components/dashboard/damages/operator/RowActions/index.jsx b/src/components/dashboard/damages/operator/RowActions/index.jsx index c1e47d2..61cc5dc 100644 --- a/src/components/dashboard/damages/operator/RowActions/index.jsx +++ b/src/components/dashboard/damages/operator/RowActions/index.jsx @@ -6,12 +6,13 @@ import SendToInsurance from "./SendToInsurance"; import PoliceRahLetter from "./PoliceRahLetter"; import EditForm from "../Form/EditForm"; import { usePermissions } from "@/lib/hooks/usePermissions"; +import ChangeStatus from "./ChangeStatus"; const RowActions = ({ row, mutate }) => { const { data: userPermissions } = usePermissions(); - const hasDeletePermission = userPermissions.some((item) => - ["delete-receipt", "delete-receipt-province"].includes(item) - ); + const hasChangeStatusPermission = userPermissions.some((item) => ["change-accident-status"].includes(item)); + const hasDeletePermission = userPermissions.some((item) => ["delete-receipt"].includes(item)); + const hasDeleteProvincePermission = userPermissions.some((item) => ["delete-receipt-province"].includes(item)); const hasEditPermission = userPermissions.some((item) => ["edit-receipt", "edit-receipt-province"].includes(item)); return ( @@ -26,9 +27,10 @@ const RowActions = ({ row, mutate }) => { {hasEditPermission && [0].includes(row.original?.status) && ( )} - {hasDeletePermission && [0].includes(row.original?.status) && ( + {(hasDeletePermission || (hasDeleteProvincePermission && [0].includes(row.original?.status))) && ( )} + {hasChangeStatusPermission && } ); }; diff --git a/src/components/dashboard/damages/operator/index.jsx b/src/components/dashboard/damages/operator/index.jsx index 9fc6158..211e5af 100644 --- a/src/components/dashboard/damages/operator/index.jsx +++ b/src/components/dashboard/damages/operator/index.jsx @@ -1,12 +1,35 @@ "use client"; import PageTitle from "@/core/components/PageTitle"; -import { Stack } from "@mui/material"; +import { Alert, AlertTitle, List, ListItem, Stack, Typography } from "@mui/material"; import OperatorList from "./OperatorList"; +import { useState } from "react"; const OperatorPage = () => { + const [open, setOpen] = useState(true); return ( + {open && ( + setOpen(false)}> + اطلاعیه مهم – خسارات وارده بر ابنیه فنی و تاسیسات راه + + کارشناسان محترم، + + + چنانچه خساراتی که قبلاً ثبت کرده‌اید به مرحله صدور فاکتور رسیده و پس از آن متوجه اشکالی در ثبت + آن‌ها شده‌اید (مانند اشتباه در مبلغ یا سایر اطلاعات)، لازم است: + + + کد یکتای خسارت‌های مربوطه را استخراج نمایید. + + با پشتیبانی سامانه تماس بگیرید تا نسبت به حذف آن خسارات اقدام گردد. + + + + توجه: حذف خسارت‌های مشکل‌دار بسیار حائز اهمیت است و بر امتیاز استانی شما تأثیر مستقیم دارد. + + + )} ); diff --git a/src/components/dashboard/roadItems/operator/OperatorList.jsx b/src/components/dashboard/roadItems/operator/OperatorList.jsx index ff5fe03..7b4597a 100644 --- a/src/components/dashboard/roadItems/operator/OperatorList.jsx +++ b/src/components/dashboard/roadItems/operator/OperatorList.jsx @@ -138,8 +138,8 @@ const OperatorList = () => { props.dependencyFieldValue.value === "" ? "empty" : loadingSubItemsList - ? "loading" - : props.filterParameters.value + ? "loading" + : props.filterParameters.value } columnSelectOption={getColumnSelectOptions} /> diff --git a/src/components/dashboard/roadItems/supervisor/SupervisorList.jsx b/src/components/dashboard/roadItems/supervisor/SupervisorList.jsx index d2e169d..69cc288 100644 --- a/src/components/dashboard/roadItems/supervisor/SupervisorList.jsx +++ b/src/components/dashboard/roadItems/supervisor/SupervisorList.jsx @@ -138,8 +138,8 @@ const SupervisorList = () => { props.dependencyFieldValue?.value === "" ? "empty" : loadingEdaratList - ? "loading" - : props.filterParameters.value + ? "loading" + : props.filterParameters.value } columnSelectOption={getColumnSelectOptions} /> @@ -238,8 +238,8 @@ const SupervisorList = () => { props.dependencyFieldValue.value === "" ? "empty" : loadingSubItemsList - ? "loading" - : props.filterParameters.value + ? "loading" + : props.filterParameters.value } columnSelectOption={getColumnSelectOptions} /> @@ -336,7 +336,7 @@ const SupervisorList = () => { filterMode: "between", grow: false, size: 100, - } + }, ], }, { diff --git a/src/components/dashboard/roadMissions/transportation/RowActions/Allocation/Form/MachinesDialog/MachineList/RowActions/Allocate/index.jsx b/src/components/dashboard/roadMissions/transportation/RowActions/Allocation/Form/MachinesDialog/MachineList/RowActions/Allocate/index.jsx index fd0e3c6..075f80e 100644 --- a/src/components/dashboard/roadMissions/transportation/RowActions/Allocation/Form/MachinesDialog/MachineList/RowActions/Allocate/index.jsx +++ b/src/components/dashboard/roadMissions/transportation/RowActions/Allocation/Form/MachinesDialog/MachineList/RowActions/Allocate/index.jsx @@ -9,7 +9,12 @@ const Allocate = ({ row, setMachine, setOpenMachinesDialog }) => { return ( <> - diff --git a/src/components/dashboard/roadPatrols/supervisor/SupervisorList.jsx b/src/components/dashboard/roadPatrols/supervisor/SupervisorList.jsx index 47b3c01..b32b0ff 100644 --- a/src/components/dashboard/roadPatrols/supervisor/SupervisorList.jsx +++ b/src/components/dashboard/roadPatrols/supervisor/SupervisorList.jsx @@ -128,8 +128,8 @@ const SupervisorList = () => { props.dependencyFieldValue?.value === "" ? "empty" : loadingEdaratList - ? "loading" - : props.filterParameters.value + ? "loading" + : props.filterParameters.value } columnSelectOption={getColumnSelectOptions} /> diff --git a/src/components/dashboard/roadSafety/reports/accessRoad/index.jsx b/src/components/dashboard/roadSafety/reports/accessRoad/index.jsx index f80b82c..4fa2fa5 100644 --- a/src/components/dashboard/roadSafety/reports/accessRoad/index.jsx +++ b/src/components/dashboard/roadSafety/reports/accessRoad/index.jsx @@ -184,8 +184,6 @@ const ReportAccessRoadPage = () => { fetchData(); }, [filterData]); - console.log(data); - return ( diff --git a/src/components/dashboard/roadSafety/reports/constructionActivity/index.jsx b/src/components/dashboard/roadSafety/reports/constructionActivity/index.jsx index 015aef1..d3c784b 100644 --- a/src/components/dashboard/roadSafety/reports/constructionActivity/index.jsx +++ b/src/components/dashboard/roadSafety/reports/constructionActivity/index.jsx @@ -184,8 +184,6 @@ const ReportConstructionActivityPage = () => { fetchData(); }, [filterData]); - console.log(data); - return ( diff --git a/src/components/dashboard/roadSafety/reports/utilityPassingActivity/index.jsx b/src/components/dashboard/roadSafety/reports/utilityPassingActivity/index.jsx index 97ba87e..5621b3a 100644 --- a/src/components/dashboard/roadSafety/reports/utilityPassingActivity/index.jsx +++ b/src/components/dashboard/roadSafety/reports/utilityPassingActivity/index.jsx @@ -184,8 +184,6 @@ const ReportUtilityPassingActivityPage = () => { fetchData(); }, [filterData]); - console.log(data); - return ( diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js index 75eb864..a2e7f01 100644 --- a/src/core/utils/routes.js +++ b/src/core/utils/routes.js @@ -112,6 +112,7 @@ export const GET_INSURANCE = api + "/api/v3/receipts/generate_insurance_letter"; export const GET_INSURANCE_PAGE = api + "/v2/receipt/send-to-insurance"; export const GET_POLICERAH = api + "/api/v3/receipts/generate_police_document"; export const GET_POLICERAH_PAGE = api + "/v2/receipt/document-release"; +export const CHANGE_STATUS_RECEIPT = api + "/api/v3/receipts/change_status"; // recept report export const GET_COUNTRY_RECEIPT_REPORT = api + "/api/v3/receipt_reports/country_report";