diff --git a/package.json b/package.json
index a4532cb..8a2e759 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"@mui/material-nextjs": "^5.16.6",
"@mui/x-date-pickers": "^6.19.5",
"@mui/x-tree-view": "^7.11.0",
+ "@turf/turf": "^7.2.0",
"axios": "^1.7.2",
"date-fns": "^3.3.1",
"date-fns-jalali": "^2.13.0-0",
diff --git a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/assistant/page.js b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/assistant/page.js
new file mode 100644
index 0000000..c13a78d
--- /dev/null
+++ b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/assistant/page.js
@@ -0,0 +1,13 @@
+import WithPermission from "@/core/middlewares/withPermission";
+export const metadata = {
+ title: "کارتابل معاون",
+};
+const Page = () => {
+ return (
+
+ کارتابل معاون
+
+ );
+};
+
+export default Page;
diff --git a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/assistant/zamin-gov/page.js b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/assistant/zamin-gov/page.js
deleted file mode 100644
index d82631a..0000000
--- a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/assistant/zamin-gov/page.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import AssistantZaminGovComponent from "@/components/dashboard/inquiryPrivacy/assistant/zaminGov";
-import WithPermission from "@/core/middlewares/withPermission";
-
-const Page = () => {
- return (
-
-
-
- );
-};
-
-export default Page;
diff --git a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/city-admin/page.js b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/city-admin/page.js
new file mode 100644
index 0000000..3fd1888
--- /dev/null
+++ b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/city-admin/page.js
@@ -0,0 +1,14 @@
+import CityAdminPage from "@/components/dashboard/inquiryPrivacy/city-admin";
+import WithPermission from "@/core/middlewares/withPermission";
+export const metadata = {
+ title: "کارتابل شهرستان",
+};
+const Page = () => {
+ return (
+
+
+
+ );
+};
+
+export default Page;
diff --git a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/city-admin/zamin-gov/page.js b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/city-admin/zamin-gov/page.js
deleted file mode 100644
index d7631c9..0000000
--- a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/city-admin/zamin-gov/page.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import CityAdminZaminGovComponent from "@/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov";
-import WithPermission from "@/core/middlewares/withPermission";
-
-const Page = () => {
- return (
-
-
-
- );
-};
-
-export default Page;
diff --git a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/general-manager/page.js b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/general-manager/page.js
new file mode 100644
index 0000000..e24a103
--- /dev/null
+++ b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/general-manager/page.js
@@ -0,0 +1,13 @@
+import WithPermission from "@/core/middlewares/withPermission";
+export const metadata = {
+ title: "کارتابل مدیر",
+};
+const Page = () => {
+ return (
+
+ کارتابل مدیر
+
+ );
+};
+
+export default Page;
diff --git a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/general-manager/zamin-gov/page.js b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/general-manager/zamin-gov/page.js
deleted file mode 100644
index 9b9d446..0000000
--- a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/general-manager/zamin-gov/page.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import GeneralManagerZaminGovComponent from "@/components/dashboard/inquiryPrivacy/generalManager/zaminGov";
-import WithPermission from "@/core/middlewares/withPermission";
-
-const Page = () => {
- return (
-
-
-
- );
-};
-
-export default Page;
diff --git a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/privacy-office/page.js b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/privacy-office/page.js
new file mode 100644
index 0000000..c0de9c5
--- /dev/null
+++ b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/privacy-office/page.js
@@ -0,0 +1,14 @@
+import PrivacyOfficePage from "@/components/dashboard/inquiryPrivacy/privacy-office";
+import WithPermission from "@/core/middlewares/withPermission";
+export const metadata = {
+ title: "کارتابل اداره حریم",
+};
+const Page = () => {
+ return (
+
+
+
+ );
+};
+
+export default Page;
diff --git a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/province-admin/zamin-gov/page.js b/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/province-admin/zamin-gov/page.js
deleted file mode 100644
index 0c51a47..0000000
--- a/src/app/(withAuth)/(dashboardLayout)/dashboard/inquiry-privacy/province-admin/zamin-gov/page.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import ProvinceAdminZaminGovComponent from "@/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov";
-import WithPermission from "@/core/middlewares/withPermission";
-
-const Page = () => {
- return (
-
-
-
- );
-};
-
-export default Page;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx
deleted file mode 100644
index ba2cdeb..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { FormControl, FormHelperText, InputLabel, OutlinedInput, Stack } from "@mui/material";
-
-const DescriptionForm = ({ errors, register }) => {
- return (
-
-
-
- توضیحات
-
-
-
- {errors.description ? errors.description.message : null}
-
-
-
- );
-};
-export default DescriptionForm;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx
deleted file mode 100644
index d755b7c..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Button } from "@mui/material";
-
-const ManagerOrAssistantSubmit = ({ isSubmitting }) => {
- return (
- <>
-
-
- >
- );
-};
-export default ManagerOrAssistantSubmit;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx
deleted file mode 100644
index d6df4b1..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Card, CardContent, CardHeader, CircularProgress, Divider, Stack, Typography } from "@mui/material";
-
-const PrevCartableOpinion = ({ message, loadingMessage, errorMessage }) => {
- return (
-
-
-
-
- {errorMessage ? (
- خطا در دریافت اطلاعات !!!
- ) : loadingMessage ? (
-
-
- درحال دریافت اطلاعات
-
- ) : (
- {message}
- )}
-
-
-
-
- );
-};
-export default PrevCartableOpinion;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx
deleted file mode 100644
index 5410d66..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Card, CardContent, FormControl, FormLabel, Stack, Typography } from "@mui/material";
-
-const QuestionSafetyForm = () => {
- return (
-
-
-
-
-
-
- آیا ایمنی راه این طرح مورد تایید است ؟
-
-
-
- دفتر حریم راه :
-
- بله
-
-
-
-
-
-
- );
-};
-export default QuestionSafetyForm;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx
deleted file mode 100644
index 75a279c..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { DialogActions, DialogContent, Stack } from "@mui/material";
-import StyledForm from "@/core/components/StyledForm";
-import useRequest from "@/lib/hooks/useRequest";
-import { useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import { object, string } from "yup";
-import { SUBMIT_ROAD_SAFETY_FORM } from "@/core/utils/routes";
-import usePrevStateOpinion from "@/lib/hooks/usePrevStateopinion";
-import QuestionSafetyForm from "./QuestionSafetyForm";
-import PrevCartableOpinion from "./PrevCartableOpinion";
-import DescriptionForm from "./DescriptionForm";
-import ManagerOrAssistantSubmit from "./ManagerOrAssistantSubmit";
-import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail";
-const fakeData = {
- id: 1,
- shomareh_darkhast: "2124",
- ostan: "ostan",
- shahr: "shahr",
- shahrestan: "shahrestan",
- bakhsh: "bakhsh",
- roosta: "roosta",
- tarikh_darkhast: "tarikh_darkhast",
- sazman: "sazman",
- masahat_zamin: "masahat_zamin",
- masahat_tarh: "masahat_tarh",
- gorooh_tarh: "gorooh_tarh",
- onvane_tarh: "onvane_tarh",
- address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر",
- file_mosavab: "file",
- polygon: [
- [51.515, -0.09],
- [51.52, -0.1],
- [51.52, -0.12],
- ],
-};
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
-});
-const RoadSafetyFormContext = ({ rowId, mutate, setOpenRoadSafetyForm }) => {
- const defaultValues = {
- description: "",
- };
- const requestServer = useRequest({ notificationSuccess: true });
- const { message, loadingMessage, errorMessage } = usePrevStateOpinion();
- const {
- register,
- handleSubmit,
- formState: { isSubmitting, errors },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- requestServer(`${SUBMIT_ROAD_SAFETY_FORM}/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- setOpenRoadSafetyForm(false);
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-export default RoadSafetyFormContext;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/index.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/index.jsx
deleted file mode 100644
index a4de0d7..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/index.jsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Dialog, IconButton, Stack, Tooltip } from "@mui/material";
-import EngineeringIcon from "@mui/icons-material/Engineering";
-import DialogTransition from "@/core/components/DialogTransition";
-import { useState } from "react";
-import { Close } from "@mui/icons-material";
-import RoadSafetyFormContext from "./RoadSafetyFormContext";
-
-const RoadSafetyForm = ({ rowId, mutate }) => {
- const [openRoadSafetyForm, setOpenRoadSafetyForm] = useState(false);
- return (
-
-
- {
- setOpenRoadSafetyForm(true);
- }}
- >
-
-
-
-
-
- );
-};
-export default RoadSafetyForm;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/TaskDetail/DetailDialog.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/TaskDetail/DetailDialog.jsx
deleted file mode 100644
index 777eecf..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/TaskDetail/DetailDialog.jsx
+++ /dev/null
@@ -1,75 +0,0 @@
-"use client";
-
-import { Dialog, DialogContent } from "@mui/material";
-import { object, string } from "yup";
-import useRequest from "@/lib/hooks/useRequest";
-import { useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import StyledForm from "@/core/components/StyledForm";
-import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail";
-
-const fakeData = {
- id: 1,
- shomareh_darkhast: "2124",
- ostan: "ostan",
- shahr: "shahr",
- shahrestan: "shahrestan",
- bakhsh: "bakhsh",
- roosta: "roosta",
- tarikh_darkhast: "tarikh_darkhast",
- sazman: "sazman",
- masahat_zamin: "masahat_zamin",
- masahat_tarh: "masahat_tarh",
- gorooh_tarh: "gorooh_tarh",
- onvane_tarh: "onvane_tarh",
- address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر",
- file_mosavab: "file",
- polygon: [
- [51.515, -0.09],
- [51.52, -0.1],
- [51.52, -0.12],
- ],
-};
-
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
-});
-
-const DetailDialog = ({ taskModal, setTaskModal, rowId, mutate }) => {
- const requestServer = useRequest({ auth: true });
- const defaultValues = {
- description: "",
- };
- const handleClose = () => {
- setTaskModal(false);
- };
-
- const {
- register,
- handleSubmit,
- formState: { isSubmitting, errors, touchedFields },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
-
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- requestServer(`api-for-send-to-harim/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- handleClose();
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
- );
-};
-export default DetailDialog;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/TaskDetail/index.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/TaskDetail/index.jsx
deleted file mode 100644
index 1641840..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/TaskDetail/index.jsx
+++ /dev/null
@@ -1,26 +0,0 @@
-"use client";
-
-import { IconButton, Tooltip } from "@mui/material";
-import AssignmentIcon from "@mui/icons-material/Assignment";
-import DetailDialog from "./DetailDialog";
-import { useState } from "react";
-
-const TaskDetail = ({ rowId, mutate }) => {
- const [taskModal, setTaskModal] = useState(false);
-
- const openDetailDialog = () => {
- setTaskModal(true);
- };
-
- return (
- <>
-
-
-
-
-
-
- >
- );
-};
-export default TaskDetail;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/index.jsx
deleted file mode 100644
index ae4213c..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/index.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import TaskDetail from "./TaskDetail";
-import { Box } from "@mui/material";
-import RoadSafetyForm from "./RoadSafetyForm";
-
-const RowActions = ({ row, mutate }) => {
- return (
-
-
-
-
- );
-};
-export default RowActions;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/TaskList.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/TaskList.jsx
deleted file mode 100644
index 31452f6..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/TaskList.jsx
+++ /dev/null
@@ -1,145 +0,0 @@
-"use client";
-
-import { useMemo } from "react";
-import { Box } from "@mui/material";
-import DataTableWithAuth from "@/core/components/DataTableWithAuth";
-import RowActions from "./RowActions";
-
-const TaskList = () => {
- const columns = useMemo(
- () => [
- {
- accessorKey: "id",
- header: "کد یکتا",
- id: "id",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "notEquals",
- },
- {
- accessorKey: "aplication_number",
- header: "شماره درخواست",
- id: "aplication_number",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "notEquals",
- },
- {
- accessorKey: "application_date",
- header: "تاریخ درخواست",
- id: "application_date",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "province",
- header: "استان",
- id: "province",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "township",
- header: "شهرستان",
- id: "township",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "city",
- header: "شهر",
- id: "city",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "county",
- header: "بخش",
- id: "county",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "village",
- header: "روستا",
- id: "village",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "land_area",
- header: "مساحت زمین",
- id: "land_area",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_area",
- header: "مساحت طرح",
- id: "design_area",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "organization",
- header: "سازمان",
- id: "organization",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_group",
- header: "گروه طرح",
- id: "design_group",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_title",
- header: "عنوان طرح",
- id: "design_title",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "state",
- header: "وضعیت درخواست",
- id: "state",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- ],
- []
- );
-
- return (
- <>
-
-
-
- >
- );
-};
-export default TaskList;
diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/index.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/index.jsx
deleted file mode 100644
index a6a53cf..0000000
--- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/index.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-"use client";
-
-import PageTitle from "@/core/components/PageTitle";
-import { Stack } from "@mui/material";
-import TaskList from "./TaskList";
-
-const AssistantZaminGovComponent = () => {
- return (
-
-
-
-
- );
-};
-export default AssistantZaminGovComponent;
diff --git a/src/components/dashboard/inquiryPrivacy/city-admin/CityAdminList.jsx b/src/components/dashboard/inquiryPrivacy/city-admin/CityAdminList.jsx
new file mode 100644
index 0000000..b732d9b
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/city-admin/CityAdminList.jsx
@@ -0,0 +1,243 @@
+import CustomSelectByDependency from "@/core/components/DataTable/filter/fieldsType/CustomSelectByDependency";
+import DataTableWithAuth from "@/core/components/DataTableWithAuth";
+import { GET_CITY_ADMIN_LIST } from "@/core/utils/routes";
+import useInquiryPrivacyState from "@/lib/hooks/useInquiryPrivacyState";
+import { Box, Stack } from "@mui/material";
+import moment from "jalali-moment";
+import { useMemo } from "react";
+import MapsHomeWorkIcon from "@mui/icons-material/MapsHomeWork";
+import SecurityIcon from "@mui/icons-material/Security";
+import ManageAccountsIcon from "@mui/icons-material/ManageAccounts";
+import PsychologyAltIcon from "@mui/icons-material/PsychologyAlt";
+import ReceiptLongIcon from "@mui/icons-material/ReceiptLong";
+import WindowIcon from "@mui/icons-material/Window";
+import DangerousIcon from "@mui/icons-material/Dangerous";
+import AutorenewIcon from "@mui/icons-material/Autorenew";
+import RowActions from "./RowActions";
+import ShowPrimaryArea from "./ShowPrimaryArea";
+
+const CityAdminList = () => {
+ const stateIcon = (state_id) => {
+ if (state_id === 1) return ;
+ if (state_id === 2 || state_id === 5 || state_id === 13) return ;
+ if (state_id === 3 || state_id === 6 || state_id === 14)
+ return ;
+ if (state_id === 4 || state_id === 7 || state_id === 15) return ;
+ if (state_id === 8) return ;
+ if (state_id === 9 || state_id === 11) return ;
+ if (state_id === 10) return ;
+ if (state_id === 12) return ;
+ };
+ const columns = useMemo(() => {
+ return [
+ {
+ accessorKey: "panjare_vahed_id",
+ header: "کدرهگیری درخواست",
+ id: "panjare_vahed_id",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.panjare_vahed_id}>,
+ },
+ {
+ accessorKey: "national_id",
+ header: "کد ملی",
+ id: "national_id",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.national_id}>,
+ },
+ {
+ accessorKey: "state_id",
+ header: "وضعیت",
+ id: "state_id",
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterMode: "equals",
+ sortDescFirst: false,
+ grow: false,
+ size: 100,
+ ColumnSelectComponent: (props) => {
+ const { itemsList, loadingItemsList, errorItemsList } = useInquiryPrivacyState();
+
+ const getColumnSelectOptions = useMemo(() => {
+ if (loadingItemsList) {
+ return [{ value: "loading", label: "در حال بارگذاری..." }];
+ }
+ if (errorItemsList) {
+ return [{ value: "error", label: "خطا در بارگذاری" }];
+ }
+ return [
+ { value: "", label: "همه موارد" },
+ ...itemsList.map((item) => ({
+ value: item.id,
+ label: item.name,
+ })),
+ ];
+ }, [itemsList, loadingItemsList, errorItemsList]);
+
+ return (
+
+ );
+ },
+ Cell: ({ row }) => (
+
+ {stateIcon(row.original.state_id)}
+
+ {row.original.state_name}
+
+
+ ),
+ },
+ {
+ accessorKey: "plan_title",
+ header: "عنوان طرح",
+ id: "plan_title",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.plan_title}>,
+ },
+ {
+ accessorKey: "plan_group",
+ header: "گروه طرح",
+ id: "plan_group",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.plan_group}>,
+ },
+ {
+ accessorKey: "requested_organization",
+ header: "دستگاه صادر کننده",
+ id: "requested_organization",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.requested_organization}>,
+ },
+ {
+ accessorKey: "worksheet_id",
+ header: "شناسه کاربرگ",
+ id: "worksheet_id",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.worksheet_id}>,
+ },
+ {
+ accessorKey: "primary_area",
+ header: "نمایش محدوده طرح",
+ id: "primary_area",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) =>
+ row.original.primary_area ? (
+
+
+
+ ) : (
+ "-"
+ ),
+ },
+ {
+ accessorKey: "province_id",
+ header: "استان",
+ id: "province_id",
+ enableColumnFilter: false,
+ datatype: "numeric",
+ sortDescFirst: false,
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.province_name}>,
+ },
+ {
+ accessorKey: "city_id",
+ header: "شهر",
+ id: "city_id",
+ enableColumnFilter: false,
+ datatype: "numeric",
+ sortDescFirst: false,
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.city_name}>,
+ },
+ {
+ accessorKey: "isic",
+ header: "کد آیسیک",
+ id: "isic",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.isic}>,
+ },
+ {
+ accessorFn: (row) => moment(row.request_date).locale("fa").format("YYYY/MM/DD"),
+ header: "تاریخ درخواست",
+ id: "request_date",
+ enableColumnFilter: true,
+ datatype: "date",
+ filterMode: "between",
+ grow: false,
+ size: 100,
+ },
+ ];
+ }, []);
+
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+export default CityAdminList;
diff --git a/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/MapDrawPolygon/DrawBound.jsx b/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/MapDrawPolygon/DrawBound.jsx
new file mode 100644
index 0000000..02b567f
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/MapDrawPolygon/DrawBound.jsx
@@ -0,0 +1,149 @@
+import React, { useCallback, useEffect, useRef, useState } from "react";
+import L from "leaflet";
+import { FeatureGroup, useMap } from "react-leaflet";
+import "leaflet-draw";
+import { calculatePolygonMetrics } from "@/core/utils/geoCalculations";
+
+const DrawPolygon = ({ control, controlDispach, drawBound, setDrawBound }) => {
+ const map = useMap();
+ const featureRef = useRef(null);
+ const drawControlRef = useRef(null);
+
+ const [area, setArea] = useState(0);
+ const [sideLengths, setSideLengths] = useState([]);
+
+ const calculatePolygonMetricsForLayer = useCallback(
+ (layer) => {
+ if (!layer) return;
+
+ const latlngs = layer.getLatLngs()[0];
+ if (!latlngs || latlngs.length < 3) return;
+
+ const coordinates = latlngs.map((p) => [p.lat, p.lng]);
+
+ const metrics = calculatePolygonMetrics(coordinates, true);
+
+ setArea(metrics.area);
+ setSideLengths(metrics.sides);
+
+ setDrawBound({
+ layer,
+ metrics,
+ });
+ },
+ [setDrawBound]
+ );
+
+ const safeFitBounds = (layer) => {
+ if (!layer || !map) return;
+ try {
+ const latLngs = layer.getLatLngs();
+ map.fitBounds(latLngs, {
+ paddingTopLeft: [20, 35],
+ paddingBottomRight: [20, 55],
+ });
+ } catch (e) {
+ console.warn("fitBounds failed:", e);
+ }
+ };
+
+ const bindEditEvent = useCallback(
+ (layer) => {
+ if (!layer) return;
+ layer.on("edit", function (e) {
+ const editedLayer = e.target;
+ calculatePolygonMetricsForLayer(editedLayer);
+ });
+ },
+ [calculatePolygonMetricsForLayer]
+ );
+
+ const handlerCreatedBound = useCallback(
+ (event) => {
+ const { layer } = event;
+ layer.editing.enable();
+ featureRef.current.addLayer(layer);
+
+ calculatePolygonMetricsForLayer(layer);
+ bindEditEvent(layer);
+
+ controlDispach({ type: "SET_STATUS", status: 2 });
+ },
+ [calculatePolygonMetricsForLayer, bindEditEvent, controlDispach]
+ );
+
+ useEffect(() => {
+ if (
+ control.status === 1 &&
+ drawControlRef.current &&
+ drawControlRef.current._toolbars?.draw?._modes?.polygon?.handler
+ ) {
+ drawControlRef.current._toolbars.draw._modes.polygon.handler.enable();
+ }
+ }, [control.status]);
+
+ useEffect(() => {
+ if (control.status === 0 && featureRef.current) {
+ featureRef.current.clearLayers();
+ setArea(0);
+ setSideLengths([]);
+ setDrawBound(null);
+ }
+ }, [control.status, setDrawBound]);
+
+ useEffect(() => {
+ if (control.status === 2 && drawBound && featureRef.current) {
+ const { layer, metrics } = drawBound;
+ featureRef.current.addLayer(layer);
+ layer.editing.enable();
+ safeFitBounds(layer);
+ bindEditEvent(layer);
+
+ setArea(metrics?.area || 0);
+ setSideLengths(metrics?.sides || []);
+ }
+ }, [control.status, drawBound, bindEditEvent]);
+
+ useEffect(() => {
+ if (!featureRef.current) return;
+
+ L.drawLocal.draw.handlers.polygon.tooltip.start = "برای شروع ترسیم محدوده، روی نقشه کلیک کنید";
+ L.drawLocal.draw.handlers.polygon.tooltip.cont = "برای ادامه ترسیم، نقاط بعدی را کلیک کنید";
+ L.drawLocal.draw.handlers.polygon.tooltip.end = "برای بستن محدوده، روی نقطهی شروع کلیک کنید";
+
+ const drawControl = new L.Control.Draw({
+ draw: {
+ polygon: {
+ shapeOptions: {
+ color: "red",
+ weight: 3,
+ clickable: true,
+ },
+ },
+ polyline: false,
+ rectangle: false,
+ circle: false,
+ marker: false,
+ circlemarker: false,
+ },
+ edit: {
+ featureGroup: featureRef.current,
+ edit: true,
+ remove: true,
+ },
+ });
+
+ drawControlRef.current = drawControl;
+ map.addControl(drawControl);
+ map.on(L.Draw.Event.CREATED, handlerCreatedBound);
+
+ return () => {
+ map.off(L.Draw.Event.CREATED, handlerCreatedBound);
+ map.removeControl(drawControl);
+ };
+ }, [map, handlerCreatedBound]);
+
+ return ;
+};
+
+export default DrawPolygon;
diff --git a/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/MapDrawPolygon/index.jsx b/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/MapDrawPolygon/index.jsx
new file mode 100644
index 0000000..ab4c1f4
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/MapDrawPolygon/index.jsx
@@ -0,0 +1,121 @@
+import { Delete, Route } from "@mui/icons-material";
+import { Box, Button, Stack, Typography } from "@mui/material";
+import { useReducer } from "react";
+import DrawPolygon from "./DrawBound";
+
+const statusType = [
+ {
+ id: 0,
+ message: "برای آغاز ترسیم محدوده، کلیک کنید!",
+ buttons: [
+ {
+ label: "شروع ترسیم محدوده",
+ key: "start",
+ color: "warning",
+ icon: ,
+ onclick: (controlDispach) => {
+ controlDispach({ type: "SET_STATUS", status: 1 });
+ },
+ },
+ ],
+ },
+ {
+ id: 1,
+ message: "محدودهی موردنظر را با کلیک روی نقشه مشخص کنید. برای اتمام، روی نقطهی ابتدایی کلیک کنید!",
+ buttons: [],
+ },
+ {
+ id: 2,
+ message: "برای اصلاح محدوده، گوشهها را بکشید. برای ترسیم دوباره، آن را حذف کنید",
+ buttons: [
+ {
+ label: "حذف",
+ key: "end",
+ color: "error",
+ icon: ,
+ onclick: (controlDispach) => {
+ controlDispach({ type: "SET_STATUS", status: 0 });
+ },
+ },
+ ],
+ },
+];
+
+const createInitialState = (drawBound) => {
+ if (drawBound) {
+ return { status: 2 };
+ }
+ return { status: 0 };
+};
+
+const reducer = (state, action) => {
+ switch (action.type) {
+ case "SET_STATUS":
+ return { ...state, status: action.status };
+ default:
+ return state;
+ }
+};
+
+const MapDrawPolygon = ({ drawBound, setDrawBound }) => {
+ const [control, controlDispach] = useReducer(reducer, drawBound, createInitialState);
+
+ return (
+ <>
+
+
+ theme.palette.secondary.main,
+ borderBottomLeftRadius: 8,
+ borderBottomRightRadius: 8,
+ py: 0.5,
+ px: 2,
+ }}
+ >
+
+ {statusType.find((st) => st.id == control.status).message}
+
+
+
+
+
+ {statusType
+ .find((st) => st.id == control.status)
+ .buttons.map((button) => (
+
+ ))}
+
+
+ >
+ );
+};
+export default MapDrawPolygon;
diff --git a/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/index.jsx b/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/index.jsx
new file mode 100644
index 0000000..0f64405
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/FeedbackAction/index.jsx
@@ -0,0 +1,156 @@
+import MapLayer from "@/core/components/MapLayer";
+import { CITY_ADMIN_FEEDBACK } from "@/core/utils/routes";
+import useRequest from "@/lib/hooks/useRequest";
+import { yupResolver } from "@hookform/resolvers/yup";
+import CloseIcon from "@mui/icons-material/Close";
+import ForumIcon from "@mui/icons-material/Forum";
+import {
+ Box,
+ Button,
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogTitle,
+ IconButton,
+ TextField,
+ Tooltip,
+ Typography,
+} from "@mui/material";
+import { useMemo, useState } from "react";
+import { useForm } from "react-hook-form";
+import { object, string } from "yup";
+import ShowBound from "../../ShowPrimaryArea/ShowBound";
+import MapDrawPolygon from "./MapDrawPolygon";
+
+const validationSchema = object({
+ expert_description: string().required("توضیحات ناظر اجباری است!"),
+});
+
+const FeedbackAction = ({ rowId, mutate, rowPrimaryArea }) => {
+ const requestServer = useRequest({ notificationSuccess: true });
+ const [openFeedbackDialog, setOpenFeedbackDialog] = useState(false);
+ const [drawBound, setDrawBound] = useState(null);
+ const bound = useMemo(() => {
+ const latLngCoords = rowPrimaryArea.coordinates.map((coord) => [coord[1], coord[0]]);
+ return rowPrimaryArea.type === "polygon" ? L.polygon(latLngCoords) : L.polyline(latLngCoords);
+ }, [rowPrimaryArea]);
+
+ const {
+ register,
+ handleSubmit,
+ formState: { isSubmitting, errors },
+ } = useForm({
+ defaultValues: { expert_description: "", forbidden_area: "", forbidden_area_space: "" },
+ resolver: yupResolver(validationSchema),
+ mode: "all",
+ });
+
+ const onSubmit = async (data) => {
+ try {
+ const payload = {
+ expert_description: data.expert_description,
+ };
+
+ if (drawBound && drawBound.metrics) {
+ const { metrics } = drawBound;
+ payload.forbidden_area = {
+ type: "polygon",
+ coordinates: metrics.coordinates,
+ };
+ payload.forbidden_area_space = metrics.area.toFixed(2);
+ }
+ await requestServer(`${CITY_ADMIN_FEEDBACK}/${rowId}`, "post", {
+ data: payload,
+ });
+
+ mutate();
+ setOpenFeedbackDialog(false);
+ } catch (error) {
+ console.error("❌ Error submitting feedback:", error);
+ }
+ };
+
+ return (
+ <>
+
+
+ setOpenFeedbackDialog(true)}>
+
+
+
+
+
+ >
+ );
+};
+
+export default FeedbackAction;
diff --git a/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/index.jsx
new file mode 100644
index 0000000..cb1517b
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/city-admin/RowActions/index.jsx
@@ -0,0 +1,15 @@
+import { Box } from "@mui/material";
+import FeedbackAction from "./FeedbackAction";
+
+const RowActions = ({ row, mutate }) => {
+ return (
+
+ {row.original.state_id === 1 ? (
+
+ ) : (
+ "-"
+ )}
+
+ );
+};
+export default RowActions;
diff --git a/src/components/dashboard/inquiryPrivacy/city-admin/ShowPrimaryArea/ShowBound.jsx b/src/components/dashboard/inquiryPrivacy/city-admin/ShowPrimaryArea/ShowBound.jsx
new file mode 100644
index 0000000..24db476
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/city-admin/ShowPrimaryArea/ShowBound.jsx
@@ -0,0 +1,29 @@
+import { useEffect, useRef } from "react";
+import { FeatureGroup, useMap } from "react-leaflet";
+
+const ShowBound = ({ bound }) => {
+ const map = useMap();
+ const featureRef = useRef(null);
+
+ const safeFitBounds = (layer) => {
+ if (!layer || !map) return;
+ try {
+ const latLngs = layer.getLatLngs();
+ map.fitBounds(latLngs, {
+ paddingTopLeft: [20, 20],
+ paddingBottomRight: [20, 20],
+ });
+ } catch (e) {
+ console.warn("fitBounds failed:", e);
+ }
+ };
+
+ useEffect(() => {
+ bound?.editing?.disable();
+ featureRef.current.addLayer(bound);
+ safeFitBounds(bound);
+ }, []);
+
+ return ;
+};
+export default ShowBound;
diff --git a/src/components/dashboard/inquiryPrivacy/city-admin/ShowPrimaryArea/index.jsx b/src/components/dashboard/inquiryPrivacy/city-admin/ShowPrimaryArea/index.jsx
new file mode 100644
index 0000000..98e24d0
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/city-admin/ShowPrimaryArea/index.jsx
@@ -0,0 +1,69 @@
+const {
+ Button,
+ IconButton,
+ Tooltip,
+ Box,
+ Dialog,
+ DialogTitle,
+ Typography,
+ DialogContent,
+ DialogActions,
+} = require("@mui/material");
+import LayersIcon from "@mui/icons-material/Layers";
+import CloseIcon from "@mui/icons-material/Close";
+import { useMemo, useState } from "react";
+import MapLayer from "@/core/components/MapLayer";
+import ShowBound from "./ShowBound";
+
+const ShowPrimaryArea = ({ primaryArea }) => {
+ const [openShowAreaDialog, setOpenShowAreaDialog] = useState(false);
+ const bound = useMemo(() => {
+ const latLngCoords = primaryArea.coordinates.map((coord) => [coord[1], coord[0]]);
+ return primaryArea.type === "polygon" ? L.polygon(latLngCoords) : L.polyline(latLngCoords);
+ }, [primaryArea]);
+
+ return (
+
+
+ setOpenShowAreaDialog(true)}>
+
+
+
+
+
+ );
+};
+
+export default ShowPrimaryArea;
diff --git a/src/components/dashboard/inquiryPrivacy/city-admin/index.jsx b/src/components/dashboard/inquiryPrivacy/city-admin/index.jsx
new file mode 100644
index 0000000..b8d7433
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/city-admin/index.jsx
@@ -0,0 +1,14 @@
+"use client";
+import PageTitle from "@/core/components/PageTitle";
+import { Stack } from "@mui/material";
+import CityAdminList from "./CityAdminList";
+
+const CityAdminPage = () => {
+ return (
+
+
+
+
+ );
+};
+export default CityAdminPage;
diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx
deleted file mode 100644
index 604e141..0000000
--- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx
+++ /dev/null
@@ -1,138 +0,0 @@
-import {
- Autocomplete,
- Button,
- CircularProgress,
- DialogActions,
- DialogContent,
- FormControl,
- FormHelperText,
- InputLabel,
- OutlinedInput,
- Stack,
- TextField,
- Typography,
-} from "@mui/material";
-import { Controller, useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import { object, string } from "yup";
-import StyledForm from "@/core/components/StyledForm";
-import useCities from "@/lib/hooks/useCities";
-import useRequest from "@/lib/hooks/useRequest";
-import { REFER_ADMIN_CITY } from "@/core/utils/routes";
-
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
- city: string().required("وارد کردن شهرستان الزامیست!"),
-});
-
-const ReferFormContext = ({ setOpenReferDialog, rowId, mutate }) => {
- const defaultValues = {
- description: "",
- city: "",
- };
- const { cities, loadingCities, errorCities } = useCities();
- const requestServer = useRequest({ notificationSuccess: true });
- const {
- control,
- register,
- handleSubmit,
- formState: { isSubmitting, errors, touchedFields },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
-
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- formData.append("cityId", data.city);
- requestServer(`${REFER_ADMIN_CITY}/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- setOpenReferDialog(false);
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
-
-
-
- توضیحات
-
-
-
- {errors.description ? errors.description.message : null}
-
-
-
-
- (
-
-
- {errorCities ? (
- خطایی در دریافت شهرستان ها رخ داده است!
- ) : loadingCities ? (
-
-
- درحال دریافت لیست شهرستان ها
-
- ) : (
- city.id === value) || null}
- disablePortal
- options={cities}
- getOptionLabel={(city) => city.name}
- isOptionEqualToValue={(option, value) => option.id === value.id}
- onChange={(event, newValue) => {
- onChange(newValue ? newValue.id : "");
- }}
- renderInput={(params) => (
-
- )}
- />
- )}
-
- {errors.city ? errors.city.message : null}
-
-
- )}
- />
-
-
-
-
-
-
-
-
- );
-};
-export default ReferFormContext;
diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/index.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/index.jsx
deleted file mode 100644
index a8ebdc2..0000000
--- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/index.jsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { Dialog, DialogTitle, IconButton, Stack, Tooltip } from "@mui/material";
-import ReplyIcon from "@mui/icons-material/Reply";
-import DialogTransition from "@/core/components/DialogTransition";
-import ReferFormContext from "./ReferFormContext";
-import { useState } from "react";
-
-const ReferForm = ({ rowId, mutate }) => {
- const [openReferDialog, setOpenReferDialog] = useState(false);
- return (
-
-
- {
- setOpenReferDialog(true);
- }}
- >
-
-
-
-
-
- );
-};
-export default ReferForm;
diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx
deleted file mode 100644
index 3c25592..0000000
--- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx
+++ /dev/null
@@ -1,109 +0,0 @@
-"use client";
-
-import {
- Button,
- Dialog,
- DialogActions,
- DialogContent,
- FormControl,
- FormHelperText,
- InputLabel,
- OutlinedInput,
-} from "@mui/material";
-import { object, string } from "yup";
-import useRequest from "@/lib/hooks/useRequest";
-import { useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import StyledForm from "@/core/components/StyledForm";
-import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail";
-
-const fakeData = {
- id: 1,
- shomareh_darkhast: "2124",
- ostan: "ostan",
- shahr: "shahr",
- shahrestan: "shahrestan",
- bakhsh: "bakhsh",
- roosta: "roosta",
- tarikh_darkhast: "tarikh_darkhast",
- sazman: "sazman",
- masahat_zamin: "masahat_zamin",
- masahat_tarh: "masahat_tarh",
- gorooh_tarh: "gorooh_tarh",
- onvane_tarh: "onvane_tarh",
- address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر",
- file_mosavab: "file",
- polygon: [
- [51.515, -0.09],
- [51.52, -0.1],
- [51.52, -0.12],
- ],
-};
-
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
-});
-
-const DetailDialog = ({ taskModal, setTaskModal, rowId, mutate }) => {
- const requestServer = useRequest({ auth: true });
- const defaultValues = {
- description: "",
- };
- const handleClose = () => {
- setTaskModal(false);
- };
-
- const {
- register,
- handleSubmit,
- formState: { isSubmitting, errors, touchedFields },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
-
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- requestServer(`api-for-send-to-harim/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- handleClose();
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
- );
-};
-export default DetailDialog;
diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/index.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/index.jsx
deleted file mode 100644
index 1641840..0000000
--- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/index.jsx
+++ /dev/null
@@ -1,26 +0,0 @@
-"use client";
-
-import { IconButton, Tooltip } from "@mui/material";
-import AssignmentIcon from "@mui/icons-material/Assignment";
-import DetailDialog from "./DetailDialog";
-import { useState } from "react";
-
-const TaskDetail = ({ rowId, mutate }) => {
- const [taskModal, setTaskModal] = useState(false);
-
- const openDetailDialog = () => {
- setTaskModal(true);
- };
-
- return (
- <>
-
-
-
-
-
-
- >
- );
-};
-export default TaskDetail;
diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/index.jsx
deleted file mode 100644
index 2ed70e0..0000000
--- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/index.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-"use client";
-
-import ReferForm from "./Refer";
-import TaskDetail from "./TaskDetail";
-import { Box } from "@mui/material";
-
-const RowActions = ({ row, mutate }) => {
- return (
-
-
-
-
- );
-};
-export default RowActions;
diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/TaskList.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/TaskList.jsx
deleted file mode 100644
index 14a0e35..0000000
--- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/TaskList.jsx
+++ /dev/null
@@ -1,145 +0,0 @@
-"use client";
-
-import { useMemo } from "react";
-import { Box } from "@mui/material";
-import DataTableWithAuth from "@/core/components/DataTableWithAuth";
-import RowActions from "./RowActions";
-
-const TaskList = () => {
- const columns = useMemo(
- () => [
- {
- accessorKey: "id",
- header: "کد یکتا",
- id: "id",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "notEquals",
- },
- {
- accessorKey: "aplication_number",
- header: "شماره درخواست",
- id: "aplication_number",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "notEquals",
- },
- {
- accessorKey: "application_date",
- header: "تاریخ درخواست",
- id: "application_date",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "province",
- header: "استان",
- id: "province",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "township",
- header: "شهرستان",
- id: "township",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "city",
- header: "شهر",
- id: "city",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "county",
- header: "بخش",
- id: "county",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "village",
- header: "روستا",
- id: "village",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "land_area",
- header: "مساحت زمین",
- id: "land_area",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_area",
- header: "مساحت طرح",
- id: "design_area",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "organization",
- header: "سازمان",
- id: "organization",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_group",
- header: "گروه طرح",
- id: "design_group",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_title",
- header: "عنوان طرح",
- id: "design_title",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "state",
- header: "وضعیت درخواست",
- id: "state",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- ],
- []
- );
-
- return (
- <>
-
-
-
- >
- );
-};
-export default TaskList;
diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/index.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/index.jsx
deleted file mode 100644
index 4af891c..0000000
--- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/index.jsx
+++ /dev/null
@@ -1,14 +0,0 @@
-"use client";
-import PageTitle from "@/core/components/PageTitle";
-import { Stack } from "@mui/material";
-import TaskList from "./TaskList";
-
-const CityAdminZaminGovComponent = () => {
- return (
-
-
-
-
- );
-};
-export default CityAdminZaminGovComponent;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx
deleted file mode 100644
index ba2cdeb..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { FormControl, FormHelperText, InputLabel, OutlinedInput, Stack } from "@mui/material";
-
-const DescriptionForm = ({ errors, register }) => {
- return (
-
-
-
- توضیحات
-
-
-
- {errors.description ? errors.description.message : null}
-
-
-
- );
-};
-export default DescriptionForm;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx
deleted file mode 100644
index d755b7c..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Button } from "@mui/material";
-
-const ManagerOrAssistantSubmit = ({ isSubmitting }) => {
- return (
- <>
-
-
- >
- );
-};
-export default ManagerOrAssistantSubmit;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx
deleted file mode 100644
index 365c1b4..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Card, CardContent, CardHeader, CircularProgress, Divider, Stack, Typography } from "@mui/material";
-import usePrevStateOpinion from "@/lib/hooks/usePrevStateopinion";
-
-const PrevCartableOpinion = ({ message, loadingMessage, errorMessage }) => {
- return (
-
-
-
-
- {errorMessage ? (
- خطا در دریافت اطلاعات !!!
- ) : loadingMessage ? (
-
-
- درحال دریافت اطلاعات
-
- ) : (
- {message}
- )}
-
-
-
-
- );
-};
-export default PrevCartableOpinion;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx
deleted file mode 100644
index 5410d66..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Card, CardContent, FormControl, FormLabel, Stack, Typography } from "@mui/material";
-
-const QuestionSafetyForm = () => {
- return (
-
-
-
-
-
-
- آیا ایمنی راه این طرح مورد تایید است ؟
-
-
-
- دفتر حریم راه :
-
- بله
-
-
-
-
-
-
- );
-};
-export default QuestionSafetyForm;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx
deleted file mode 100644
index 68ffecf..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { DialogActions, DialogContent, Stack } from "@mui/material";
-import StyledForm from "@/core/components/StyledForm";
-import useRequest from "@/lib/hooks/useRequest";
-import { useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import { object, string } from "yup";
-import { SUBMIT_ROAD_SAFETY_FORM } from "@/core/utils/routes";
-import QuestionSafetyForm from "./QuestionSafetyForm";
-import PrevCartableOpinion from "./PrevCartableOpinion";
-import DescriptionForm from "./DescriptionForm";
-import ManagerOrAssistantSubmit from "./ManagerOrAssistantSubmit";
-import usePrevStateOpinion from "@/lib/hooks/usePrevStateopinion";
-import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail";
-const fakeData = {
- id: 1,
- shomareh_darkhast: "2124",
- ostan: "ostan",
- shahr: "shahr",
- shahrestan: "shahrestan",
- bakhsh: "bakhsh",
- roosta: "roosta",
- tarikh_darkhast: "tarikh_darkhast",
- sazman: "sazman",
- masahat_zamin: "masahat_zamin",
- masahat_tarh: "masahat_tarh",
- gorooh_tarh: "gorooh_tarh",
- onvane_tarh: "onvane_tarh",
- address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر",
- file_mosavab: "file",
- polygon: [
- [51.515, -0.09],
- [51.52, -0.1],
- [51.52, -0.12],
- ],
-};
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
-});
-const RoadSafetyFormContext = ({ rowId, mutate, setOpenRoadSafetyForm }) => {
- const defaultValues = {
- description: "",
- };
- const requestServer = useRequest({ notificationSuccess: true });
- const { message, loadingMessage, errorMessage } = usePrevStateOpinion();
- const {
- register,
- handleSubmit,
- formState: { isSubmitting, errors },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- requestServer(`${SUBMIT_ROAD_SAFETY_FORM}/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- setOpenRoadSafetyForm(false);
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-export default RoadSafetyFormContext;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/index.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/index.jsx
deleted file mode 100644
index a4de0d7..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/index.jsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Dialog, IconButton, Stack, Tooltip } from "@mui/material";
-import EngineeringIcon from "@mui/icons-material/Engineering";
-import DialogTransition from "@/core/components/DialogTransition";
-import { useState } from "react";
-import { Close } from "@mui/icons-material";
-import RoadSafetyFormContext from "./RoadSafetyFormContext";
-
-const RoadSafetyForm = ({ rowId, mutate }) => {
- const [openRoadSafetyForm, setOpenRoadSafetyForm] = useState(false);
- return (
-
-
- {
- setOpenRoadSafetyForm(true);
- }}
- >
-
-
-
-
-
- );
-};
-export default RoadSafetyForm;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/TaskDetail/DetailDialog.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/TaskDetail/DetailDialog.jsx
deleted file mode 100644
index 777eecf..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/TaskDetail/DetailDialog.jsx
+++ /dev/null
@@ -1,75 +0,0 @@
-"use client";
-
-import { Dialog, DialogContent } from "@mui/material";
-import { object, string } from "yup";
-import useRequest from "@/lib/hooks/useRequest";
-import { useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import StyledForm from "@/core/components/StyledForm";
-import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail";
-
-const fakeData = {
- id: 1,
- shomareh_darkhast: "2124",
- ostan: "ostan",
- shahr: "shahr",
- shahrestan: "shahrestan",
- bakhsh: "bakhsh",
- roosta: "roosta",
- tarikh_darkhast: "tarikh_darkhast",
- sazman: "sazman",
- masahat_zamin: "masahat_zamin",
- masahat_tarh: "masahat_tarh",
- gorooh_tarh: "gorooh_tarh",
- onvane_tarh: "onvane_tarh",
- address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر",
- file_mosavab: "file",
- polygon: [
- [51.515, -0.09],
- [51.52, -0.1],
- [51.52, -0.12],
- ],
-};
-
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
-});
-
-const DetailDialog = ({ taskModal, setTaskModal, rowId, mutate }) => {
- const requestServer = useRequest({ auth: true });
- const defaultValues = {
- description: "",
- };
- const handleClose = () => {
- setTaskModal(false);
- };
-
- const {
- register,
- handleSubmit,
- formState: { isSubmitting, errors, touchedFields },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
-
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- requestServer(`api-for-send-to-harim/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- handleClose();
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
- );
-};
-export default DetailDialog;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/TaskDetail/index.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/TaskDetail/index.jsx
deleted file mode 100644
index 1641840..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/TaskDetail/index.jsx
+++ /dev/null
@@ -1,26 +0,0 @@
-"use client";
-
-import { IconButton, Tooltip } from "@mui/material";
-import AssignmentIcon from "@mui/icons-material/Assignment";
-import DetailDialog from "./DetailDialog";
-import { useState } from "react";
-
-const TaskDetail = ({ rowId, mutate }) => {
- const [taskModal, setTaskModal] = useState(false);
-
- const openDetailDialog = () => {
- setTaskModal(true);
- };
-
- return (
- <>
-
-
-
-
-
-
- >
- );
-};
-export default TaskDetail;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/index.jsx
deleted file mode 100644
index ae4213c..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/index.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import TaskDetail from "./TaskDetail";
-import { Box } from "@mui/material";
-import RoadSafetyForm from "./RoadSafetyForm";
-
-const RowActions = ({ row, mutate }) => {
- return (
-
-
-
-
- );
-};
-export default RowActions;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/TaskList.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/TaskList.jsx
deleted file mode 100644
index cb0bd3d..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/TaskList.jsx
+++ /dev/null
@@ -1,145 +0,0 @@
-"use client";
-
-import { useMemo } from "react";
-import { Box } from "@mui/material";
-import DataTableWithAuth from "@/core/components/DataTableWithAuth";
-import RowActions from "./RowActions";
-
-const TaskList = () => {
- const columns = useMemo(
- () => [
- {
- accessorKey: "id",
- header: "کد یکتا",
- id: "id",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "notEquals",
- },
- {
- accessorKey: "aplication_number",
- header: "شماره درخواست",
- id: "aplication_number",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "notEquals",
- },
- {
- accessorKey: "application_date",
- header: "تاریخ درخواست",
- id: "application_date",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "province",
- header: "استان",
- id: "province",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "township",
- header: "شهرستان",
- id: "township",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "city",
- header: "شهر",
- id: "city",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "county",
- header: "بخش",
- id: "county",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "village",
- header: "روستا",
- id: "village",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "land_area",
- header: "مساحت زمین",
- id: "land_area",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_area",
- header: "مساحت طرح",
- id: "design_area",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "organization",
- header: "سازمان",
- id: "organization",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_group",
- header: "گروه طرح",
- id: "design_group",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_title",
- header: "عنوان طرح",
- id: "design_title",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "state",
- header: "وضعیت درخواست",
- id: "state",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- ],
- []
- );
-
- return (
- <>
-
-
-
- >
- );
-};
-export default TaskList;
diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/index.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/index.jsx
deleted file mode 100644
index ef66f17..0000000
--- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/index.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-"use client";
-
-import PageTitle from "@/core/components/PageTitle";
-import { Stack } from "@mui/material";
-import TaskList from "./TaskList";
-
-const GeneralManagerZaminGovComponent = () => {
- return (
-
-
-
-
- );
-};
-export default GeneralManagerZaminGovComponent;
diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/PrivacyOfficeList.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/PrivacyOfficeList.jsx
new file mode 100644
index 0000000..913c803
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/privacy-office/PrivacyOfficeList.jsx
@@ -0,0 +1,243 @@
+import CustomSelectByDependency from "@/core/components/DataTable/filter/fieldsType/CustomSelectByDependency";
+import DataTableWithAuth from "@/core/components/DataTableWithAuth";
+import useInquiryPrivacyState from "@/lib/hooks/useInquiryPrivacyState";
+import AutorenewIcon from "@mui/icons-material/Autorenew";
+import DangerousIcon from "@mui/icons-material/Dangerous";
+import ManageAccountsIcon from "@mui/icons-material/ManageAccounts";
+import MapsHomeWorkIcon from "@mui/icons-material/MapsHomeWork";
+import PsychologyAltIcon from "@mui/icons-material/PsychologyAlt";
+import ReceiptLongIcon from "@mui/icons-material/ReceiptLong";
+import SecurityIcon from "@mui/icons-material/Security";
+import WindowIcon from "@mui/icons-material/Window";
+import { Box, Stack } from "@mui/material";
+import moment from "jalali-moment";
+import { useMemo } from "react";
+import RowActions from "./RowActions";
+import { GET_PRIVACY_ADMIN_LIST } from "@/core/utils/routes";
+import ShowPrimaryArea from "./ShowPrimaryArea";
+
+const PrivacyOfficeList = () => {
+ const stateIcon = (state_id) => {
+ if (state_id === 1) return ;
+ if (state_id === 2 || state_id === 5 || state_id === 13) return ;
+ if (state_id === 3 || state_id === 6 || state_id === 14)
+ return ;
+ if (state_id === 4 || state_id === 7 || state_id === 15) return ;
+ if (state_id === 8) return ;
+ if (state_id === 9 || state_id === 11) return ;
+ if (state_id === 10) return ;
+ if (state_id === 12) return ;
+ };
+ const columns = useMemo(() => {
+ return [
+ {
+ accessorKey: "panjare_vahed_id",
+ header: "کدرهگیری درخواست",
+ id: "panjare_vahed_id",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.panjare_vahed_id}>,
+ },
+ {
+ accessorKey: "national_id",
+ header: "کد ملی",
+ id: "national_id",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.national_id}>,
+ },
+ {
+ accessorKey: "state_id",
+ header: "وضعیت",
+ id: "state_id",
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterMode: "equals",
+ sortDescFirst: false,
+ grow: false,
+ size: 100,
+ ColumnSelectComponent: (props) => {
+ const { itemsList, loadingItemsList, errorItemsList } = useInquiryPrivacyState();
+
+ const getColumnSelectOptions = useMemo(() => {
+ if (loadingItemsList) {
+ return [{ value: "loading", label: "در حال بارگذاری..." }];
+ }
+ if (errorItemsList) {
+ return [{ value: "error", label: "خطا در بارگذاری" }];
+ }
+ return [
+ { value: "", label: "همه موارد" },
+ ...itemsList.map((item) => ({
+ value: item.id,
+ label: item.name,
+ })),
+ ];
+ }, [itemsList, loadingItemsList, errorItemsList]);
+
+ return (
+
+ );
+ },
+ Cell: ({ row }) => (
+
+ {stateIcon(row.original.state_id)}
+
+ {row.original.state_name}
+
+
+ ),
+ },
+ {
+ accessorKey: "plan_title",
+ header: "عنوان طرح",
+ id: "plan_title",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.plan_title}>,
+ },
+ {
+ accessorKey: "plan_group",
+ header: "گروه طرح",
+ id: "plan_group",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.plan_group}>,
+ },
+ {
+ accessorKey: "requested_organization",
+ header: "دستگاه صادر کننده",
+ id: "requested_organization",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.requested_organization}>,
+ },
+ {
+ accessorKey: "worksheet_id",
+ header: "شناسه کاربرگ",
+ id: "worksheet_id",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.worksheet_id}>,
+ },
+ {
+ accessorKey: "primary_area",
+ header: "نمایش محدوده طرح",
+ id: "primary_area",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) =>
+ row.original.primary_area ? (
+
+
+
+ ) : (
+ "-"
+ ),
+ },
+ {
+ accessorKey: "province_id",
+ header: "استان",
+ id: "province_id",
+ enableColumnFilter: false,
+ datatype: "numeric",
+ sortDescFirst: false,
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.province_name}>,
+ },
+ {
+ accessorKey: "city_id",
+ header: "شهر",
+ id: "city_id",
+ enableColumnFilter: false,
+ datatype: "numeric",
+ sortDescFirst: false,
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.city_name}>,
+ },
+ {
+ accessorKey: "isic",
+ header: "کد آیسیک",
+ id: "isic",
+ enableColumnFilter: true,
+ datatype: "text",
+ filterMode: "equals",
+ sortDescFirst: false,
+ columnFilterModeOptions: ["equals", "contains"],
+ grow: false,
+ size: 100,
+ Cell: ({ row }) => <>{row.original.isic}>,
+ },
+ {
+ accessorFn: (row) => moment(row.request_date).locale("fa").format("YYYY/MM/DD"),
+ header: "تاریخ درخواست",
+ id: "request_date",
+ enableColumnFilter: true,
+ datatype: "date",
+ filterMode: "between",
+ grow: false,
+ size: 100,
+ },
+ ];
+ }, []);
+
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+export default PrivacyOfficeList;
diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ConfirmAction/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ConfirmAction/index.jsx
new file mode 100644
index 0000000..c2a0cfc
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/ConfirmAction/index.jsx
@@ -0,0 +1,17 @@
+import ThumbUpIcon from "@mui/icons-material/ThumbUp";
+import { IconButton, Tooltip } from "@mui/material";
+import { useState } from "react";
+
+const ConfirmAction = ({ rowId, mutate }) => {
+ const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
+ return (
+ <>
+
+ setOpenConfirmDialog(true)}>
+
+
+
+ >
+ );
+};
+export default ConfirmAction;
diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RejectAction/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RejectAction/index.jsx
new file mode 100644
index 0000000..c16a405
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/RejectAction/index.jsx
@@ -0,0 +1,17 @@
+import ThumbDownIcon from "@mui/icons-material/ThumbDown";
+import { IconButton, Tooltip } from "@mui/material";
+import { useState } from "react";
+
+const RejectAction = ({ rowId, mutate }) => {
+ const [openRejectDialog, setOpenRejectDialog] = useState(false);
+ return (
+ <>
+
+ setOpenRejectDialog(true)}>
+
+
+
+ >
+ );
+};
+export default RejectAction;
diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/index.jsx
new file mode 100644
index 0000000..06ea132
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/privacy-office/RowActions/index.jsx
@@ -0,0 +1,13 @@
+import { Box } from "@mui/material";
+import ConfirmAction from "./ConfirmAction";
+import RejectAction from "./RejectAction";
+
+const RowActions = ({ row, mutate }) => {
+ return (
+
+
+
+
+ );
+};
+export default RowActions;
diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/ShowPrimaryArea/ShowBound.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/ShowPrimaryArea/ShowBound.jsx
new file mode 100644
index 0000000..24db476
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/privacy-office/ShowPrimaryArea/ShowBound.jsx
@@ -0,0 +1,29 @@
+import { useEffect, useRef } from "react";
+import { FeatureGroup, useMap } from "react-leaflet";
+
+const ShowBound = ({ bound }) => {
+ const map = useMap();
+ const featureRef = useRef(null);
+
+ const safeFitBounds = (layer) => {
+ if (!layer || !map) return;
+ try {
+ const latLngs = layer.getLatLngs();
+ map.fitBounds(latLngs, {
+ paddingTopLeft: [20, 20],
+ paddingBottomRight: [20, 20],
+ });
+ } catch (e) {
+ console.warn("fitBounds failed:", e);
+ }
+ };
+
+ useEffect(() => {
+ bound?.editing?.disable();
+ featureRef.current.addLayer(bound);
+ safeFitBounds(bound);
+ }, []);
+
+ return ;
+};
+export default ShowBound;
diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/ShowPrimaryArea/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/ShowPrimaryArea/index.jsx
new file mode 100644
index 0000000..98e24d0
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/privacy-office/ShowPrimaryArea/index.jsx
@@ -0,0 +1,69 @@
+const {
+ Button,
+ IconButton,
+ Tooltip,
+ Box,
+ Dialog,
+ DialogTitle,
+ Typography,
+ DialogContent,
+ DialogActions,
+} = require("@mui/material");
+import LayersIcon from "@mui/icons-material/Layers";
+import CloseIcon from "@mui/icons-material/Close";
+import { useMemo, useState } from "react";
+import MapLayer from "@/core/components/MapLayer";
+import ShowBound from "./ShowBound";
+
+const ShowPrimaryArea = ({ primaryArea }) => {
+ const [openShowAreaDialog, setOpenShowAreaDialog] = useState(false);
+ const bound = useMemo(() => {
+ const latLngCoords = primaryArea.coordinates.map((coord) => [coord[1], coord[0]]);
+ return primaryArea.type === "polygon" ? L.polygon(latLngCoords) : L.polyline(latLngCoords);
+ }, [primaryArea]);
+
+ return (
+
+
+ setOpenShowAreaDialog(true)}>
+
+
+
+
+
+ );
+};
+
+export default ShowPrimaryArea;
diff --git a/src/components/dashboard/inquiryPrivacy/privacy-office/index.jsx b/src/components/dashboard/inquiryPrivacy/privacy-office/index.jsx
new file mode 100644
index 0000000..ce52276
--- /dev/null
+++ b/src/components/dashboard/inquiryPrivacy/privacy-office/index.jsx
@@ -0,0 +1,14 @@
+"use client";
+import PageTitle from "@/core/components/PageTitle";
+import { Stack } from "@mui/material";
+import PrivacyOfficeList from "./PrivacyOfficeList";
+
+const PrivacyOfficePage = () => {
+ return (
+
+
+
+
+ );
+};
+export default PrivacyOfficePage;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/MapActionButtons.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/MapActionButtons.jsx
deleted file mode 100644
index 600372d..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/MapActionButtons.jsx
+++ /dev/null
@@ -1,100 +0,0 @@
-import { Box, Button, ButtonGroup } from "@mui/material";
-import AutoModeIcon from "@mui/icons-material/AutoMode";
-import DeleteIcon from "@mui/icons-material/Delete";
-import EditLocationAltIcon from "@mui/icons-material/EditLocationAlt";
-import SaveIcon from "@mui/icons-material/Save";
-import CancelIcon from "@mui/icons-material/Cancel";
-
-const MapActionButtons = ({
- disableToCreate,
- disableToEditAndDelete,
- disableToSaveAndCancel,
- onDraw,
- onEdit,
- onRemove,
- onSave,
- onCancel,
-}) => (
- <>
-
-
- }
- color="primary"
- disabled={disableToCreate}
- onClick={onDraw}
- >
- اصلاح
-
- }
- color="warning"
- disabled={disableToEditAndDelete}
- onClick={onEdit}
- >
- ویرایش
-
- }
- color="error"
- disabled={disableToEditAndDelete}
- onClick={onRemove}
- >
- حذف
-
-
-
-
-
- }
- variant="outlined"
- size="small"
- color="success"
- disabled={disableToSaveAndCancel}
- onClick={onSave}
- >
- ذخیره
-
- }
- variant="outlined"
- size="small"
- color="error"
- disabled={disableToSaveAndCancel}
- onClick={onCancel}
- >
- لغو تغییرات
-
-
- >
-);
-
-export default MapActionButtons;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/MapModifyDialog.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/MapModifyDialog.jsx
deleted file mode 100644
index 218cce5..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/MapModifyDialog.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-"use client";
-
-import {
- Box,
- Button,
- Chip,
- Dialog,
- DialogActions,
- DialogContent,
- Divider,
- FormControl,
- FormControlLabel,
- FormLabel,
- Radio,
- RadioGroup,
- Typography,
-} from "@mui/material";
-import dynamic from "next/dynamic";
-import MapLoading from "@/core/components/MapLayer/Loading";
-import "leaflet-draw/dist/leaflet.draw.css";
-import GppMaybeIcon from "@mui/icons-material/GppMaybe";
-import PolygonForDesign from "./PolygonForDesign";
-
-const MapLayer = dynamic(() => import("@/core/components/MapLayer"), {
- loading: () => ,
- ssr: false,
-});
-
-const MapModifyDialog = ({ mapModifyModal, setMapModifyModal }) => {
- const handleClose = () => {
- setMapModifyModal(false);
- };
-
- return (
-
- );
-};
-
-export default MapModifyDialog;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/PolygonForDesign.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/PolygonForDesign.jsx
deleted file mode 100644
index f765e41..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/PolygonForDesign.jsx
+++ /dev/null
@@ -1,115 +0,0 @@
-"use client";
-
-import { FeatureGroup, useMap } from "react-leaflet";
-import { EditControl } from "react-leaflet-draw";
-import { useEffect, useRef, useState } from "react";
-import MapActionButtons from "./MapActionButtons";
-
-const PolygonForDesign = () => {
- const map = useMap();
- const editableFG = useRef(null);
- const [polygonLayer, setPolygonLayer] = useState(null);
- const [disableToCreate, setDisableToCreate] = useState(false);
- const [disableToEditAndDelete, setDisableToEditAndDelete] = useState(true);
- const [disableToSaveAndCancel, setDisableToSaveAndCancel] = useState(true);
- const [editToolbar, setEditToolbar] = useState(null);
-
- useEffect(() => {
- const { L } = window;
- L.drawLocal.draw.handlers.polygon.tooltip = {
- start: "برای شروع کشیدن پلیگان، کلیک کنید.",
- cont: "گوشه های دیگر پلیگان را نیز انتخاب کنید.",
- end: "برای اتمام رسم پلیگان، نقطه آخر را به اول متصل نمایید.",
- };
- L.drawLocal.edit.handlers.edit.tooltip = {
- text: "برای ذخیر یا لغو تغییرات، از دکمه های بالا سمت چپ استفاده نمایید.",
- subtext: "نقاط مشخص شده را گرفته و برای ویرایش جابجا نمایید.",
- };
- }, []);
-
- const handleDrawPolygon = () => {
- const { L } = window;
- const drawControl = new L.Draw.Polygon(map);
- drawControl.enable();
- setDisableToCreate(true);
- };
-
- const handleEditPolygon = () => {
- const { L } = window;
- if (editableFG.current && polygonLayer) {
- const editControlInstance = new L.EditToolbar.Edit(map, {
- featureGroup: editableFG.current,
- });
- editControlInstance.enable();
- setEditToolbar(editControlInstance);
- setDisableToEditAndDelete(true);
- setDisableToSaveAndCancel(false);
- }
- };
-
- const handleRemovePolygon = () => {
- if (polygonLayer && editableFG.current) {
- editableFG.current.removeLayer(polygonLayer);
- setPolygonLayer(null);
- setDisableToEditAndDelete(true);
- setDisableToCreate(false);
- }
- };
-
- const handleSavePolygon = () => {
- if (editToolbar) {
- editToolbar.save();
- editToolbar.disable();
- setDisableToEditAndDelete(false);
- setDisableToSaveAndCancel(true);
- }
- };
-
- const handleCancelEdit = () => {
- if (editToolbar) {
- editToolbar.revertLayers();
- editToolbar.disable();
- setDisableToEditAndDelete(false);
- setDisableToSaveAndCancel(true);
- }
- };
-
- const handlePolygonCreate = (e) => {
- const layer = e.layer;
- setPolygonLayer(layer);
- editableFG.current.addLayer(layer);
- setDisableToEditAndDelete(false);
- };
-
- return (
- <>
-
-
-
-
- >
- );
-};
-
-export default PolygonForDesign;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/index.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/index.jsx
deleted file mode 100644
index 970f93c..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/MapModify/index.jsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { IconButton, Tooltip } from "@mui/material";
-import MapIcon from "@mui/icons-material/Map";
-import { useState } from "react";
-import MapModifyDialog from "./MapModifyDialog";
-
-const MapModify = ({ rowId, mutate }) => {
- const [mapModifyModal, setMapModifyModal] = useState(false);
-
- const openMapModifyDialog = () => {
- setMapModifyModal(true);
- };
-
- return (
- <>
-
-
-
-
-
-
- >
- );
-};
-export default MapModify;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx
deleted file mode 100644
index 221e411..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import {
- Autocomplete,
- Button,
- CircularProgress,
- DialogActions,
- DialogContent,
- FormControl,
- FormHelperText,
- InputLabel,
- OutlinedInput,
- Stack,
- TextField,
- Typography,
-} from "@mui/material";
-import { Controller, useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import { object, string } from "yup";
-import StyledForm from "@/core/components/StyledForm";
-import useProvinces from "@/lib/hooks/useProvince";
-import useRequest from "@/lib/hooks/useRequest";
-import { REFER_ADMIN_PROVINCE } from "@/core/utils/routes";
-
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
- province: string().required("وارد کردن استان الزامیست!"),
-});
-
-const ReferFormContext = ({ setOpenReferDialog, rowId, mutate }) => {
- const defaultValues = {
- description: "",
- province: "",
- };
- const { provinces, loadingProvinces, errorProvinces } = useProvinces();
- const requestServer = useRequest({ notificationSuccess: true });
- const {
- control,
- register,
- handleSubmit,
- formState: { isSubmitting, errors, touchedFields },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
-
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- formData.append("provinceId", data.province);
-
- requestServer(`${REFER_ADMIN_PROVINCE}/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- setOpenReferDialog(false);
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
-
-
-
- توضیحات
-
-
-
- {errors.description ? errors.description.message : null}
-
-
-
-
- (
-
-
- {errorProvinces ? (
- خطایی در دریافت استان ها رخ داده است!
- ) : loadingProvinces ? (
-
-
- درحال دریافت لیست استان ها
-
- ) : (
- province.id === value) || null}
- disablePortal
- options={provinces}
- getOptionLabel={(province) => province.name_fa}
- isOptionEqualToValue={(option, value) => option.id === value.id}
- onChange={(event, newValue) => {
- onChange(newValue ? newValue.id : "");
- }}
- renderInput={(params) => (
-
- )}
- />
- )}
-
- {errors.province ? errors.province.message : null}
-
-
- )}
- />
-
-
-
-
-
-
-
-
- );
-};
-export default ReferFormContext;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/index.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/index.jsx
deleted file mode 100644
index ee76b95..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/index.jsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { Dialog, DialogTitle, IconButton, Stack, Tooltip } from "@mui/material";
-import ReplyIcon from "@mui/icons-material/Reply";
-import DialogTransition from "@/core/components/DialogTransition";
-import { useState } from "react";
-import ReferFormContext from "./ReferFormContext";
-
-const ReferForm = ({ rowId, mutate }) => {
- const [openReferDialog, setOpenReferDialog] = useState(false);
- return (
-
-
- {
- setOpenReferDialog(true);
- }}
- >
-
-
-
-
-
- );
-};
-export default ReferForm;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx
deleted file mode 100644
index ba2cdeb..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { FormControl, FormHelperText, InputLabel, OutlinedInput, Stack } from "@mui/material";
-
-const DescriptionForm = ({ errors, register }) => {
- return (
-
-
-
- توضیحات
-
-
-
- {errors.description ? errors.description.message : null}
-
-
-
- );
-};
-export default DescriptionForm;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx
deleted file mode 100644
index 74f9b45..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { Card, CardContent, CardHeader, CircularProgress, Divider, Stack, Typography } from "@mui/material";
-import usePrevStateOpinion from "@/lib/hooks/usePrevStateopinion";
-
-const PrevCartableOpinion = () => {
- const { message, loadingMessage, errorMessage } = usePrevStateOpinion();
- return (
-
-
-
-
- {errorMessage ? (
- خطا در دریافت اطلاعات !!!
- ) : loadingMessage ? (
-
-
- درحال دریافت اطلاعات
-
- ) : (
- {message}
- )}
-
-
-
-
- );
-};
-export default PrevCartableOpinion;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx
deleted file mode 100644
index ef005b8..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import {
- Card,
- CardContent,
- FormControl,
- FormControlLabel,
- FormLabel,
- RadioGroup,
- Stack,
- Typography,
-} from "@mui/material";
-import Radio from "@mui/material/Radio";
-
-const QuestionSafetyForm = ({ register, errors }) => {
- return (
-
-
-
-
-
-
- آیا ایمنی راه این طرح مورد تایید است ؟
-
-
-
-
- }
- label="بله"
- {...register("RadioGroup")}
- />
- }
- label="خیر"
- {...register("RadioGroup")}
- />
-
-
- {errors.RadioGroup && (
-
- {errors.RadioGroup.message}
-
- )}
-
-
-
-
- );
-};
-export default QuestionSafetyForm;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/RoadSaftyFormContext.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/RoadSaftyFormContext.jsx
deleted file mode 100644
index 8be0c6c..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/RoadSaftyFormContext.jsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import { DialogActions, DialogContent, Stack } from "@mui/material";
-import StyledForm from "@/core/components/StyledForm";
-import useRequest from "@/lib/hooks/useRequest";
-import { useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import { object, string } from "yup";
-import QuestionSafetyForm from "./QuestionSafetyForm";
-import PrevCartableOpinion from "./PrevCartableOpinion";
-import DescriptionForm from "./DescriptionForm";
-import SubmitButtonsAdmin from "./SubmitButtonsAdmin";
-import { SUBMIT_ROAD_SAFETY_FORM } from "@/core/utils/routes";
-import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail";
-const fakeData = {
- id: 1,
- shomareh_darkhast: "2124",
- ostan: "ostan",
- shahr: "shahr",
- shahrestan: "shahrestan",
- bakhsh: "bakhsh",
- roosta: "roosta",
- tarikh_darkhast: "tarikh_darkhast",
- sazman: "sazman",
- masahat_zamin: "masahat_zamin",
- masahat_tarh: "masahat_tarh",
- gorooh_tarh: "gorooh_tarh",
- onvane_tarh: "onvane_tarh",
- address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر",
- file_mosavab: "file",
- polygon: [
- [51.515, -0.09],
- [51.52, -0.1],
- [51.52, -0.12],
- ],
-};
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
- RadioGroup: string().required("تاییدیه ایمنی راه ضروریست!"),
-});
-const RoadSafetyFormContext = ({ rowId, mutate, setOpenRoadSafetyForm }) => {
- const defaultValues = {
- description: "",
- RadioGroup: "",
- };
- const requestServer = useRequest({ notificationSuccess: true });
- const {
- register,
- handleSubmit,
- formState: { isSubmitting, errors },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- formData.append("provinceId", data.RadioGroup);
-
- requestServer(`${SUBMIT_ROAD_SAFETY_FORM}/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- setOpenRoadSafetyForm(false);
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-export default RoadSafetyFormContext;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/SubmitButtonsAdmin.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/SubmitButtonsAdmin.jsx
deleted file mode 100644
index 611457f..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/SubmitButtonsAdmin.jsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { Button } from "@mui/material";
-
-const SubmitButtonsAdmin = ({ setOpenRoadSafetyForm, isSubmitting }) => {
- return (
- <>
-
-
- >
- );
-};
-export default SubmitButtonsAdmin;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/index.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/index.jsx
deleted file mode 100644
index 9787ef5..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/index.jsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Dialog, IconButton, Stack, Tooltip } from "@mui/material";
-import EngineeringIcon from "@mui/icons-material/Engineering";
-import DialogTransition from "@/core/components/DialogTransition";
-import { useState } from "react";
-import RoadSafetyFormContext from "./RoadSaftyFormContext";
-import { Close } from "@mui/icons-material";
-
-const RoadSafetyForm = ({ rowId, mutate }) => {
- const [openRoadSafetyForm, setOpenRoadSafetyForm] = useState(false);
- return (
-
-
- {
- setOpenRoadSafetyForm(true);
- }}
- >
-
-
-
-
-
- );
-};
-export default RoadSafetyForm;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx
deleted file mode 100644
index 777eecf..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx
+++ /dev/null
@@ -1,75 +0,0 @@
-"use client";
-
-import { Dialog, DialogContent } from "@mui/material";
-import { object, string } from "yup";
-import useRequest from "@/lib/hooks/useRequest";
-import { useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import StyledForm from "@/core/components/StyledForm";
-import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail";
-
-const fakeData = {
- id: 1,
- shomareh_darkhast: "2124",
- ostan: "ostan",
- shahr: "shahr",
- shahrestan: "shahrestan",
- bakhsh: "bakhsh",
- roosta: "roosta",
- tarikh_darkhast: "tarikh_darkhast",
- sazman: "sazman",
- masahat_zamin: "masahat_zamin",
- masahat_tarh: "masahat_tarh",
- gorooh_tarh: "gorooh_tarh",
- onvane_tarh: "onvane_tarh",
- address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر",
- file_mosavab: "file",
- polygon: [
- [51.515, -0.09],
- [51.52, -0.1],
- [51.52, -0.12],
- ],
-};
-
-const validationSchema = object({
- description: string().required("وارد کردن توضیحات الزامیست!"),
-});
-
-const DetailDialog = ({ taskModal, setTaskModal, rowId, mutate }) => {
- const requestServer = useRequest({ auth: true });
- const defaultValues = {
- description: "",
- };
- const handleClose = () => {
- setTaskModal(false);
- };
-
- const {
- register,
- handleSubmit,
- formState: { isSubmitting, errors, touchedFields },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "all" });
-
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("description", data.description);
- requestServer(`api-for-send-to-harim/${rowId}`, "post", {
- data: formData,
- })
- .then(() => {
- handleClose();
- mutate();
- })
- .catch(() => {});
- };
- return (
-
-
-
- );
-};
-export default DetailDialog;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/TaskDetail/index.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/TaskDetail/index.jsx
deleted file mode 100644
index 1641840..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/TaskDetail/index.jsx
+++ /dev/null
@@ -1,26 +0,0 @@
-"use client";
-
-import { IconButton, Tooltip } from "@mui/material";
-import AssignmentIcon from "@mui/icons-material/Assignment";
-import DetailDialog from "./DetailDialog";
-import { useState } from "react";
-
-const TaskDetail = ({ rowId, mutate }) => {
- const [taskModal, setTaskModal] = useState(false);
-
- const openDetailDialog = () => {
- setTaskModal(true);
- };
-
- return (
- <>
-
-
-
-
-
-
- >
- );
-};
-export default TaskDetail;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/index.jsx
deleted file mode 100644
index 2d324bc..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/index.jsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import ReferForm from "./Refer";
-import TaskDetail from "./TaskDetail";
-import { Box } from "@mui/material";
-import RoadSafetyForm from "./RoadSafetyForm";
-import MapModify from "./MapModify";
-
-const RowActions = ({ row, mutate }) => {
- return (
-
-
-
-
-
-
- );
-};
-export default RowActions;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/TaskList.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/TaskList.jsx
deleted file mode 100644
index 188c1d6..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/TaskList.jsx
+++ /dev/null
@@ -1,145 +0,0 @@
-"use client";
-
-import { useMemo } from "react";
-import { Box } from "@mui/material";
-import DataTableWithAuth from "@/core/components/DataTableWithAuth";
-import RowActions from "./RowActions";
-
-const TaskList = () => {
- const columns = useMemo(
- () => [
- {
- accessorKey: "id",
- header: "کد یکتا",
- id: "id",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "notEquals",
- },
- {
- accessorKey: "aplication_number",
- header: "شماره درخواست",
- id: "aplication_number",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "notEquals",
- },
- {
- accessorKey: "application_date",
- header: "تاریخ درخواست",
- id: "application_date",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "province",
- header: "استان",
- id: "province",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "township",
- header: "شهرستان",
- id: "township",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "city",
- header: "شهر",
- id: "city",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "county",
- header: "بخش",
- id: "county",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "village",
- header: "روستا",
- id: "village",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "land_area",
- header: "مساحت زمین",
- id: "land_area",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_area",
- header: "مساحت طرح",
- id: "design_area",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "organization",
- header: "سازمان",
- id: "organization",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_group",
- header: "گروه طرح",
- id: "design_group",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "design_title",
- header: "عنوان طرح",
- id: "design_title",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- {
- accessorKey: "state",
- header: "وضعیت درخواست",
- id: "state",
- enableColumnFilter: false,
- datatype: "text",
- filterMode: "equals",
- },
- ],
- []
- );
-
- return (
- <>
-
-
-
- >
- );
-};
-export default TaskList;
diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/index.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/index.jsx
deleted file mode 100644
index 936d610..0000000
--- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/index.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-"use client";
-
-import PageTitle from "@/core/components/PageTitle";
-import { Stack } from "@mui/material";
-import TaskList from "./TaskList";
-
-const ProvinceAdminZaminGovComponent = () => {
- return (
-
-
-
-
- );
-};
-export default ProvinceAdminZaminGovComponent;
diff --git a/src/core/utils/geoCalculations.js b/src/core/utils/geoCalculations.js
new file mode 100644
index 0000000..ebf8a96
--- /dev/null
+++ b/src/core/utils/geoCalculations.js
@@ -0,0 +1,35 @@
+import * as turf from "@turf/turf";
+
+export const calculatePolygonMetrics = (coordinates, isLatLngOrder = true) => {
+ if (!coordinates || coordinates.length < 3) {
+ return { area: 0, sides: [], coordinates: [] };
+ }
+
+ const geoCoords = isLatLngOrder
+ ? coordinates.map(([lat, lng]) => [lng, lat])
+ : coordinates.map(([lng, lat]) => [lng, lat]);
+
+ if (
+ geoCoords[0][0] !== geoCoords[geoCoords.length - 1][0] ||
+ geoCoords[0][1] !== geoCoords[geoCoords.length - 1][1]
+ ) {
+ geoCoords.push(geoCoords[0]);
+ }
+
+ const polygon = turf.polygon([geoCoords]);
+
+ const area = turf.area(polygon);
+
+ const sides = [];
+ for (let i = 0; i < geoCoords.length - 1; i++) {
+ const line = turf.lineString([geoCoords[i], geoCoords[i + 1]]);
+ const length = turf.length(line, { units: "meters" });
+ sides.push(length);
+ }
+
+ return {
+ area,
+ sides,
+ coordinates: geoCoords,
+ };
+};
diff --git a/src/core/utils/pageMenuDev.js b/src/core/utils/pageMenuDev.js
index 5fda757..23c42d7 100644
--- a/src/core/utils/pageMenuDev.js
+++ b/src/core/utils/pageMenuDev.js
@@ -24,6 +24,10 @@ import RouteIcon from "@mui/icons-material/Route";
import ScienceIcon from "@mui/icons-material/Science";
import SpaceDashboardIcon from "@mui/icons-material/SpaceDashboard";
import SpeedIcon from "@mui/icons-material/Speed";
+import PsychologyAltIcon from "@mui/icons-material/PsychologyAlt";
+import MapsHomeWorkIcon from "@mui/icons-material/MapsHomeWork";
+import SecurityIcon from "@mui/icons-material/Security";
+import ManageAccountsIcon from "@mui/icons-material/ManageAccounts";
export const pageMenuDev = [
{
@@ -295,32 +299,36 @@ export const pageMenuDev = [
hasSubitems: true,
Subitems: [
{
- id: "cityAdminZaminGov",
- label: "استعلام حرائم پنجره واحد",
+ id: "cityAdmin",
+ label: "کارتابل شهرستان",
type: "page",
- route: "/dashboard/inquiry-privacy/city-admin/zamin-gov",
- permissions: [],
+ route: "/dashboard/inquiry-privacy/city-admin",
+ icon: ,
+ permissions: ["all"],
},
{
- id: "provinceAdminZaminGov",
- label: "استعلام حرائم پنجره واحد",
+ id: "privacyOffice",
+ label: "کارتابل اداره حریم",
type: "page",
- route: "/dashboard/inquiry-privacy/province-admin/zamin-gov",
- permissions: [],
+ route: "/dashboard/inquiry-privacy/privacy-office",
+ icon: ,
+ permissions: ["all"],
},
{
- id: "assistantZaminGov",
- label: "استعلام حرائم پنجره واحد",
+ id: "assistant",
+ label: "کارتابل معاون",
type: "page",
- route: "/dashboard/inquiry-privacy/assistant/zamin-gov",
- permissions: [],
+ route: "/dashboard/inquiry-privacy/assistant",
+ icon: ,
+ permissions: ["all"],
},
{
- id: "generalManagerZaminGov",
- label: "استعلام حرائم پنجره واحد",
+ id: "generalManager",
+ label: "کارتابل مدیر",
type: "page",
- route: "/dashboard/inquiry-privacy/general-manager/zamin-gov",
- permissions: [],
+ route: "/dashboard/inquiry-privacy/general-manager",
+ icon: ,
+ permissions: ["all"],
},
],
},
diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js
index 1ddf8dc..8572b6f 100644
--- a/src/core/utils/routes.js
+++ b/src/core/utils/routes.js
@@ -234,3 +234,9 @@ export const GET_RAHDARAN_TABLE_LIST = api + "/api/v3/rahdaran";
export const DELETE_RAHDARAN_ITEM = api + "/api/v3/rahdaran";
export const UPDATE_RAHDARAN_ITEM = api + "/api/v3/rahdaran";
export const CREATE_RAHDARAN_ITEM = api + "/api/v3/rahdaran";
+
+// estelam harim
+export const GET_CITY_ADMIN_LIST = api + "/api/v3/harim/province_office";
+export const GET_INQUIRY_PRIVACY_STATE_LIST = api + "/api/v3/harim/detail/states";
+export const CITY_ADMIN_FEEDBACK = api + "/api/v3/harim/province_office/feedback";
+export const GET_PRIVACY_ADMIN_LIST = api + "/api/v3/harim/harim_office";
diff --git a/src/lib/hooks/useInquiryPrivacyState.js b/src/lib/hooks/useInquiryPrivacyState.js
new file mode 100644
index 0000000..a66d83f
--- /dev/null
+++ b/src/lib/hooks/useInquiryPrivacyState.js
@@ -0,0 +1,30 @@
+import { GET_INQUIRY_PRIVACY_STATE_LIST } from "@/core/utils/routes";
+import useRequest from "@/lib/hooks/useRequest";
+import { useEffect, useState } from "react";
+
+const useInquiryPrivacyState = () => {
+ const requestServer = useRequest();
+ const [itemsList, setItemsList] = useState([]);
+ const [loadingItemsList, setLoadingItemsList] = useState(true);
+ const [errorItemsList, setErrorItemsList] = useState(null);
+
+ useEffect(() => {
+ const fetchItems = async () => {
+ try {
+ const response = await requestServer(`${GET_INQUIRY_PRIVACY_STATE_LIST}`);
+ setItemsList(response.data.data);
+ setLoadingItemsList(false);
+ setErrorItemsList(false);
+ } catch (e) {
+ setErrorItemsList(e);
+ setLoadingItemsList(false);
+ }
+ };
+
+ fetchItems();
+ }, []);
+
+ return { itemsList, loadingItemsList, errorItemsList };
+};
+
+export default useInquiryPrivacyState;