fixed bugs
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import SelectBox from "@/core/components/SelectBox"
|
||||
import useEdaratLists from "@/lib/hooks/useEdaratLists";
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
const CityContent = ({ provinceID, field, fieldState: { error } }) => {
|
||||
const { edaratList, loadingEdaratList, errorEdaratList } = useEdaratLists(provinceID);
|
||||
const [prevDependency, setPrevDependency] = useState(provinceID);
|
||||
|
||||
useEffect(() => {
|
||||
if (prevDependency === provinceID) return;
|
||||
field.onChange(null)
|
||||
setPrevDependency(provinceID);
|
||||
}, [provinceID])
|
||||
|
||||
return (
|
||||
<SelectBox
|
||||
value={!provinceID ? 'dependency' : errorEdaratList ? "error" : loadingEdaratList ? 'loading' : field.value || ""}
|
||||
label={"شهرستان"}
|
||||
selectors={edaratList}
|
||||
schema={{ name: "name_fa", value: "id" }}
|
||||
error={error}
|
||||
onChange={field.onChange}
|
||||
helperText={error?.message}
|
||||
isLoading={loadingEdaratList}
|
||||
errorEcured={errorEdaratList}
|
||||
isDependency={!provinceID}
|
||||
dependencyLabel={"ابتدا استان را انتخاب کنید"}
|
||||
/>
|
||||
)
|
||||
}
|
||||
export default CityContent
|
||||
@@ -1,27 +1,15 @@
|
||||
import SelectBox from "@/core/components/SelectBox";
|
||||
import { Controller, useWatch } from "react-hook-form";
|
||||
import useEdaratLists from "@/lib/hooks/useEdaratLists";
|
||||
import { Controller, useWatch } from "react-hook-form";
|
||||
import CityContent from "./CityContent";
|
||||
|
||||
const CityController = ({ control }) => {
|
||||
const provinceID = useWatch({ control, name: "province_id" });
|
||||
const { edaratList, loadingEdaratList, errorEdaratList } = useEdaratLists(provinceID);
|
||||
return (
|
||||
<Controller
|
||||
name="city_id"
|
||||
control={control}
|
||||
render={({ field, fieldState: { error } }) => (
|
||||
<SelectBox
|
||||
value={!loadingEdaratList ? field.value || "" : ""}
|
||||
label={provinceID ? "شهرستان" : "ابتدا استان را انتخاب کنید"}
|
||||
selectors={edaratList}
|
||||
schema={{ name: "name_fa", value: "id" }}
|
||||
error={error}
|
||||
onChange={field.onChange}
|
||||
helperText={error?.message}
|
||||
isLoading={loadingEdaratList}
|
||||
errorEcured={errorEdaratList}
|
||||
/>
|
||||
)}
|
||||
render={(props) => <CityContent provinceID={provinceID} {...props} />}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -14,6 +14,7 @@ import DamageInfo from "./DamageInfo";
|
||||
import KeyboardDoubleArrowLeftIcon from "@mui/icons-material/KeyboardDoubleArrowLeft";
|
||||
import DamageReport from "./DamageReport";
|
||||
import DamageItem from "./DamageItem";
|
||||
import validateNationalCode from "@/core/utils/nationalCodeValidation";
|
||||
|
||||
function TabPanel(props) {
|
||||
const { children, value, index } = props;
|
||||
@@ -32,14 +33,12 @@ const validationSchema = object({
|
||||
city_id: number().required("لطفا شهرستان را وارد کنید!!!"),
|
||||
axis_name: string().required("لطفا نام محور را وارد کنید!!!"),
|
||||
driver_name: string().required("لطفا نام و نام خانوادگی را وارد کنید!!!"),
|
||||
phone_number: mixed()
|
||||
.test("max", "تلفن همراه باید شامل 11 رقم باشد", (value) => {
|
||||
const stringValue = String(value);
|
||||
return stringValue.length === 11;
|
||||
})
|
||||
phone_number: string()
|
||||
.matches(/^09\d{9}$/, "شماره موبایل باید با 09 شروع شده و 11 رقم باشد")
|
||||
.required("لطفا تلفن همراه را وارد کنید!!!"),
|
||||
national_code: mixed()
|
||||
.test("max", "کد ملی باید شامل 10 رقم باشد", (value) => value.toString().length === 10)
|
||||
.test("validation", "کد ملی صحیح نمی باشد", (value) => validateNationalCode(value))
|
||||
.required("لطفا کد ملی را وارد کنید!!!"),
|
||||
start_point: mixed()
|
||||
.test("start-point-required", "لطفاً نقطه تصادف را مشخص کنید!", function (value) {
|
||||
|
||||
@@ -8,6 +8,7 @@ import PlateNumber from "@/core/components/PlateNumber";
|
||||
import ImageUpload from "./ImageUpload";
|
||||
import MapInfoOneMarker from "@/core/components/MapInfoOneMarker";
|
||||
import CityController from "@/components/dashboard/damages/operator/Actions/create/Forms/CityController";
|
||||
import PersianTextField from "@/core/components/PersianTextField";
|
||||
|
||||
const DamageInfo = ({ control, setValue, errors }) => {
|
||||
const StartPoint = useWatch({ control, name: "start_point" });
|
||||
@@ -100,8 +101,8 @@ const DamageInfo = ({ control, setValue, errors }) => {
|
||||
render={({ field, fieldState: { error } }) => {
|
||||
return (
|
||||
<SelectBox
|
||||
value={!loadingProvinces ? field.value || "" : ""}
|
||||
label="اداره کل(استان)"
|
||||
value={errorProvinces ? "error" : loadingProvinces ? 'loading' : field.value || ""}
|
||||
label="استان"
|
||||
selectors={provinces}
|
||||
schema={{ name: "name_fa", value: "id" }}
|
||||
error={error}
|
||||
@@ -122,17 +123,18 @@ const DamageInfo = ({ control, setValue, errors }) => {
|
||||
name="axis_name"
|
||||
control={control}
|
||||
render={({ field, fieldState: { error } }) => (
|
||||
<TextField
|
||||
<PersianTextField
|
||||
value={field.value}
|
||||
variant="outlined"
|
||||
name="axis_name"
|
||||
onChange={field.onChange}
|
||||
fieldOnChange={field.onChange}
|
||||
label="نام محور"
|
||||
placeholder={"نام محور را وارد کنید"}
|
||||
placeholder={"نام محور فارسی را وارد کنید"}
|
||||
fullWidth
|
||||
size="small"
|
||||
error={error}
|
||||
helperText={error?.message}
|
||||
InputLabelProps={{ shrink: true }}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@@ -144,17 +146,18 @@ const DamageInfo = ({ control, setValue, errors }) => {
|
||||
name="driver_name"
|
||||
control={control}
|
||||
render={({ field, fieldState: { error } }) => (
|
||||
<TextField
|
||||
<PersianTextField
|
||||
value={field.value}
|
||||
variant="outlined"
|
||||
name="driver_name"
|
||||
onChange={field.onChange}
|
||||
fieldOnChange={field.onChange}
|
||||
label="نام و نام خانوادگی راننده"
|
||||
placeholder={"نام و نام خانوادگی راننده را وارد کنید"}
|
||||
placeholder={"نام و نام خانوادگی فارسی را وارد کنید"}
|
||||
fullWidth
|
||||
size="small"
|
||||
error={error}
|
||||
helperText={error?.message}
|
||||
InputLabelProps={{ shrink: true }}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@@ -45,7 +45,7 @@ const OperatorCreateForm = ({ open, setOpen, mutate }) => {
|
||||
mutate();
|
||||
setOpen(false);
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
const defaultData = {
|
||||
accident_date: "",
|
||||
@@ -74,12 +74,14 @@ const OperatorCreateForm = ({ open, setOpen, mutate }) => {
|
||||
};
|
||||
return (
|
||||
<Dialog open={open} fullWidth maxWidth="md">
|
||||
<CreateFormContent
|
||||
defaultData={defaultData}
|
||||
SubmitDamage={SubmitCreateDamage}
|
||||
setOpen={setOpen}
|
||||
mutate={mutate}
|
||||
/>
|
||||
{open && (
|
||||
<CreateFormContent
|
||||
defaultData={defaultData}
|
||||
SubmitDamage={SubmitCreateDamage}
|
||||
setOpen={setOpen}
|
||||
mutate={mutate}
|
||||
/>
|
||||
)}
|
||||
</Dialog>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { Box, Button, Chip, DialogActions, DialogContent, Divider, Grid, Typography } from "@mui/material";
|
||||
import PaymentIcon from "@mui/icons-material/Payment";
|
||||
import WebAssetIcon from "@mui/icons-material/WebAsset";
|
||||
import RequestQuoteIcon from "@mui/icons-material/RequestQuote";
|
||||
import ReceiptLongIcon from "@mui/icons-material/ReceiptLong";
|
||||
import { useReducer, useState } from "react";
|
||||
import { CHECK_PAYMENT_STATUS, CREATE_FACTOR_DAMAGE, SEND_SMS_AGAIN } from "@/core/utils/routes";
|
||||
import useRequest from "@/lib/hooks/useRequest";
|
||||
import PaymentIcon from "@mui/icons-material/Payment";
|
||||
import ReceiptLongIcon from "@mui/icons-material/ReceiptLong";
|
||||
import RequestQuoteIcon from "@mui/icons-material/RequestQuote";
|
||||
import WebAssetIcon from "@mui/icons-material/WebAsset";
|
||||
import { Alert, Box, Button, Chip, DialogActions, DialogContent, Divider, Grid, Stack, Typography } from "@mui/material";
|
||||
import { useReducer, useState } from "react";
|
||||
|
||||
const initialState = {
|
||||
submittingCreateFactor: false,
|
||||
@@ -66,7 +66,7 @@ const CreateFactorContent = ({ row, mutate, rowId, setOpenCreateFactorDialog })
|
||||
|
||||
return (
|
||||
<>
|
||||
<DialogContent>
|
||||
<DialogContent dividers>
|
||||
<Grid container spacing={3} sx={{ alignItems: "center", justifyContent: "space-around" }}>
|
||||
<Grid item xs={12} sm={12} sx={{ display: "flex", alignItems: "center" }}>
|
||||
<Box sx={{ display: "flex", alignItems: "center" }}>
|
||||
@@ -134,18 +134,14 @@ const CreateFactorContent = ({ row, mutate, rowId, setOpenCreateFactorDialog })
|
||||
</Grid>
|
||||
{!factorCreated && (
|
||||
<Grid item xs={12}>
|
||||
<Box sx={{ display: "flex", alignItems: "center", mt: 2 }}>
|
||||
<Typography sx={{ color: "red", mr: 1 }}>*</Typography>
|
||||
<Typography variant="body2" sx={{ color: "grey.700" }}>
|
||||
پس از ایجاد فاکتور امکان تغییر در اطلاعات کاربر و مبالغ وجود نخواهد داشت.
|
||||
</Typography>
|
||||
</Box>
|
||||
<Box sx={{ display: "flex", alignItems: "center", mt: 1 }}>
|
||||
<Typography sx={{ color: "red", mr: 1 }}>*</Typography>
|
||||
<Typography variant="body2" sx={{ color: "grey.700" }}>
|
||||
لینک پرداخت فاکتور به شماره {row.original?.driver_phone_number} ارسال خواهد شد.
|
||||
</Typography>
|
||||
</Box>
|
||||
<Stack spacing={1}>
|
||||
<Alert severity="warning">
|
||||
بعد از صدور فاکتور، ویرایش اطلاعات کاربر و مبالغ امکانپذیر نخواهد بود.
|
||||
</Alert>
|
||||
<Alert severity="info">
|
||||
لینک پرداخت فاکتور به شماره {row.original?.driver_phone_number} ارسال می شود.
|
||||
</Alert>
|
||||
</Stack>
|
||||
</Grid>
|
||||
)}
|
||||
</Grid>
|
||||
@@ -197,7 +193,7 @@ const CreateFactorContent = ({ row, mutate, rowId, setOpenCreateFactorDialog })
|
||||
color="primary"
|
||||
disabled={state.submittingCreateFactor}
|
||||
>
|
||||
{state.submittingCreateFactor ? "درحال ایجاد فاکتور..." : "ایجاد فاکتور"}
|
||||
{state.submittingCreateFactor ? "درحال صدور فاکتور..." : "صدور فاکتور"}
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
|
||||
@@ -8,7 +8,7 @@ const CreateFactor = ({ row, rowId, mutate }) => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<Tooltip title="ایجاد فاکتور">
|
||||
<Tooltip title={row.original?.status == 2 ? "صدور فاکتور" : 'استعلام پرداخت'}>
|
||||
<IconButton color="primary" onClick={() => setOpenCreateFactorDialog(true)}>
|
||||
<ReceiptLongIcon />
|
||||
</IconButton>
|
||||
@@ -25,13 +25,15 @@ const CreateFactor = ({ row, rowId, mutate }) => {
|
||||
maxWidth={"sm"}
|
||||
scroll="paper"
|
||||
>
|
||||
<DialogTitle sx={{ fontSize: "large" }}>مدیریت پرداخت</DialogTitle>
|
||||
<CreateFactorContent
|
||||
setOpenCreateFactorDialog={setOpenCreateFactorDialog}
|
||||
rowId={rowId}
|
||||
mutate={mutate}
|
||||
row={row}
|
||||
/>
|
||||
<DialogTitle sx={{ fontSize: "large" }}>{row.original?.status == 2 ? "صدور فاکتور" : 'استعلام پرداخت'}</DialogTitle>
|
||||
{openCreateFactorDialog && (
|
||||
<CreateFactorContent
|
||||
setOpenCreateFactorDialog={setOpenCreateFactorDialog}
|
||||
rowId={rowId}
|
||||
mutate={mutate}
|
||||
row={row}
|
||||
/>
|
||||
)}
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -30,7 +30,7 @@ const DaghiPayment = ({ control }) => {
|
||||
render={({ field }) => <Radio {...field} value="no_daghi" />}
|
||||
/>
|
||||
}
|
||||
label="صورتجلسه تحویل داغی به انبار (بیمه) ندارد"
|
||||
label="صورتجلسه تحویل داغی به انبار ندارد"
|
||||
/>
|
||||
<FormControlLabel
|
||||
value="has_daghi"
|
||||
@@ -41,7 +41,7 @@ const DaghiPayment = ({ control }) => {
|
||||
render={({ field }) => <Radio {...field} value="has_daghi" />}
|
||||
/>
|
||||
}
|
||||
label="صورتجلسه تحویل داغی به انبار (بیمه) دارد"
|
||||
label="صورتجلسه تحویل داغی به انبار دارد"
|
||||
/>
|
||||
</Stack>
|
||||
</RadioGroup>
|
||||
|
||||
@@ -128,7 +128,7 @@ const RegisterInsuranceContent = ({ setOpenRegisterInsuranceDialog, row, mutate,
|
||||
mutate();
|
||||
setOpenRegisterInsuranceDialog(false);
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
return (
|
||||
<StyledForm onSubmit={handleSubmit(onSubmitBase)}>
|
||||
@@ -192,7 +192,7 @@ const RegisterInsuranceContent = ({ setOpenRegisterInsuranceDialog, row, mutate,
|
||||
disabled={isSubmitting}
|
||||
endIcon={<BeenhereIcon />}
|
||||
>
|
||||
{isSubmitting ? "در حال ثبت فیش" : "ثبت فیش"}
|
||||
{isSubmitting ? "در حال ثبت" : "ثبت"}
|
||||
</Button>
|
||||
)}
|
||||
</DialogActions>
|
||||
|
||||
@@ -24,12 +24,14 @@ const RegisterInsurance = ({ row, mutate, rowId }) => {
|
||||
maxWidth={"sm"}
|
||||
scroll="paper"
|
||||
>
|
||||
<RegisterInsuranceContent
|
||||
rowId={rowId}
|
||||
mutate={mutate}
|
||||
row={row}
|
||||
setOpenRegisterInsuranceDialog={setOpenRegisterInsuranceDialog}
|
||||
/>
|
||||
{openRegisterInsuranceDialog && (
|
||||
<RegisterInsuranceContent
|
||||
rowId={rowId}
|
||||
mutate={mutate}
|
||||
row={row}
|
||||
setOpenRegisterInsuranceDialog={setOpenRegisterInsuranceDialog}
|
||||
/>
|
||||
)}
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -127,8 +127,8 @@ const OperatorList = () => {
|
||||
props.dependencyFieldValue?.value === ""
|
||||
? "empty"
|
||||
: loadingEdaratList
|
||||
? "loading"
|
||||
: props.filterParameters.value
|
||||
? "loading"
|
||||
: props.filterParameters.value
|
||||
}
|
||||
columnSelectOption={getColumnSelectOptions}
|
||||
/>
|
||||
@@ -361,7 +361,7 @@ const OperatorList = () => {
|
||||
},
|
||||
{
|
||||
accessorKey: "status",
|
||||
header: "اخرین وضعیت",
|
||||
header: "وضعیت",
|
||||
id: "status",
|
||||
enableColumnFilter: true,
|
||||
datatype: "numeric",
|
||||
|
||||
@@ -24,7 +24,9 @@ const DeleteDialog = ({ rowId, mutate }) => {
|
||||
maxWidth={"md"}
|
||||
>
|
||||
<DialogTitle>حذف فعالیت</DialogTitle>
|
||||
<DeleteContent rowId={rowId} mutate={mutate} setOpenDeleteDialog={setOpenDeleteDialog} />
|
||||
{openDeleteDialog && (
|
||||
<DeleteContent rowId={rowId} mutate={mutate} setOpenDeleteDialog={setOpenDeleteDialog} />
|
||||
)}
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -26,12 +26,12 @@ const ImageDialog = ({ images }) => {
|
||||
scroll="paper"
|
||||
>
|
||||
<DialogTitle sx={{ fontSize: "large" }}>تصاویر</DialogTitle>
|
||||
<DialogContent>
|
||||
<Paper elevation={0}>
|
||||
{openImageDialog && (
|
||||
<DialogContent>
|
||||
<ImageFormContent image={images[1]} title={"تصویر تصادف"} />
|
||||
<ImageFormContent image={images[0]} title={"تصویر تصادف"} />
|
||||
</Paper>
|
||||
</DialogContent>
|
||||
</DialogContent>
|
||||
)}
|
||||
<DialogActions>
|
||||
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary">
|
||||
بستن
|
||||
|
||||
@@ -24,13 +24,15 @@ const LocationForm = ({ start_lat, start_lng, end_lat, end_lng }) => {
|
||||
maxWidth={"md"}
|
||||
>
|
||||
<DialogTitle>موقعیت</DialogTitle>
|
||||
<LocationFormContent
|
||||
start_lat={start_lat}
|
||||
start_lng={start_lng}
|
||||
end_lat={end_lat}
|
||||
end_lng={end_lng}
|
||||
setOpenLocationDialog={setOpenLocationDialog}
|
||||
/>
|
||||
{openLocationDialog && (
|
||||
<LocationFormContent
|
||||
start_lat={start_lat}
|
||||
start_lng={start_lng}
|
||||
end_lat={end_lat}
|
||||
end_lng={end_lng}
|
||||
setOpenLocationDialog={setOpenLocationDialog}
|
||||
/>
|
||||
)}
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
import { Button, DialogActions, DialogContent, Stack, Typography } from "@mui/material";
|
||||
import React, { useState } from "react";
|
||||
import useRequest from "@/lib/hooks/useRequest";
|
||||
import { GET_POLICERAH_PAGE } from "@/core/utils/routes";
|
||||
import { GET_POLICERAH, GET_POLICERAH_PAGE } from "@/core/utils/routes";
|
||||
|
||||
const PoliceRahLetterContent = ({ setOpenPoliceRahDialog, rowId, mutate }) => {
|
||||
const [submitting, setSubmitting] = useState(false);
|
||||
const requestServer = useRequest({ notificationSuccess: true });
|
||||
const requestServer = useRequest();
|
||||
const handleClick = () => {
|
||||
setSubmitting(true);
|
||||
const url = `https://rms.witel.ir/v2/receipt/document-release/${rowId}`;
|
||||
requestServer(`${GET_POLICERAH_PAGE}/${rowId}`, "get")
|
||||
requestServer(`${GET_POLICERAH}/${rowId}`, "get")
|
||||
.then(() => {
|
||||
mutate();
|
||||
window.open(url, "_blank");
|
||||
window.open(`${GET_POLICERAH_PAGE}/${rowId}`, "_blank");
|
||||
setSubmitting(false);
|
||||
setOpenPoliceRahDialog(false);
|
||||
})
|
||||
|
||||
@@ -24,7 +24,9 @@ const PoliceRahLetter = ({ rowId, mutate }) => {
|
||||
scroll="paper"
|
||||
>
|
||||
<DialogTitle sx={{ fontSize: "large" }}>صدور نامه پلیس راه</DialogTitle>
|
||||
<PoliceRahLetterContent mutate={mutate} rowId={rowId} setOpenPoliceRahDialog={setOpenPoliceRahDialog} />
|
||||
{openPoliceRahDialog && (
|
||||
<PoliceRahLetterContent mutate={mutate} rowId={rowId} setOpenPoliceRahDialog={setOpenPoliceRahDialog} />
|
||||
)}
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
import { Button, DialogActions, DialogContent, Stack, Typography } from "@mui/material";
|
||||
import React, { useState } from "react";
|
||||
import useRequest from "@/lib/hooks/useRequest";
|
||||
import { GET_INSURANCE_PAGE } from "@/core/utils/routes";
|
||||
import { GET_INSURANCE, GET_INSURANCE_PAGE } from "@/core/utils/routes";
|
||||
|
||||
const SendToInsuranceContent = ({ setOpenSendInsuranceDialog, rowId, mutate }) => {
|
||||
const [submitting, setSubmitting] = useState(false);
|
||||
const requestServer = useRequest({ notificationSuccess: true });
|
||||
const requestServer = useRequest();
|
||||
const handleClick = () => {
|
||||
setSubmitting(true);
|
||||
const url = `https://rms.witel.ir/v2/receipt/send-to-insurance/${rowId}`;
|
||||
requestServer(`${GET_INSURANCE_PAGE}/${rowId}`, "get")
|
||||
requestServer(`${GET_INSURANCE}/${rowId}`, "get")
|
||||
.then(() => {
|
||||
mutate();
|
||||
window.open(url, "_blank");
|
||||
window.open(`${GET_INSURANCE_PAGE}/${rowId}`, "_blank");
|
||||
setSubmitting(false);
|
||||
setOpenSendInsuranceDialog(false);
|
||||
})
|
||||
|
||||
@@ -24,11 +24,13 @@ const SendToInsurance = ({ rowId, mutate }) => {
|
||||
scroll="paper"
|
||||
>
|
||||
<DialogTitle sx={{ fontSize: "large" }}>نامه بیمه</DialogTitle>
|
||||
<SendToInsuranceContent
|
||||
mutate={mutate}
|
||||
rowId={rowId}
|
||||
setOpenSendInsuranceDialog={setOpenSendInsuranceDialog}
|
||||
/>
|
||||
{openSendInsuranceDialog && (
|
||||
<SendToInsuranceContent
|
||||
mutate={mutate}
|
||||
rowId={rowId}
|
||||
setOpenSendInsuranceDialog={setOpenSendInsuranceDialog}
|
||||
/>
|
||||
)}
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -5,22 +5,28 @@ import DeleteDialog from "./DeleteDialog";
|
||||
import SendToInsurance from "./SendToInsurance";
|
||||
import PoliceRahLetter from "./PoliceRahLetter";
|
||||
import EditForm from "../Form/EditForm";
|
||||
import { usePermissions } from "@/lib/hooks/usePermissions";
|
||||
|
||||
const RowActions = ({ row, mutate }) => {
|
||||
const { data: userPermissions } = usePermissions();
|
||||
const hasDeletePermission = userPermissions.some(item => ['delete-receipt', 'delete-receipt-province'].includes(item))
|
||||
const hasEditPermission = userPermissions.some(item => ['edit-receipt', 'edit-receipt-province'].includes(item))
|
||||
return (
|
||||
<Box sx={{ display: "flex", gap: 1 }}>
|
||||
{[0, 1, 2].includes(row.original?.status) && <SendToInsurance mutate={mutate} rowId={row.getValue("id")} />}
|
||||
{[1, 2].includes(row.original?.status) && (
|
||||
<RegisterInsurance mutate={mutate} row={row} rowId={row.getValue("id")} />
|
||||
)}
|
||||
{[4, 5].includes(row.original?.status) && <PoliceRahLetter mutate={mutate} rowId={row.getValue("id")} />}
|
||||
{[2, 3].includes(row.original?.status) && (
|
||||
<CreateFactor row={row} rowId={row.getValue("id")} mutate={mutate} />
|
||||
)}
|
||||
{[4, 5].includes(row.original?.status) && <PoliceRahLetter mutate={mutate} rowId={row.getValue("id")} />}
|
||||
{[0, 1, 2].includes(row.original?.status) && (
|
||||
{[1, 2].includes(row.original?.status) && (
|
||||
<RegisterInsurance mutate={mutate} row={row} rowId={row.getValue("id")} />
|
||||
)}
|
||||
{[0, 1, 2].includes(row.original?.status) && <SendToInsurance mutate={mutate} rowId={row.getValue("id")} />}
|
||||
{hasEditPermission && [0, 1, 2].includes(row.original?.status) && (
|
||||
<EditForm row={row} mutate={mutate} rowId={row.getValue("id")} />
|
||||
)}
|
||||
<DeleteDialog mutate={mutate} rowId={row.getValue("id")} />
|
||||
{hasDeletePermission && (
|
||||
<DeleteDialog mutate={mutate} rowId={row.getValue("id")} />
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
import { Box } from "@mui/material";
|
||||
import OperatorCreate from "./Actions/create";
|
||||
import PrintExcel from "./ExcelPrint";
|
||||
import { usePermissions } from "@/lib/hooks/usePermissions";
|
||||
|
||||
const Toolbar = ({ table, filterData, mutate }) => {
|
||||
const { data: userPermissions } = usePermissions();
|
||||
const hasAddPermission = userPermissions.some(item => ['add-receipt', 'add-receipt-province'].includes(item))
|
||||
return (
|
||||
<Box sx={{ display: "flex", gap: 1 }}>
|
||||
<PrintExcel table={table} filterData={filterData} />
|
||||
<OperatorCreate mutate={mutate} />
|
||||
{hasAddPermission && (
|
||||
<OperatorCreate mutate={mutate} />
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { GET_CMMS_MACHINE_ROAD_ITEM, UPDATE_ROAD_ITEMS } from "@/core/utils/routes";
|
||||
import { Dialog, DialogTitle, Typography } from "@mui/material";
|
||||
import EditFormContent from "./EditFormContent";
|
||||
import useRequest from "@/lib/hooks/useRequest";
|
||||
import { useEffect, useState } from "react";
|
||||
import DialogLoading from "@/core/components/DialogLoading";
|
||||
import { GET_CMMS_MACHINE_ROAD_ITEM, GET_IMAGES_ROAD_ITEM, GET_RAHDARAN_ROAD_ITEM, UPDATE_ROAD_ITEMS } from "@/core/utils/routes";
|
||||
import useRequest from "@/lib/hooks/useRequest";
|
||||
import { Typography } from "@mui/material";
|
||||
import { useEffect, useState } from "react";
|
||||
import EditFormContent from "./EditFormContent";
|
||||
|
||||
const EditController = ({ rowId, mutate, setOpenEditDialog, openEditDialog, row }) => {
|
||||
const requestServer = useRequest();
|
||||
@@ -76,7 +76,7 @@ const EditController = ({ rowId, mutate, setOpenEditDialog, openEditDialog, row
|
||||
mutate();
|
||||
setOpenEditDialog(false);
|
||||
})
|
||||
.catch((error) => {});
|
||||
.catch((error) => { });
|
||||
};
|
||||
|
||||
return loadingImages || loadingCmmsMachine || loadingRahdaran ? (
|
||||
|
||||
23
src/core/components/PersianTextField.jsx
Normal file
23
src/core/components/PersianTextField.jsx
Normal file
@@ -0,0 +1,23 @@
|
||||
import usePersianInput from "@/lib/hooks/usePersianInput";
|
||||
import { TextField } from "@mui/material";
|
||||
import { useRef } from "react";
|
||||
|
||||
const PersianTextField = (props) => {
|
||||
const { fieldOnChange, ...rest } = props;
|
||||
const inputRef = useRef(null);
|
||||
|
||||
const handleChange = (value) => {
|
||||
fieldOnChange(value);
|
||||
}
|
||||
|
||||
usePersianInput(inputRef, handleChange);
|
||||
|
||||
return (
|
||||
<TextField
|
||||
ref={inputRef}
|
||||
{...rest}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export default PersianTextField
|
||||
@@ -4,6 +4,8 @@ function SelectBox({
|
||||
name,
|
||||
value,
|
||||
onChange,
|
||||
isDependency = false,
|
||||
dependencyLabel = '',
|
||||
onBlur,
|
||||
selectors,
|
||||
label,
|
||||
@@ -28,10 +30,12 @@ function SelectBox({
|
||||
}}
|
||||
onBlur={onBlur}
|
||||
>
|
||||
{isLoading ? (
|
||||
<MenuItem sx={{ color: "primary.main" }}>درحال دریافت اطلاعات...</MenuItem>
|
||||
{isDependency ? (
|
||||
<MenuItem value={'dependency'} sx={{ color: "primary.main" }}>{dependencyLabel}</MenuItem>
|
||||
) : isLoading ? (
|
||||
<MenuItem value={'loading'} sx={{ color: "primary.main" }}>درحال دریافت اطلاعات...</MenuItem>
|
||||
) : errorEcured ? (
|
||||
<MenuItem sx={{ color: "secondary.main" }}>خطا در دریافت اطلاعات!!!</MenuItem>
|
||||
<MenuItem value={'error'} sx={{ color: "secondary.main" }}>خطا در دریافت اطلاعات!!!</MenuItem>
|
||||
) : (
|
||||
selectors.map((selector) => {
|
||||
return (
|
||||
|
||||
20
src/core/utils/nationalCodeValidation.js
Normal file
20
src/core/utils/nationalCodeValidation.js
Normal file
@@ -0,0 +1,20 @@
|
||||
function validateNationalCode(code) {
|
||||
const invalidCodes = ["1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666", "7777777777", "8888888888", "9999999999"];
|
||||
if (invalidCodes.includes(code)) return false;
|
||||
|
||||
const L = code.length;
|
||||
if (L < 8 || parseInt(code, 10) === 0) return false;
|
||||
|
||||
code = code.padStart(10, '0');
|
||||
if (parseInt(code.substr(3, 6), 10) === 0) return false;
|
||||
|
||||
const c = parseInt(code.charAt(9), 10);
|
||||
let s = 0;
|
||||
for (let i = 0; i < 9; i++) {
|
||||
s += parseInt(code.charAt(i), 10) * (10 - i);
|
||||
}
|
||||
s = s % 11;
|
||||
return (s < 2 && c === s) || (s >= 2 && c === (11 - s));
|
||||
}
|
||||
|
||||
export default validateNationalCode;
|
||||
@@ -97,8 +97,10 @@ export const SEND_SMS_AGAIN = api + "/api/v3/receipts/send_sms_again";
|
||||
export const EXPORT_DAMAGES_OPERATOR_LIST = api + "/api/v3/receipts/excel_report";
|
||||
export const GET_DAMAGE_ITEM_DETAILS = api + "/api/v3/receipts";
|
||||
export const UPDATE_DAMAGE_ITEM = api + "/api/v3/receipts";
|
||||
export const GET_INSURANCE_PAGE = api + "/api/v3/receipts/generate_insurance_letter";
|
||||
export const GET_POLICERAH_PAGE = api + "/api/v3/receipts/generate_police_document";
|
||||
export const GET_INSURANCE = api + "/api/v3/receipts/generate_insurance_letter";
|
||||
export const GET_INSURANCE_PAGE = api + "/v2/receipt/send-to-insurance";
|
||||
export const GET_POLICERAH = api + "/api/v3/receipts/generate_insurance_letter";
|
||||
export const GET_POLICERAH_PAGE = api + "/v2/receipt/document-release";
|
||||
|
||||
// recept report
|
||||
export const GET_COUNTRY_RECEIPT_REPORT = api + "/api/v3/receipt_reports/country_report";
|
||||
|
||||
Reference in New Issue
Block a user