fixed bug

This commit is contained in:
AmirHossein Mahmoodi
2025-05-31 14:50:00 +03:30
parent b304cfc2de
commit 1eb89c7c82
6 changed files with 284 additions and 131 deletions

View File

@@ -32,29 +32,48 @@ const validationSchema = object({
province_id: number().required("لطفا استان را وارد کنید!!!"),
city_id: number().required("لطفا شهرستان را وارد کنید!!!"),
axis_name: string().required("لطفا نام محور را وارد کنید!!!"),
driver_name: string().required("لطفا نام و نام خانوادگی را وارد کنید!!!"),
driver_name: string().when('isForeign', {
is: "0",
then: (schema) => schema.required("لطفا نام و نام خانوادگی را وارد کنید!!!"),
}),
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("لطفا کد ملی را وارد کنید!!!"),
.when('isForeign', {
is: "0",
then: (schema) => schema.matches(/^09\d{9}$/, "شماره موبایل باید با 09 شروع شده و 11 رقم باشد")
.required("لطفا تلفن همراه را وارد کنید!!!"),
}),
national_code: mixed().when('isForeign', {
is: "0",
then: (schema) => schema.test("max", "کد ملی باید شامل 10 رقم باشد", (value) => value.toString().length === 10)
.test("validation", "کد ملی صحیح نمی باشد", (value) => validateNationalCode(value))
.required("لطفا کد ملی را وارد کنید!!!"),
}),
start_point: mixed()
.test("start-point-required", "لطفاً نقطه تصادف را مشخص کنید!", function (value) {
return !!value;
})
.required("لطفاً نقطه تصادف را مشخص کنید!"),
plate_part1: mixed()
.test("max", "2رقم", (value) => value.toString().length === 2)
.required("plate_part1 الزامیست"),
plate_part2: mixed().required("plate_part2 الزامیست"),
plate_part3: mixed()
.test("max", "3رقم", (value) => value.toString().length === 3)
.required("plate_part3الزامیست"),
plate_part4: mixed()
.test("max", "2رقم", (value) => value.toString().length === 2)
.required("plate_part4الزامیست"),
.when('isForeign', {
is: "0",
then: (schema) => schema.test("max", "2رقم", (value) => value.toString().length === 2)
.required("plate_part1 الزامیست"),
}),
plate_part2: mixed().when('isForeign', {
is: "0",
then: (schema) => schema.required("plate_part2 الزامیست"),
}),
plate_part3: mixed().when('isForeign', {
is: "0",
then: (schema) => schema.test("max", "3رقم", (value) => value.toString().length === 3)
.required("plate_part3الزامیست"),
}),
plate_part4: mixed().when('isForeign', {
is: "0",
then: (schema) => schema.test("max", "2رقم", (value) => value.toString().length === 2)
.required("plate_part4الزامیست"),
}),
damage_picture1: mixed().nullable().required("لطفا عکس تصادف را بارگذاری کنید!"),
damage_picture2: mixed().nullable().required("لطفا عکس تصادف را بارگذاری کنید!"),
police_serial: string().when("radio_button", {
@@ -75,6 +94,7 @@ const validationSchema = object({
const CreateFormContent = ({ setOpen, SubmitDamage, defaultData }) => {
const defaultValues = {
isForeign: defaultData.isForeign,
accident_date: defaultData.accident_date,
accident_time: defaultData.accident_time,
accident_type: defaultData.accident_type,

View File

@@ -1,5 +1,5 @@
import { Controller, useWatch } from "react-hook-form";
import { Grid, Stack, TextField } from "@mui/material";
import { Grid, Stack, TextField, ToggleButton, ToggleButtonGroup } from "@mui/material";
import MuiDatePicker from "@/core/components/MuiDatePicker";
import MuiTimePicker from "@/core/components/MuiTimePicker";
import SelectBox from "@/core/components/SelectBox";
@@ -11,104 +11,129 @@ import LogesticController from "./LogesticController";
const DamageInfo = ({ control, setValue, errors }) => {
const StartPoint = useWatch({ control, name: "start_point" });
const IsForeign = useWatch({ control, name: "isForeign" });
return (
<Stack>
<LogesticController control={control} />
<Grid sx={{ mt: 2 }} container spacing={2}>
<Grid item xs={12} md={6}>
<Controller
name="driver_name"
control={control}
render={({ field, fieldState: { error } }) => (
<PersianTextField
value={field.value}
variant="outlined"
<Stack sx={{ mt: 2 }} alignItems={'center'} justifyContent={'center'}>
<Controller
name="isForeign"
control={control}
render={({ field, fieldState: { error } }) => (
<ToggleButtonGroup
value={field.value}
exclusive
onChange={(event, newAlignment) => field.onChange(newAlignment)}
>
<ToggleButton value="0">
ناوگان داخلی
</ToggleButton>
<ToggleButton value="1">
ناوگان خارجی
</ToggleButton>
</ToggleButtonGroup>
)}
/>
</Stack>
{IsForeign == "0" && (
<>
<Grid sx={{ mt: 2 }} container spacing={2}>
<Grid item xs={12} md={6}>
<Controller
name="driver_name"
onChange={field.onChange}
label="نام و نام خانوادگی راننده"
placeholder={"نام و نام خانوادگی فارسی را وارد کنید"}
fullWidth
size="small"
error={error}
helperText={error?.message}
InputLabelProps={{ shrink: true }}
control={control}
render={({ field, fieldState: { error } }) => (
<PersianTextField
value={field.value}
variant="outlined"
name="driver_name"
onChange={field.onChange}
label="نام و نام خانوادگی راننده"
placeholder={"نام و نام خانوادگی فارسی را وارد کنید"}
fullWidth
size="small"
error={error}
helperText={error?.message}
InputLabelProps={{ shrink: true }}
/>
)}
/>
)}
/>
</Grid>
<Grid item xs={12} md={6}>
<Controller
name="national_code"
control={control}
render={({ field, fieldState: { error } }) => (
<TextField
value={field.value}
variant="outlined"
</Grid>
<Grid item xs={12} md={6}>
<Controller
name="national_code"
type={"tel"}
inputProps={{
inputMode: "number",
min: 0,
pattern: "[0-9]*",
}}
onChange={(event) => {
const inputValue = event.target.value;
if (isNaN(Number(inputValue))) {
return;
}
field.onChange(inputValue);
}}
label="کد ملی راننده"
placeholder={"کد ملی راننده را وارد کنید"}
fullWidth
size="small"
error={error}
helperText={error?.message}
InputLabelProps={{ shrink: true }}
control={control}
render={({ field, fieldState: { error } }) => (
<TextField
value={field.value}
variant="outlined"
name="national_code"
type={"tel"}
inputProps={{
inputMode: "number",
min: 0,
pattern: "[0-9]*",
}}
onChange={(event) => {
const inputValue = event.target.value;
if (isNaN(Number(inputValue))) {
return;
}
field.onChange(inputValue);
}}
label="کد ملی راننده"
placeholder={"کد ملی راننده را وارد کنید"}
fullWidth
size="small"
error={error}
helperText={error?.message}
InputLabelProps={{ shrink: true }}
/>
)}
/>
)}
/>
</Grid>
</Grid>
<Grid sx={{ mt: 2 }} container spacing={2}>
<Grid item xs={12} md={6}>
<Controller
name="phone_number"
control={control}
render={({ field, fieldState: { error } }) => (
<TextField
value={field.value}
variant="outlined"
</Grid>
</Grid>
<Grid sx={{ mt: 2 }} container spacing={2}>
<Grid item xs={12} md={6}>
<Controller
name="phone_number"
type={"tel"}
inputProps={{
inputMode: "number",
min: 0,
pattern: "[0-9]*",
}}
onChange={(event) => {
const inputValue = event.target.value;
if (isNaN(Number(inputValue))) {
return;
}
field.onChange(inputValue);
}}
label="شماره موبایل راننده"
placeholder={"شماره موبایل راننده را وارد کنید"}
fullWidth
size="small"
error={error}
helperText={error?.message}
InputLabelProps={{ shrink: true }}
control={control}
render={({ field, fieldState: { error } }) => (
<TextField
value={field.value}
variant="outlined"
name="phone_number"
type={"tel"}
inputProps={{
inputMode: "number",
min: 0,
pattern: "[0-9]*",
}}
onChange={(event) => {
const inputValue = event.target.value;
if (isNaN(Number(inputValue))) {
return;
}
field.onChange(inputValue);
}}
label="شماره موبایل راننده"
placeholder={"شماره موبایل راننده را وارد کنید"}
fullWidth
size="small"
error={error}
helperText={error?.message}
InputLabelProps={{ shrink: true }}
/>
)}
/>
)}
/>
</Grid>
<Grid item xs={12} md={6}>
<PlateNumber control={control} />
</Grid>
</Grid>
</Grid>
<Grid item xs={12} md={6}>
<PlateNumber control={control} />
</Grid>
</Grid>
</>
)}
<Grid sx={{ mt: 1 }} container spacing={2}>
<Grid item xs={12} md={4}>
<Controller

View File

@@ -22,10 +22,13 @@ const OperatorCreateForm = ({ open, setOpen, mutate }) => {
formData.append("province_id", result.province_id);
formData.append("city_id", result.city_id);
formData.append("axis_name", result.axis_name);
formData.append("driver_name", result.driver_name);
formData.append("driver_phone_number", result.phone_number);
formData.append("driver_national_code", result.national_code);
formData.append("plaque", PlateNumber);
formData.append("is_foreign", result.isForeign);
if (result.isForeign == '0') {
formData.append("driver_name", result.driver_name);
formData.append("driver_phone_number", result.phone_number);
formData.append("driver_national_code", result.national_code);
formData.append("plaque", PlateNumber);
}
formData.append("damage_picture1", result.damage_picture1);
formData.append("damage_picture2", result.damage_picture2);
formData.append("lat", result.start_point.lat);
@@ -51,9 +54,10 @@ const OperatorCreateForm = ({ open, setOpen, mutate }) => {
mutate();
setOpen(false);
})
.catch(() => {});
.catch(() => { });
};
const defaultData = {
isForeign: "0",
accident_date: "",
accident_time: "",
accident_type: "",

View File

@@ -21,7 +21,11 @@ const OperatorList = () => {
const { data: userPermissions } = usePermissions();
const hasCountryPermission = userPermissions?.includes("show-receipt");
const { user } = useAuth();
const foreginOptions = [
{ value: "", label: "همه ناوگان ها" },
{ value: 0, label: "داخلی" },
{ value: 1, label: "خارجی" },
];
const statusOptions = [
{ value: "", label: "همه وضعیت ها" },
{ value: 0, label: "بدون اقدام" },
@@ -158,8 +162,8 @@ const OperatorList = () => {
props.dependencyFieldValue?.value === ""
? "empty"
: loadingCityList
? "loading"
: props.filterParameters.value
? "loading"
: props.filterParameters.value
}
columnSelectOption={getColumnSelectOptions}
/>
@@ -215,6 +219,25 @@ const OperatorList = () => {
grow: false,
size: 120,
},
{
accessorKey: "is_foreign",
header: "نوع ناوگان",
id: "is_foreign",
enableColumnFilter: true,
datatype: "numeric",
filterMode: "equals",
grow: false,
size: 100,
columnSelectOption: () => {
return foreginOptions.map((status) => ({
value: status.value,
label: status.label,
}));
},
Cell: ({ row }) => {
return <Typography variant={"body2"}>{row.original.is_foreign == "0" ? "داخلی" : "خارجی"}</Typography>;
},
},
{
accessorKey: "plaque",
header: "پلاک",
@@ -225,7 +248,7 @@ const OperatorList = () => {
enableSorting: false,
grow: false,
size: 100,
Cell: ({ renderedCellValue }) => <ShowPlate plate={renderedCellValue} />,
Cell: ({ row, renderedCellValue }) => row.original.is_foreign == "0" ? <ShowPlate plate={renderedCellValue} /> : '',
},
{
accessorKey: "accident_type",

View File

@@ -23,10 +23,10 @@ const RowActions = ({ row, mutate }) => {
<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) && (
{hasEditPermission && [0].includes(row.original?.status) && (
<EditForm row={row} mutate={mutate} rowId={row.getValue("id")} />
)}
{hasDeletePermission && <DeleteDialog mutate={mutate} rowId={row.getValue("id")} />}
{(hasDeletePermission && [0].includes(row.original?.status)) && <DeleteDialog mutate={mutate} rowId={row.getValue("id")} />}
</Box>
);
};

View File

@@ -18,30 +18,111 @@ const ReportLists = ({ data, specialFilter }) => {
size: 50,
},
{
accessorKey: "tedade",
header: "تعداد کل",
id: "tedade",
header: "تعداد خسارات ثبت شده",
id: 'countAll',
enableColumnFilter: false,
enableSorting: false,
datatype: "text",
grow: false,
size: 50,
muiTableBodyCellProps: {
sx: {
textAlign: "center",
borderLeft: "1px solid #e1e1e1",
py: 0,
"&:first-of-type": {
borderLeft: "unset",
columns: [
{
accessorKey: "tedade",
header: "کل",
id: "tedade",
enableColumnFilter: false,
enableSorting: false,
datatype: "text",
grow: false,
size: 50,
muiTableBodyCellProps: {
sx: {
textAlign: "center",
borderLeft: "1px solid #e1e1e1",
py: 0,
"&:first-of-type": {
borderLeft: "unset",
},
},
},
Cell: ({ renderedCellValue }) => {
return (renderedCellValue / 1).toLocaleString();
},
},
},
Cell: ({ renderedCellValue }) => {
return (renderedCellValue / 1).toLocaleString();
},
{
accessorKey: "egdam",
header: "در دست اقدام",
id: "egdam",
enableColumnFilter: false,
enableSorting: false,
datatype: "text",
grow: false,
size: 50,
muiTableBodyCellProps: {
sx: {
textAlign: "center",
borderLeft: "1px solid #e1e1e1",
py: 0,
"&:first-of-type": {
borderLeft: "unset",
},
},
},
Cell: ({ renderedCellValue }) => {
return (renderedCellValue / 1).toLocaleString();
},
},
{
accessorKey: "pardakht",
header: "در حال پرداخت",
id: "pardakht",
enableColumnFilter: false,
enableSorting: false,
datatype: "text",
grow: false,
size: 50,
muiTableBodyCellProps: {
sx: {
textAlign: "center",
borderLeft: "1px solid #e1e1e1",
py: 0,
"&:first-of-type": {
borderLeft: "unset",
},
},
},
Cell: ({ renderedCellValue }) => {
return (renderedCellValue / 1).toLocaleString();
},
},
{
accessorKey: "khatm",
header: "خاتمه یافته",
id: "khatm",
enableColumnFilter: false,
enableSorting: false,
datatype: "text",
grow: false,
size: 50,
muiTableBodyCellProps: {
sx: {
textAlign: "center",
borderLeft: "1px solid #e1e1e1",
py: 0,
"&:first-of-type": {
borderLeft: "unset",
},
},
},
Cell: ({ renderedCellValue }) => {
return (renderedCellValue / 1).toLocaleString();
},
},
]
},
{
header: "تعداد نحوه شناسایی خسارت",
id: 'police_rah_All',
enableColumnFilter: false,
enableSorting: false,
datatype: "text",
@@ -152,7 +233,7 @@ const ReportLists = ({ data, specialFilter }) => {
columns: [
{
accessorKey: "vasel_shode_final",
header: یش",
header: اکتور",
id: "vasel_shode_final",
enableColumnFilter: false,
enableSorting: false,