Feature/amiriis report road safety

This commit is contained in:
AmirHossein Mahmoodi
2025-08-27 08:12:37 +00:00
parent 81c0a6aa3b
commit 7db4268c76
31 changed files with 2421 additions and 888 deletions

View File

@@ -16,7 +16,11 @@ export const errorServerToast = (toastContainer) =>
<Box sx={{ display: "flex", alignItems: "center" }}>
<Dangerous color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Typography variant="caption">{"The request failed due to an internal error."}</Typography>
<Typography variant="caption">
{
"در پردازش درخواست مشکلی در سرور به‌وجود آمد. لطفاً بعداً دوباره تلاش کنید یا با پشتیبانی تماس بگیرید."
}
</Typography>
</Box>
</Box>
</Box>
@@ -46,7 +50,7 @@ export const errorUnauthorizedToast = (toastContainer) =>
<Box sx={{ display: "flex", alignItems: "center" }}>
<Dangerous color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Typography variant="caption">{"The user is not authorized to make the request."}</Typography>
<Typography variant="caption">{"شما مجوز لازم برای انجام این عملیات را ندارید."}</Typography>
</Box>
</Box>
</Box>
@@ -75,7 +79,7 @@ export const errorAccessDeniedToast = (message, toastContainer) =>
<Box sx={{ display: "flex", alignItems: "center" }}>
<Dangerous color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Typography variant="caption">{message || "Access Denied"}</Typography>
<Typography variant="caption">{message || "شما اجازه دسترسی به این بخش را ندارید."}</Typography>
</Box>
</Box>
</Box>
@@ -106,8 +110,7 @@ export const errorLogicToast = (message, toastContainer) =>
<Dangerous color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Typography variant="caption">
{message ||
"The request was well-formed but was unable to be followed due to semantic errors."}
{message || "درخواست شما معتبر است اما به دلیل اشکال در داده‌ها امکان انجام آن وجود ندارد."}
</Typography>
</Box>
</Box>
@@ -137,8 +140,7 @@ export const errorValidationToast = (message, toastContainer) =>
<Dangerous color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Typography variant="caption">
{message ||
"The request was well-formed but was unable to be followed due to semantic errors."}
{message || "اطلاعات وارد شده قابل پردازش نیست. لطفاً داده‌ها را بررسی و دوباره تلاش کنید."}
</Typography>
</Box>
</Box>
@@ -168,7 +170,7 @@ export const errorTooManyToast = (toastContainer) =>
<Dangerous color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Typography variant="caption">
{"Too many requests have been sent within a given time span."}
{"تعداد درخواست‌های شما بیش از حد مجاز است. لطفاً بعد از چند لحظه دوباره تلاش کنید."}
</Typography>
</Box>
</Box>
@@ -198,9 +200,7 @@ export const errorClientToast = (toastContainer) =>
<Dangerous color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Typography variant="caption">
{
"The API request is invalid or improperly formed. Consequently, the API server could not understand the request."
}
{"درخواست شما به‌درستی ارسال نشد. لطفاً داده‌های وارد شده را بررسی کنید."}
</Typography>
</Box>
</Box>

View File

@@ -0,0 +1,12 @@
export default function groupByEdareAxisStep(data) {
return data.reduce((acc, item) => {
const { edare_id, axis_type_id } = item;
if (!acc[edare_id]) acc[edare_id] = {};
if (!acc[edare_id][axis_type_id]) acc[edare_id][axis_type_id] = {};
acc[edare_id][axis_type_id] = { ...item };
return acc;
}, {});
}

View File

@@ -0,0 +1,12 @@
export default function groupByProvinceAxisStep(data) {
return data.reduce((acc, item) => {
const { province_id, axis_type_id } = item;
if (!acc[province_id]) acc[province_id] = {};
if (!acc[province_id][axis_type_id]) acc[province_id][axis_type_id] = {};
acc[province_id][axis_type_id] = { ...item };
return acc;
}, {});
}

View File

@@ -391,13 +391,43 @@ export const pageMenuDev = [
{
id: "safetyAndPrivacyManagmentReport",
label: "گزارش ها",
type: "page",
route: "/dashboard/road-safety/reports",
type: "menu",
icon: <AssessmentIcon sx={{ width: "inherit", height: "inherit" }} />,
permissions: [
"show-safety-and-privacy-operator-cartable",
"show-safety-and-privacy-operator-cartable-province",
"show-safety-and-privacy-operator-cartable-edarate-shahri",
hasSubitems: true,
Subitems: [
{
id: "safetyAndPrivacyManagmentReportConstructionActivity",
label: "بر اساس ساخت و ساز غیر مجاز",
type: "page",
route: "/dashboard/road-safety/reports/construction-activity",
permissions: [
"show-safety-and-privacy-operator-cartable",
"show-safety-and-privacy-operator-cartable-province",
"show-safety-and-privacy-operator-cartable-edarate-shahri",
],
},
{
id: "safetyAndPrivacyManagmentReportAccessRoad",
label: "بر اساس راه دسترسی غیر مجاز",
type: "page",
route: "/dashboard/road-safety/reports/access-road",
permissions: [
"show-safety-and-privacy-operator-cartable",
"show-safety-and-privacy-operator-cartable-province",
"show-safety-and-privacy-operator-cartable-edarate-shahri",
],
},
{
id: "safetyAndPrivacyManagmentReportUtilityPassingActivity",
label: "بر اساس عبور تاسیسات زیربنایی غیر مجاز",
type: "page",
route: "/dashboard/road-safety/reports/utility-passing-activity",
permissions: [
"show-safety-and-privacy-operator-cartable",
"show-safety-and-privacy-operator-cartable-province",
"show-safety-and-privacy-operator-cartable-edarate-shahri",
],
},
],
},
],

View File

@@ -161,10 +161,33 @@ export const GET_ROAD_SAFETY_CITY_ACTIVITY_REPORT =
api + "/api/v3/safety_and_privacy_report/operator/province_activity";
export const GET_ROAD_SAFETY_REPORT_MAP = api + "/api/v3/safety_and_privacy/map";
export const GET_ROAD_SAFETY_DETAILS = api + "/api/v3/safety_and_privacy/operator";
export const EXPORT_COUNTRY_ROAD_SAFETY_REPORT =
api + "/api/v3/safety_and_privacy_report/operator/country_excel_activity";
export const EXPORT_PROVINCE_ROAD_SAFETY_REPORT =
api + "/api/v3/safety_and_privacy_report/operator/province_excel_activity";
export const GET_ROAD_SAFETY_PROVINCE_ACTIVITY_ACCESS_ROAD_REPORT =
api + "/api/v3/safety_and_privacy/access_road/country_activity";
export const GET_ROAD_SAFETY_CITY_ACTIVITY_ACCESS_ROAD_REPORT =
api + "/api/v3/safety_and_privacy/access_road/province_activity";
export const EXPORT_ROAD_SAFETY_PROVINCE_ACTIVITY_ACCESS_ROAD_REPORTT =
api + "/api/v3/safety_and_privacy/access_road/country_excel_activity";
export const EXPORT_ROAD_SAFETY_CITY_ACTIVITY_ACCESS_ROAD_REPORT =
api + "/api/v3/safety_and_privacy/access_road/province_excel_activity";
export const GET_ROAD_SAFETY_PROVINCE_ACTIVITY_CONSTRUCTION_ACTIVITY_REPORT =
api + "/api/v3/safety_and_privacy/construction_activity/country_activity";
export const GET_ROAD_SAFETY_CITY_ACTIVITY_CONSTRUCTION_ACTIVITY_REPORT =
api + "/api/v3/safety_and_privacy/construction_activity/province_activity";
export const EXPORT_ROAD_SAFETY_PROVINCE_ACTIVITY_CONSTRUCTION_ACTIVITY_REPORTT =
api + "/api/v3/safety_and_privacy/construction_activity/country_excel_activity";
export const EXPORT_ROAD_SAFETY_CITY_ACTIVITY_CONSTRUCTION_ACTIVITY_REPORT =
api + "/api/v3/safety_and_privacy/construction_activity/province_excel_activity";
export const GET_ROAD_SAFETY_PROVINCE_ACTIVITY_UTILITY_PASSING_ACTIVITY_REPORT =
api + "/api/v3/safety_and_privacy/utility_passing_activity/country_activity";
export const GET_ROAD_SAFETY_CITY_ACTIVITY_UTILITY_PASSING_ACTIVITY_REPORT =
api + "/api/v3/safety_and_privacy/utility_passing_activity/province_activity";
export const EXPORT_ROAD_SAFETY_PROVINCE_ACTIVITY_UTILITY_PASSING_ACTIVITY_REPORTT =
api + "/api/v3/safety_and_privacy/utility_passing_activity/country_excel_activity";
export const EXPORT_ROAD_SAFETY_CITY_ACTIVITY_UTILITY_PASSING_ACTIVITY_REPORT =
api + "/api/v3/safety_and_privacy/utility_passing_activity/province_excel_activity";
// permission table
export const GET_PERMISSION_TABLE_LIST = api + "/api/v3/permissions";