108 lines
4.6 KiB
JavaScript
108 lines
4.6 KiB
JavaScript
"use client";
|
|
import PageTitle from "@/core/components/PageTitle";
|
|
import { GET_DRIVER_COUNTRY_ACTIVITY_REPORT, GET_DRIVER_PROVINCE_ACTIVITY_REPORT } from "@/core/utils/routes";
|
|
import { useAuth } from "@/lib/contexts/auth";
|
|
import { usePermissions } from "@/lib/hooks/usePermissions";
|
|
import useRequest from "@/lib/hooks/useRequest";
|
|
import { yupResolver } from "@hookform/resolvers/yup";
|
|
import { LinearProgress, Stack } from "@mui/material";
|
|
import moment from "jalali-moment";
|
|
import { useEffect, useState } from "react";
|
|
import { useForm } from "react-hook-form";
|
|
import * as yup from "yup";
|
|
import DriverReportsList from "./DriverReportsList";
|
|
import SearchReportList from "./Search";
|
|
|
|
const DriverReportsPage = () => {
|
|
const [data, setData] = useState(null);
|
|
const { data: userPermissions } = usePermissions();
|
|
const { user } = useAuth();
|
|
const requestServer = useRequest();
|
|
const hasProvincesPermission = userPermissions?.includes("mission-report-country");
|
|
|
|
const defaultValues = {
|
|
from_date: moment(new Date()).format("YYYY-MM-DD"),
|
|
date_to: moment(new Date()).format("YYYY-MM-DD"),
|
|
province_id: user.province_id || "-1",
|
|
};
|
|
const defaultFilter = [
|
|
{ value: `${defaultValues.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
|
{ value: `${defaultValues.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" },
|
|
{ value: `${defaultValues.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" },
|
|
];
|
|
const [specialFilter, setSpecialFilter] = useState(defaultFilter);
|
|
|
|
const onSearchSubmit = async (data) => {
|
|
const params = new URLSearchParams();
|
|
params.set("from_date", `${data.from_date} 00:00:00`);
|
|
params.set("date_to", `${data.date_to} 23:59:59`);
|
|
setSpecialFilter([
|
|
{ value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" },
|
|
{ value: `${data.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" },
|
|
{ value: `${data.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" },
|
|
]);
|
|
if (data.province_id === "-1") {
|
|
try {
|
|
const response = await requestServer(`${GET_DRIVER_COUNTRY_ACTIVITY_REPORT}?${params}`);
|
|
const result = response.data.data;
|
|
|
|
setData({
|
|
data: result.activities,
|
|
filters: data,
|
|
});
|
|
} catch (e) {}
|
|
} else {
|
|
try {
|
|
params.set("province_id", `${data.province_id}`);
|
|
const response = await requestServer(`${GET_DRIVER_PROVINCE_ACTIVITY_REPORT}?${params}`);
|
|
|
|
const result = response.data.data;
|
|
|
|
setData({
|
|
data: result.activities,
|
|
filters: data,
|
|
});
|
|
} catch (e) {}
|
|
}
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (!userPermissions) return;
|
|
onSearchSubmit(defaultValues);
|
|
}, [userPermissions]);
|
|
|
|
const validationSchema = yup.object().shape({
|
|
from_date: yup
|
|
.string()
|
|
.required("تاریخ شروع الزامی است!")
|
|
.matches(/^\d{4}-\d{2}-\d{2}$/, "تاریخ شروع الزامی است!")
|
|
.test("is-valid-date", "تاریخ شروع معتبر نیست!", (value) => moment(value, "YYYY-MM-DD", true).isValid()),
|
|
date_to: yup
|
|
.string()
|
|
.required("تاریخ پایان الزامی است!")
|
|
.matches(/^\d{4}-\d{2}-\d{2}$/, "تاریخ پایان الزامی است!")
|
|
.test("is-valid-date", "تاریخ پایان معتبر نیست!", (value) => moment(value, "YYYY-MM-DD", true).isValid()),
|
|
province_id: yup.string().nullable(),
|
|
});
|
|
|
|
const { control, handleSubmit } = useForm({
|
|
defaultValues,
|
|
resolver: yupResolver(validationSchema),
|
|
mode: "all",
|
|
});
|
|
|
|
return (
|
|
<Stack spacing={1}>
|
|
<PageTitle title={"کارتابل گزارش راننده"} />
|
|
<SearchReportList
|
|
control={control}
|
|
hasProvincesPermission={hasProvincesPermission}
|
|
handleSubmit={handleSubmit}
|
|
onSearchSubmit={onSearchSubmit}
|
|
/>
|
|
{!data ? <LinearProgress /> : <DriverReportsList specialFilter={specialFilter} data={data} />}
|
|
</Stack>
|
|
);
|
|
};
|
|
export default DriverReportsPage;
|