'use client' import { useAuth } from '@/contexts/AuthContext' import { useEffect, useState } from 'react' import { portalAPI, type ManagedLeave } from '@/lib/api/portal' import LoadingSpinner from '@/components/LoadingSpinner' import { toast } from 'react-hot-toast' import { CheckCircle2, XCircle, Calendar, User, ArrowLeft } from 'lucide-react' import Link from 'next/link' const COMPANY_TIME_ZONE = 'Asia/Riyadh' const formatCompanyTime = (value: string) => { return new Date(value).toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', timeZone: COMPANY_TIME_ZONE, }) } const formatCompanyDateTime = (value: string) => { return new Date(value).toLocaleString('ar-SA', { timeZone: COMPANY_TIME_ZONE, }) } export default function ManagedLeavesPage() { const { hasPermission } = useAuth() const [leaves, setLeaves] = useState([]) const [loading, setLoading] = useState(true) const [processingId, setProcessingId] = useState(null) const canViewDepartmentLeaveRequests = hasPermission('department_leave_requests', 'view') const canApproveDepartmentLeaveRequests = hasPermission('department_leave_requests', 'approve') const fetchLeaves = async () => { try { setLoading(true) const data = await portalAPI.getManagedLeaves('PENDING') setLeaves(data) } catch (error: any) { toast.error(error?.response?.data?.message || 'فشل تحميل طلبات الإجازات') } finally { setLoading(false) } } useEffect(() => { if (canViewDepartmentLeaveRequests) { fetchLeaves() } else { setLoading(false) } }, [canViewDepartmentLeaveRequests]) const handleApprove = async (id: string) => { try { setProcessingId(id) await portalAPI.approveManagedLeave(id) toast.success('تمت الموافقة على طلب الإجازة') fetchLeaves() } catch (error: any) { toast.error(error?.response?.data?.message || 'فشل اعتماد طلب الإجازة') } finally { setProcessingId(null) } } const handleReject = async (id: string) => { const rejectedReason = window.prompt('اكتب سبب الرفض') if (!rejectedReason || !rejectedReason.trim()) return try { setProcessingId(id) await portalAPI.rejectManagedLeave(id, rejectedReason.trim()) toast.success('تم رفض طلب الإجازة') fetchLeaves() } catch (error: any) { toast.error(error?.response?.data?.message || 'فشل رفض طلب الإجازة') } finally { setProcessingId(null) } } const formatLeaveType = (leaveType: string) => { if (leaveType === 'ANNUAL') return 'إجازة سنوية' if (leaveType === 'HOURLY') return 'إجازة ساعية' return leaveType } if (!canViewDepartmentLeaveRequests) { return
الوصول مرفوض
} if (loading) return return (

طلبات إجازات القسم

اعتماد أو رفض طلبات موظفي القسم المباشرين

العودة
{leaves.length === 0 ? (
لا توجد طلبات إجازات معلقة لموظفي القسم
) : (
{leaves.map((leave) => ( ))}
الموظف نوع الإجازة الفترة المدة السبب الإجراءات

{leave.employee.firstName} {leave.employee.lastName}

{leave.employee.uniqueEmployeeId}

{formatLeaveType(leave.leaveType)}

{formatCompanyDateTime(leave.startDate)}

{formatCompanyDateTime(leave.endDate)}

{leave.leaveType === 'HOURLY' ? `${formatCompanyTime(leave.startDate)} - ${formatCompanyTime(leave.endDate)}` : `${leave.days} يوم`}

{leave.reason || '-'}

{canApproveDepartmentLeaveRequests ? (
) : ( عرض فقط )}
)}
) }