import React, { useState } from 'react' import { motion, AnimatePresence } from 'framer-motion' import { HiCalendar, HiClock, HiCheckCircle, HiXCircle, HiPlus, HiFunnel, HiXMark } from 'react-icons/hi2' import dayjs from 'dayjs' import 'dayjs/locale/tr' import { mockLeaveRequests } from '../../../mocks/mockIntranetData' import { HrLeave, LeaveStatusEnum } from '@/types/hr' dayjs.locale('tr') const LeaveManagement: React.FC = () => { const [requests, setRequests] = useState(mockLeaveRequests) const [showCreateModal, setShowCreateModal] = useState(false) const [filterStatus, setFilterStatus] = useState<'all' | 'pending' | 'approved' | 'rejected'>('all') // İzin bakiyeleri (mock) const leaveBalance = { annual: { total: 20, used: 8, remaining: 12 }, sick: { total: 10, used: 2, remaining: 8 }, unpaid: { used: 0 } } const filteredRequests = requests.filter(req => { if (filterStatus === 'all') return true return req.status === filterStatus }) const getStatusColor = (status: string) => { const colors = { pending: 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-700 dark:text-yellow-300', approved: 'bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300', rejected: 'bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300' } return colors[status as keyof typeof colors] } const getTypeLabel = (type: string) => { const labels = { annual: 'Yıllık İzin', sick: 'Hastalık İzni', unpaid: 'Ücretsiz İzin', maternity: 'Doğum İzni', other: 'Diğer' } return labels[type as keyof typeof labels] } const getTypeIcon = (type: string) => { const icons = { annual: '🏖️', sick: '🏥', unpaid: '💼', maternity: '👶', other: '📋' } return icons[type as keyof typeof icons] } return (
{/* Header */}

İzin Yönetimi

İzin taleplerinizi oluşturun ve takip edin

{/* İzin Bakiyeleri */}

Yıllık İzin

🏖️
Toplam {leaveBalance.annual.total} gün
Kullanılan {leaveBalance.annual.used} gün
Kalan {leaveBalance.annual.remaining} gün

Hastalık İzni

🏥
Toplam {leaveBalance.sick.total} gün
Kullanılan {leaveBalance.sick.used} gün
Kalan {leaveBalance.sick.remaining} gün

Ücretsiz İzin

💼
Toplam Sınırsız
Bu yıl kullanılan {leaveBalance.unpaid.used} gün

Onay sürecinden geçer

{/* Filtreler */}
{/* İzin Talepleri Listesi */}

İzin Talepleri

{filteredRequests.length > 0 ? ( filteredRequests.map((request) => (
{getTypeIcon(request.leaveType)}

{getTypeLabel(request.leaveType)}

{request.status === LeaveStatusEnum.Pending && '⏳ Beklemede'} {request.status === LeaveStatusEnum.Approved && '✅ Onaylandı'} {request.status === LeaveStatusEnum.Rejected && '❌ Reddedildi'}

Başlangıç

{dayjs(request.startDate).format('DD MMMM YYYY')}

Bitiş

{dayjs(request.endDate).format('DD MMMM YYYY')}

Süre

{request.days} gün

Talep Tarihi

{dayjs(request.creationTime).format('DD MMM YYYY')}

Açıklama: {request.reason}

{request.approver && (
{request.approver.fullName} tarafından{' '} {dayjs(request.approvalDate).format('DD MMMM YYYY')} tarihinde{' '} {request.status === 'approved' ? 'onaylandı' : 'reddedildi'}
)} {request.notes && (

Not: {request.notes}

)}
)) ) : (

{filterStatus === 'all' ? 'Henüz izin talebi bulunmuyor' : `${filterStatus === 'pending' ? 'Bekleyen' : filterStatus === 'approved' ? 'Onaylanan' : 'Reddedilen'} izin talebi bulunmuyor`}

)}
{/* Yeni İzin Talebi Modal */} {showCreateModal && ( <> setShowCreateModal(false)} />

Yeni İzin Talebi