diff --git a/.env.local.example b/.env.local.example
index 52ae481..78f8096 100644
--- a/.env.local.example
+++ b/.env.local.example
@@ -1,3 +1,3 @@
-NEXT_PUBLIC_VERSION="0.9.4"
+NEXT_PUBLIC_VERSION="0.9.5"
NEXT_PUBLIC_API_URL="https://rms.witel.ir"
NEXT_PUBLIC_MAPTILE_ENDPOINT="https://rmsmap.rmto.ir/141map"
\ No newline at end of file
diff --git a/src/components/dashboard/azmayesh/AzmayeshList.jsx b/src/components/dashboard/azmayesh/AzmayeshList.jsx
index 89e220f..c3dcb83 100644
--- a/src/components/dashboard/azmayesh/AzmayeshList.jsx
+++ b/src/components/dashboard/azmayesh/AzmayeshList.jsx
@@ -119,6 +119,19 @@ const AzmayeshList = () => {
),
},
+ {
+ accessorKey: "updated_at",
+ header: "تاریخ بروزرسانی",
+ id: "updated_at",
+ enableColumnFilter: false,
+ datatype: "date",
+ filterFn: "equals",
+ Cell: ({ renderedCellValue }) => (
+
+ {renderedCellValue ? moment(renderedCellValue).locale("fa").format("HH:mm | YYYY/MM/DD") : "-"}
+
+ ),
+ },
],
[]
);
diff --git a/src/components/dashboard/azmayesh/Forms/CandUAzmayesh/FormAndRequest.jsx b/src/components/dashboard/azmayesh/Forms/CandUAzmayesh/FormAndRequest.jsx
new file mode 100644
index 0000000..f74dd22
--- /dev/null
+++ b/src/components/dashboard/azmayesh/Forms/CandUAzmayesh/FormAndRequest.jsx
@@ -0,0 +1,198 @@
+"use client";
+
+import { Box, Button, DialogActions, DialogContent, Tab, Tabs, useMediaQuery } from "@mui/material";
+import React, { useState } from "react";
+import { useTheme } from "@emotion/react";
+import useRequest from "@/lib/hooks/useRequest";
+import { object, string } from "yup";
+import { useForm } from "react-hook-form";
+import { yupResolver } from "@hookform/resolvers/yup";
+import moment from "jalali-moment";
+import { CREATE_AZMAYESH, UPDATE_AZMAYESH } from "@/core/utils/routes";
+import StyledForm from "@/core/components/StyledForm";
+import TravelExploreIcon from "@mui/icons-material/TravelExplore";
+import TextSnippetIcon from "@mui/icons-material/TextSnippet";
+import ExitToAppIcon from "@mui/icons-material/ExitToApp";
+import KeyboardDoubleArrowRightIcon from "@mui/icons-material/KeyboardDoubleArrowRight";
+import KeyboardDoubleArrowLeftIcon from "@mui/icons-material/KeyboardDoubleArrowLeft";
+import BeenhereIcon from "@mui/icons-material/Beenhere";
+import CandUMapBox from "./CandUMapBox";
+import CandUCreateTimeLine from "./CandUTimeLine";
+import CandUGeneralInfo from "./CandUGeneralInfo";
+
+function TabPanel(props) {
+ const { children, value, index } = props;
+
+ return (
+
+ {value === index && {children}}
+
+ );
+}
+
+const validationSchema = object({
+ azmayesh_type_id: string().required("نوع آزمایش را مشخص کنید!"),
+ province_id: string().required("استان را وارد کنید!"),
+ project_name: string().required("عنوان پروژه را وارد کنید!"),
+ employer: string().required("کارفرما را وارد کنید!"),
+ consultant: string().required("مشاور را وارد کنید!"),
+ contractor: string().required("پیمانکار را وارد کنید!"),
+ applicant: string().required("متقاضی را وارد کنید!"),
+ work_number: string().required("شماره کار را وارد کنید!"),
+ request_number: string().required("شماره درخواست را وارد کنید!"),
+ request_date: string().required("تاریخ درخواست را وارد کنید!"),
+ report_date: string().required("تاریخ گزارش را وارد کنید!"),
+});
+
+const CandUAzmayesh = ({ setOpen, mutate, updateInfo, rowId }) => {
+ const theme = useTheme();
+ const requestServer = useRequest({ auth: true });
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
+ const [tabState, setTabState] = useState(0);
+ const [mapBoxData, setMapBoxData] = useState(updateInfo ? { lat: updateInfo.lat, lng: updateInfo.lng } : null);
+
+ const handleClose = () => {
+ setOpen(false);
+ };
+
+ const handleChangeTab = (event, newValue) => {
+ setTabState(newValue);
+ };
+
+ const handlePrev = () => {
+ if (tabState === 0) {
+ handleClose();
+ } else {
+ setTabState(tabState - 1);
+ }
+ };
+
+ const defaultValues = {
+ azmayesh_type_id: updateInfo ? updateInfo.azmayesh_type_id : "",
+ azmayesh_type_name: updateInfo ? updateInfo.azmayesh_type_name : "",
+ province_id: updateInfo ? updateInfo.province_id : "",
+ province_name: updateInfo ? updateInfo.province_name : "",
+ project_name: updateInfo ? updateInfo.project_name : "",
+ employer: updateInfo ? updateInfo.employer : "",
+ consultant: updateInfo ? updateInfo.consultant : "",
+ contractor: updateInfo ? updateInfo.contractor : "",
+ applicant: updateInfo ? updateInfo.applicant : "",
+ work_number: updateInfo ? updateInfo.work_number : "",
+ request_number: updateInfo ? updateInfo.request_number : "",
+ request_date: updateInfo ? moment(updateInfo.request_date, "YYYY-MM-DD").toDate() : "",
+ report_date: updateInfo ? moment(updateInfo.report_date, "YYYY-MM-DD").toDate() : "",
+ };
+
+ const {
+ control,
+ register,
+ handleSubmit,
+ setValue,
+ formState: { isSubmitting, errors, touchedFields },
+ } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "onBlur" });
+
+ const onSubmit = async (data) => {
+ const formData = new FormData();
+ formData.append("lat", mapBoxData.lat);
+ formData.append("lng", mapBoxData.lng);
+ formData.append("azmayesh_type_id", data.azmayesh_type_id);
+ formData.append("azmayesh_type_name", data.azmayesh_type_name);
+ formData.append("province_id", data.province_id);
+ formData.append("province_name", data.province_name);
+ formData.append("project_name", data.project_name);
+ formData.append("employer", data.employer);
+ formData.append("consultant", data.consultant);
+ formData.append("contractor", data.contractor);
+ formData.append("applicant", data.applicant);
+ formData.append("work_number", data.work_number);
+ formData.append("request_number", data.request_number);
+ formData.append("request_date", moment(new Date(data.request_date)).format("YYYY-MM-DD"));
+ formData.append("report_date", moment(new Date(data.report_date)).format("YYYY-MM-DD"));
+
+ requestServer(updateInfo ? `${UPDATE_AZMAYESH}/${rowId}` : CREATE_AZMAYESH, "post", {
+ data: formData,
+ })
+ .then(() => {
+ mutate();
+ handleClose();
+ })
+ .catch(() => {});
+ };
+
+ return (
+
+
+ } label="انتخاب محل آزمایش">
+ } label="مشخصات آزمایش">
+
+
+
+
+
+
+
+
+
+
+ {!isMobile && (
+
+
+
+ )}
+
+
+ : }
+ >
+ {tabState === 0 ? "بستن" : "مرحله قبل"}
+
+ {tabState === 0 ? (
+
+ ) : (
+ }
+ >
+ {updateInfo
+ ? isSubmitting
+ ? "در حال ویرایش آزمایش"
+ : "ویرایش آزمایش"
+ : isSubmitting
+ ? "در حال ثبت آزمایش"
+ : "ثبت آزمایش"}
+
+ )}
+
+
+ );
+};
+export default CandUAzmayesh;
diff --git a/src/components/dashboard/azmayesh/Forms/CandUAzmayesh/index.jsx b/src/components/dashboard/azmayesh/Forms/CandUAzmayesh/index.jsx
index 8f145d2..960946d 100644
--- a/src/components/dashboard/azmayesh/Forms/CandUAzmayesh/index.jsx
+++ b/src/components/dashboard/azmayesh/Forms/CandUAzmayesh/index.jsx
@@ -1,204 +1,23 @@
"use client";
-import { Box, Button, Dialog, DialogActions, DialogContent, Tab, Tabs, useMediaQuery } from "@mui/material";
-import React, { useState } from "react";
-import { useTheme } from "@emotion/react";
-import useRequest from "@/lib/hooks/useRequest";
-import { object, string } from "yup";
-import { useForm } from "react-hook-form";
-import { yupResolver } from "@hookform/resolvers/yup";
-import moment from "jalali-moment";
-import { CREATE_AZMAYESH, UPDATE_AZMAYESH } from "@/core/utils/routes";
-import StyledForm from "@/core/components/StyledForm";
-import TravelExploreIcon from "@mui/icons-material/TravelExplore";
-import TextSnippetIcon from "@mui/icons-material/TextSnippet";
-import ExitToAppIcon from "@mui/icons-material/ExitToApp";
-import KeyboardDoubleArrowRightIcon from "@mui/icons-material/KeyboardDoubleArrowRight";
-import KeyboardDoubleArrowLeftIcon from "@mui/icons-material/KeyboardDoubleArrowLeft";
-import BeenhereIcon from "@mui/icons-material/Beenhere";
-import CandUMapBox from "./CandUMapBox";
-import CandUCreateTimeLine from "./CandUTimeLine";
-import CandUGeneralInfo from "./CandUGeneralInfo";
-
-function TabPanel(props) {
- const { children, value, index } = props;
+import { Dialog } from "@mui/material";
+import FormAndRequest from "./FormAndRequest";
+import DialogLoading from "@/core/components/DialogLoading";
+const CandUAzmayesh = ({ open, setOpen, mutate, updateInfo, rowId, loadingOpen, fromUpdate = false }) => {
+ const isUpdateReady = fromUpdate ? updateInfo !== null : true;
return (
-
- {value === index && {children}}
-
- );
-}
-
-const validationSchema = object({
- azmayesh_type_id: string().required("نوع آزمایش را مشخص کنید!"),
- province_id: string().required("استان را وارد کنید!"),
- project_name: string().required("عنوان پروژه را وارد کنید!"),
- employer: string().required("کارفرما را وارد کنید!"),
- consultant: string().required("مشاور را وارد کنید!"),
- contractor: string().required("پیمانکار را وارد کنید!"),
- applicant: string().required("متقاضی را وارد کنید!"),
- work_number: string().required("شماره کار را وارد کنید!"),
- request_number: string().required("شماره درخواست را وارد کنید!"),
- request_date: string().required("تاریخ درخواست را وارد کنید!"),
- report_date: string().required("تاریخ گزارش را وارد کنید!"),
-});
-
-const CandUAzmayesh = ({ open, setOpen, mutate, updateInfo, rowId }) => {
- const theme = useTheme();
- const requestServer = useRequest({ auth: true });
- const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
- const [tabState, setTabState] = useState(0);
- const [mapBoxData, setMapBoxData] = useState(updateInfo ? { lat: updateInfo.lat, lng: updateInfo.lng } : null);
-
- const handleClose = () => {
- setOpen(false);
- };
-
- const handleChangeTab = (event, newValue) => {
- setTabState(newValue);
- };
-
- const handlePrev = () => {
- if (tabState === 0) {
- handleClose();
- } else {
- setTabState(tabState - 1);
- }
- };
-
- const defaultValues = {
- azmayesh_type_id: updateInfo ? updateInfo.azmayesh_type_id : "",
- azmayesh_type_name: updateInfo ? updateInfo.azmayesh_type_name : "",
- province_id: updateInfo ? updateInfo.province_id : "",
- province_name: updateInfo ? updateInfo.province_name : "",
- project_name: updateInfo ? updateInfo.project_name : "",
- employer: updateInfo ? updateInfo.employer : "",
- consultant: updateInfo ? updateInfo.consultant : "",
- contractor: updateInfo ? updateInfo.contractor : "",
- applicant: updateInfo ? updateInfo.applicant : "",
- work_number: updateInfo ? updateInfo.work_number : "",
- request_number: updateInfo ? updateInfo.request_number : "",
- request_date: updateInfo ? moment(updateInfo.request_date, "YYYY-MM-DD").toDate() : "",
- report_date: updateInfo ? moment(updateInfo.report_date, "YYYY-MM-DD").toDate() : "",
- };
-
- const {
- control,
- register,
- handleSubmit,
- setValue,
- formState: { isSubmitting, errors, touchedFields },
- } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "onBlur" });
-
- const onSubmit = async (data) => {
- const formData = new FormData();
- formData.append("lat", mapBoxData.lat);
- formData.append("lng", mapBoxData.lng);
- formData.append("azmayesh_type_id", data.azmayesh_type_id);
- formData.append("azmayesh_type_name", data.azmayesh_type_name);
- formData.append("province_id", data.province_id);
- formData.append("province_name", data.province_name);
- formData.append("project_name", data.project_name);
- formData.append("employer", data.employer);
- formData.append("consultant", data.consultant);
- formData.append("contractor", data.contractor);
- formData.append("applicant", data.applicant);
- formData.append("work_number", data.work_number);
- formData.append("request_number", data.request_number);
- formData.append("request_date", moment(new Date(data.request_date)).format("YYYY-MM-DD"));
- formData.append("report_date", moment(new Date(data.report_date)).format("YYYY-MM-DD"));
-
- requestServer(updateInfo ? `${UPDATE_AZMAYESH}/${rowId}` : CREATE_AZMAYESH, "post", {
- data: formData,
- })
- .then(() => {
- mutate();
- handleClose();
- })
- .catch(() => {});
- };
-
- return (
-