import React from "react"; import { FaTimes, FaUser, FaIdCard, FaEnvelope, FaPhone, FaCalendar, FaBuilding, FaBriefcase, FaDollarSign, FaMapMarkerAlt, FaUserShield, FaHeartbeat, FaEdit, FaClock, FaBirthdayCake, FaGraduationCap, FaAward, FaHistory, } from "react-icons/fa"; import { HrEmployee } from "../../../types/hr"; import { getEmployeeStatusColor, getEmployeeStatusIcon, getEmployeeStatusText, } from "../../../utils/erp"; interface EmployeeViewModalProps { isOpen: boolean; onClose: () => void; employee: HrEmployee | null; onEdit?: (employee: HrEmployee) => void; } const EmployeeViewModal: React.FC = ({ isOpen, onClose, employee, onEdit, }) => { if (!isOpen || !employee) return null; const formatDate = (date: Date | string): string => { return new Date(date).toLocaleDateString("tr-TR"); }; const calculateWorkDuration = (hireDate: Date): string => { const now = new Date(); const hire = new Date(hireDate); const diffTime = Math.abs(now.getTime() - hire.getTime()); const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); const years = Math.floor(diffDays / 365); const months = Math.floor((diffDays % 365) / 30); if (years > 0) { return `${years} yıl ${months} ay`; } return `${months} ay`; }; return (
{/* Header */}

{employee.fullName}

{employee.jobPosition?.name || "Pozisyon Belirtilmemiş"}

{employee.code}

{getEmployeeStatusIcon(employee.employeeStatus)} {getEmployeeStatusText(employee.employeeStatus)}
{onEdit && ( )}
{/* Content */}
{/* Left Column - Personal Info */}
{/* Kişisel Bilgiler */}

Kişisel Bilgiler

Doğum Tarihi

{formatDate(employee.birthDate)}

Cinsiyet

{employee.gender}

Medeni Durum

{employee.maritalStatus}

TC Kimlik No

{employee.nationalId}

{/* İletişim Bilgileri */}

İletişim Bilgileri

E-posta

{employee.email}

{employee.phone && (

İş Telefonu

{employee.phone}

)} {employee.personalPhone && (

Kişisel Telefon

{employee.personalPhone}

)} {employee.address && (

Adres

{employee.address.street}
{employee.address.city}, {employee.address.state}
{employee.address.postalCode},{" "} {employee.address.country}

)}
{/* Acil Durum İletişim */} {employee.emergencyContact && (

Acil Durum İletişim

İsim

{employee.emergencyContact.name}

Telefon

{employee.emergencyContact.phone}

Yakınlık

{employee.emergencyContact.relationship}

)}
{/* Middle Column - Work Info */}
{/* İş Bilgileri */}

İş Bilgileri

Departman

{employee.department?.name || "Belirtilmemiş"}

Pozisyon

{employee.jobPosition?.name || "Belirtilmemiş"}

İşe Başlama Tarihi

{formatDate(employee.hireDate)}

Çalışma Süresi

{calculateWorkDuration(employee.hireDate)}

Çalışma Türü

{employee.employmentType}

{employee.workLocation && (

Çalışma Lokasyonu

{employee.workLocation}

)} {employee.badgeNumber && (

Rozet Numarası

{employee.badgeNumber}

)}
{/* Yönetici Bilgileri */} {employee.manager && (

Yönetici

{employee.manager.fullName}

{employee.manager.jobPosition?.name}

{employee.manager.email}

)} {/* Performans ve Eğitimler */}

Performans & Gelişim

{employee.evaluations?.length || 0}

Değerlendirme

{employee.trainings?.length || 0}

Eğitim

{/* Right Column - Financial & Additional Info */}
{/* Maaş Bilgileri */}

Maaş Bilgileri

Temel Maaş

{employee.baseSalary?.toLocaleString()}{" "} {employee.currency || "TRY"}

{employee.payrollGroup && (

Bordro Grubu

{employee.payrollGroup}

)}
{/* Banka Bilgileri */} {employee.bankAccount && (

Banka Bilgileri

Banka Adı

{employee.bankAccount.bankName}

Hesap Numarası

{employee.bankAccount.accountNumber}

IBAN

{employee.bankAccount.iban}

)} {/* İzin Durumu */}

İzin Durumu

Toplam İzin {employee.leaves?.length || 0}
Kalan İzin 15 gün
{/* Sistem Bilgileri */}

Sistem Bilgileri

Oluşturulma Tarihi

{formatDate(employee.creationTime)}

Son Güncelleme

{formatDate(employee.lastModificationTime)}

{/* Footer */}
); }; export default EmployeeViewModal;