import type { LoaderFunctionArgs, MetaFunction } from "@remix-run/node"; import { json } from "@remix-run/node"; import { useLoaderData } from "@remix-run/react"; import { requireAuthentication } from "~/lib/auth-middleware.server"; import { getFinancialSummary } from "~/lib/financial-reporting.server"; import { prisma } from "~/lib/db.server"; import { DashboardLayout } from "~/components/layout/DashboardLayout"; import { useSettings } from "~/contexts/SettingsContext"; export const meta: MetaFunction = () => { return [ { title: "لوحة التحكم - نظام إدارة صيانة السيارات" }, { name: "description", content: "لوحة التحكم الرئيسية لنظام إدارة صيانة السيارات" }, ]; }; export async function loader({ request }: LoaderFunctionArgs) { const user = await requireAuthentication(request); // Get dashboard statistics const [ customersCount, vehiclesCount, maintenanceVisitsCount, financialSummary ] = await Promise.all([ prisma.customer.count(), prisma.vehicle.count(), prisma.maintenanceVisit.count(), user.authLevel <= 2 ? getFinancialSummary() : null, // Only for admin and above ]); return json({ user, stats: { customersCount, vehiclesCount, maintenanceVisitsCount, financialSummary, } }); } export default function Dashboard() { const { formatCurrency } = useSettings(); const { user, stats } = useLoaderData(); return (

لوحة التحكم

مرحباً بك، {user.name}

{/* Statistics Cards */}
{/* Customers Card */}

العملاء

{stats.customersCount}

إجمالي العملاء المسجلين

{/* Vehicles Card */}

المركبات

{stats.vehiclesCount}

إجمالي المركبات المسجلة

{/* Maintenance Visits Card */}

زيارات الصيانة

{stats.maintenanceVisitsCount}

إجمالي زيارات الصيانة

{/* Financial Summary Card (Admin only) */} {stats.financialSummary && (

صافي الربح

= 0 ? 'text-green-600' : 'text-red-600'}`}> {formatCurrency(stats.financialSummary.netProfit)}

هامش الربح: {stats.financialSummary.profitMargin.toFixed(1)}%

= 0 ? 'bg-green-100' : 'bg-red-100' }`}> = 0 ? 'text-green-600' : 'text-red-600'}`} fill="none" stroke="currentColor" viewBox="0 0 24 24">
)}
{/* Financial Summary Details (Admin only) */} {stats.financialSummary && (

الملخص المالي

عرض التقارير المفصلة ←

إجمالي الإيرادات

{formatCurrency(stats.financialSummary.totalIncome)}

{stats.financialSummary.incomeCount} عملية

إجمالي المصروفات

{formatCurrency(stats.financialSummary.totalExpenses)}

{stats.financialSummary.expenseCount} مصروف

صافي الربح

= 0 ? 'text-green-600' : 'text-red-600'}`}> {formatCurrency(stats.financialSummary.netProfit)}

{stats.financialSummary.profitMargin.toFixed(1)}% هامش ربح

)} {/* Quick Actions */}

الإجراءات السريعة

إضافة عميل جديد تسجيل مركبة جديدة إضافة زيارة صيانة {user.authLevel <= 2 && ( إضافة مصروف )}
); }