import React, { useState } from 'react' import { FaPlus, FaEdit, FaTrash, FaBuilding, FaUsers, FaDollarSign, FaEye, FaList, FaTh, } from 'react-icons/fa' import { HrDepartment } from '../../../types/hr' import DataTable, { Column } from '../../../components/common/DataTable' import { mockDepartments } from '../../../mocks/mockDepartments' import { mockEmployees } from '../../../mocks/mockEmployees' import { mockCostCenters } from '../../../mocks/mockCostCenters' import DepartmentFormModal from './DepartmentFormModal' import DepartmentViewModal from './DepartmentViewModal' import Widget from '../../../components/common/Widget' import { Container } from '@/components/shared' const DepartmentManagement: React.FC = () => { const [departments, setDepartments] = useState(mockDepartments) const [searchTerm, setSearchTerm] = useState('') const [selectedParent, setSelectedParent] = useState('all') const [viewMode, setViewMode] = useState<'list' | 'cards'>('list') // Modal states const [isFormModalOpen, setIsFormModalOpen] = useState(false) const [isViewModalOpen, setIsViewModalOpen] = useState(false) const [selectedDepartment, setSelectedDepartment] = useState() const [modalTitle, setModalTitle] = useState('') const handleAdd = () => { setSelectedDepartment(undefined) setModalTitle('Yeni Departman') setIsFormModalOpen(true) } const handleEdit = (department: HrDepartment) => { setSelectedDepartment(department) setModalTitle('Departman Düzenle') setIsFormModalOpen(true) } const handleView = (department: HrDepartment) => { setSelectedDepartment(department) setIsViewModalOpen(true) } const handleDelete = (id: string) => { if (confirm('Bu departmanı silmek istediğinizden emin misiniz?')) { setDepartments((prev) => prev.filter((dept) => dept.id !== id)) } } const handleSave = (departmentData: Partial) => { if (selectedDepartment) { // Edit existing department setDepartments((prev) => prev.map((dept) => dept.id === selectedDepartment.id ? { ...dept, ...departmentData, lastModificationTime: new Date() } : dept, ), ) } else { // Add new department const newDepartment: HrDepartment = { id: `dept_${Date.now()}`, ...departmentData, subDepartments: [], creationTime: new Date(), lastModificationTime: new Date(), } as HrDepartment setDepartments((prev) => [...prev, newDepartment]) } setIsFormModalOpen(false) } const handleCloseFormModal = () => { setIsFormModalOpen(false) setSelectedDepartment(undefined) } const handleCloseViewModal = () => { setIsViewModalOpen(false) setSelectedDepartment(undefined) } const handleEditFromView = (department: HrDepartment) => { setIsViewModalOpen(false) handleEdit(department) } mockDepartments.forEach((dept) => { if (dept.managerId) { dept.manager = mockEmployees.find((emp) => emp.id === dept.managerId) } if (dept.costCenterId) { dept.costCenter = mockCostCenters.find((cc) => cc.id === dept.costCenterId) } }) const filteredDepartments = departments.filter((department) => { if ( searchTerm && !department.name.toLowerCase().includes(searchTerm.toLowerCase()) && !department.code.toLowerCase().includes(searchTerm.toLowerCase()) ) { return false } if (selectedParent !== 'all' && department.parentDepartmentId !== selectedParent) { return false } return true }) const columns: Column[] = [ { key: 'code', header: 'Departman Kodu', sortable: true, }, { key: 'name', header: 'Departman Adı', sortable: true, }, { key: 'parentDepartment', header: 'Üst Departman', render: (department: HrDepartment) => department.parentDepartment?.name || '-', }, { key: 'manager', header: 'Yönetici', render: (department: HrDepartment) => department.manager?.fullName || '-', }, { key: 'employeeCount', header: 'Personel Sayısı', render: (department: HrDepartment) => (
{mockEmployees.filter((a) => a.departmantId == department.id).length || 0}
), }, { key: 'costCenter', header: 'Maliyet Merkezi', render: (department: HrDepartment) => (
{department.costCenter?.code || '-'} {department.costCenter?.name || '-'}
), }, { key: 'budget', header: 'Bütçe', render: (department: HrDepartment) => (
{department.budget ? `₺${department.budget.toLocaleString()}` : '-'}
), }, { key: 'status', header: 'Durum', render: (department: HrDepartment) => ( {department.isActive ? 'Aktif' : 'Pasif'} ), }, { key: 'actions', header: 'İşlemler', render: (department: HrDepartment) => (
), }, ] return (
{/* Header */}

Departman Yönetimi

Organizasyon yapısını ve departmanları yönetin

{/* View Mode Toggle */}
{/* Stats Cards */}
!d.parentDepartmentId).length} color="purple" icon="FaBuilding" /> total + (dept.budget || 0), 0) .toLocaleString()}`} color="orange" icon="FaDollarSign" />
{/* Filters */}
setSearchTerm(e.target.value)} className="w-full px-3 py-1.5 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* Data Display */} {viewMode === 'list' ? (
) : (
{filteredDepartments.map((department) => (
{/* Card Header */}

{department.name}

{department.code}

{department.isActive ? 'Aktif' : 'Pasif'}
{/* Card Content */}
{department.parentDepartment && (
Üst: {department.parentDepartment.name}
)} {department.manager && (
Yönetici: {department.manager.fullName}
)}
{mockEmployees.filter((emp) => emp.departmantId === department.id).length}{' '} Personel
{department.budget && (
₺{department.budget.toLocaleString()}
)} {department.costCenter && (
{department.costCenter.code}
{department.costCenter.name}
)}
{/* Card Actions */}
))}
)} {filteredDepartments.length === 0 && (

Departman bulunamadı

Arama kriterlerinizi değiştirmeyi deneyin.

)}
{/* Modals */}
) } export default DepartmentManagement