"use client"; import { requestType, ticketStatuses } from "@/core/constant"; import { exportToExcel, formatDurationPersian, handleAxiosError, } from "@/core/utils"; import { useMutateAgentEfficiency, useMutateAgentPerformance, useMutateAgingReport, useMutateAvgResolutionTime, useMutateClosureRate, useMutateCriticalTickets, useMutateDepartmentLoad, useMutateDepartmentReport, useMutateKpiReport, useMutatePredictionReport, useMutateSlaBreach, useMutateStatsReport, } from "@/services/hooks/report.hook"; import { DownloadOutlined } from "@mui/icons-material"; import { Box, Button, Card, CardContent, Stack, Typography, } from "@mui/material"; import { UseMutateAsyncFunction } from "@tanstack/react-query"; import { toast } from "react-toastify"; export default function Page() { // ۱. آمار کلی تیکت‌ها const { mutateAsync: totalStatsAsync } = useMutateStatsReport(); // ۲. گزارش عملکرد دپارتمان‌ها const { mutateAsync: deptReportAsync } = useMutateDepartmentReport(); // ۳. گزارش عملکرد کارشناسان const { mutateAsync: agentPerfAsync } = useMutateAgentPerformance(); // ۴. میانگین زمان پاسخ‌گویی const { mutateAsync: avgResTimeAsync } = useMutateAvgResolutionTime(); // ۵. تیکت‌های بحرانی const { mutateAsync: criticalTicketsAsync } = useMutateCriticalTickets(); // ۶. روند ثبت تیکت‌ها (نیاز به params دارد) // const { mutateAsync: ticketsTrend, isLoading: trendLoading } = useMutateTicketsTrend(dateParams); // ۷. نرخ بستن تیکت‌ها const { mutateAsync: closureRateAsync } = useMutateClosureRate(); // ۸. تیکت‌های خارج از SLA const { mutateAsync: slaBreachAsync } = useMutateSlaBreach(); // ۹. گزارش قدمت تیکت‌ها const { mutateAsync: agingReportAsync } = useMutateAgingReport(); // ۱۰. بهره‌وری کارشناسان const { mutateAsync: agentEfficiencyAsync } = useMutateAgentEfficiency(); // ۱۱. بار کاری دپارتمان‌ها const { mutateAsync: deptLoadAsync } = useMutateDepartmentLoad(); // ۱۲. شاخص‌های کلیدی عملکرد (KPI) const { mutateAsync: kpiReportAsync } = useMutateKpiReport(); // ۱۳. پیش‌بینی وضعیت تیکت‌ها const { mutateAsync: predictionReportAsync } = useMutatePredictionReport(); const handleGetStatsReport = async () => { try { const { data } = await totalStatsAsync(); const formattedData = [data]?.map((t: any) => ({ "كل تيكت ها": t.total, "تيكت هاي باز": t.open, "تيكت هاي در حال بررسي": t.inProgress, "تيكت هاي حل شده": t.resolved, "تيكت هاي بسته شده": t.closed, })); exportToExcel("excel", formattedData, "گزارش كلي تيكت ها"); } catch (error) { console.log(error); toast.error(handleAxiosError(error)); } }; const handleDepReport = async () => { try { const { data } = await deptReportAsync(); const formattedData = data?.map((t: any) => ({ "بخش / واحد": t.department?.displayName, "كل تيكت ها": t.totalTickets, "تيكت هاي باز": t.openTickets, "تيكت هاي حل شده": t.resolvedTickets, })); exportToExcel("excel", formattedData, "گزارش تيكت ها به تفكيك واحد"); } catch (error) { console.log(error); toast.error(handleAxiosError(error)); } }; const handleAgentPerformanceReport = async () => { try { const { data } = await agentPerfAsync(); const formattedData = data?.map((t: any) => ({ "كارشناس مربوطه": t.assignee?.fullname, "كل تيكت ها": t.totalAssigned, "تيكت هاي باز": t.open, "تيكت هاي حل شده": t.resolved, })); exportToExcel("excel", formattedData, "گزارش تيكت ها به تفكيك كارشناسان"); } catch (error) { console.log(error); toast.error(handleAxiosError(error)); } }; const handleAvgPerformanceReport = async () => { try { const { data } = await avgResTimeAsync(); const formattedData = [data]?.map((t: any) => ({ "نرخ زمان پاسخگويي": formatDurationPersian(t.avgResolutionSeconds), "نرخ دقيق بر حسب ثانيه": t.avgResolutionSeconds, })); exportToExcel("excel", formattedData, "گزارش نرخ پاسخگويي "); } catch (error) { console.log(error); toast.error(handleAxiosError(error)); } }; const handleCriticalTicketsReport = async () => { try { const { data } = await criticalTicketsAsync(); const formattedData = data?.map((t: any) => ({ "شماره تيكت": t.ticketNumber, "واحد / بخش": t.department?.displayName, "تلفن داخلي": t.internalPhone, كاربر: t.createdBy, "محل وقوع مشكل": t.location, "نوع درخواست": requestType.find((p) => p.id === t.requestType) ?.displayName, "كارشناس مربوطه": t.assignee?.fullname, "دستگاه مربوطه": t.relatedSystem, وضعيت: ticketStatuses.find((p) => p.id === t.status)?.displayName, توضيحات: t.description, "اقدامات كارشناس": t.helpdeskAction, "يادداشت ها": t.finalNotes, "تاريخ ثبت": new Date(t.createdAt).toLocaleDateString("fa-IR"), })); exportToExcel("excel", formattedData, "گزارش تيكت هاي بحراني"); } catch (error) { console.log(error); toast.error(handleAxiosError(error)); } }; return (
آمار کلی تیکت‌ها{" "} {/* */} گزارش عملکرد دپارتمان‌ها {/* */} گزارش عملکرد کارشناسان {/* */} میانگین زمان پاسخ‌گویی {/* */} تیکت‌های بحرانی {/* */} روند ثبت تیکت‌ها{" "} {/* */} نرخ بستن تیکت‌ها {/* */} تیکت‌های خارج از SLA {/* */} گزارش قدمت تیکت‌ها {/* */} بهره‌وری کارشناسان {/* */} بار کاری دپارتمان‌ها{" "} {/* */} شاخص‌های کلیدی عملکرد (KPI){" "} {/* */} پیش‌بینی وضعیت تیکت‌ها{" "} {/* */}
); }