import React, { useState } from 'react' import { PsProjectTask, TaskTypeEnum, TaskStatusEnum } from '../../../types/ps' import { FaSearch, FaPlus, FaEdit, FaEye, FaUser, FaBullseye, FaTimesCircle, FaSave, FaCalendarAlt, FaFlag, FaProjectDiagram, FaUserCog, } from 'react-icons/fa' import { mockProjectTasks } from '../../../mocks/mockProjectTasks' import { mockEmployees } from '../../../mocks/mockEmployees' import { mockProjects } from '../../../mocks/mockProjects' import { mockProjectPhases } from '../../../mocks/mockProjectPhases' import Widget from '../../../components/common/Widget' import { PriorityEnum } from '../../../types/common' import { getTaskStatusColor, getTaskStatusIcon, getPriorityColor, getTaskTypeColor, getPriorityText, getTaskStatusText, getTaskTypeText, } from '../../../utils/erp' import { Container } from '@/components/shared' const ProjectTasks: React.FC = () => { const [searchTerm, setSearchTerm] = useState('') const [statusFilter, setStatusFilter] = useState('') const [selectedProjectFilter, setSelectedProjectFilter] = useState('All') const [selectedTask, setSelectedTask] = useState(null) const [isModalOpen, setIsModalOpen] = useState(false) const [isCreateModalOpen, setIsCreateModalOpen] = useState(false) const [isEditModalOpen, setIsEditModalOpen] = useState(false) const [editingTask, setEditingTask] = useState(null) // Form state for creating/editing tasks const [formData, setFormData] = useState({ name: '', description: '', projectId: '', phaseId: '', taskType: TaskTypeEnum.Development, status: TaskStatusEnum.NotStarted, priority: PriorityEnum.Normal, assignedTo: '', assigneeEmail: '', startDate: '', endDate: '', estimatedHours: 0, progress: 0, }) const filteredTasks = mockProjectTasks.filter((task) => { const matchesSearch = task.name.toLowerCase().includes(searchTerm.toLowerCase()) || task.taskCode.toLowerCase().includes(searchTerm.toLowerCase()) || (task.description && task.description.toLowerCase().includes(searchTerm.toLowerCase())) const matchesStatus = statusFilter === '' || task.status === statusFilter const matchesProject = selectedProjectFilter === 'All' || task.projectId === selectedProjectFilter return matchesSearch && matchesStatus && matchesProject }) const openModal = (task: PsProjectTask) => { setSelectedTask(task) setIsModalOpen(true) } const closeModal = () => { setSelectedTask(null) setIsModalOpen(false) } const openCreateModal = () => { setFormData({ name: '', description: '', projectId: '', phaseId: '', taskType: TaskTypeEnum.Development, status: TaskStatusEnum.NotStarted, priority: PriorityEnum.Normal, assignedTo: '', assigneeEmail: '', startDate: '', endDate: '', estimatedHours: 0, progress: 0, }) setIsCreateModalOpen(true) } const closeCreateModal = () => { setIsCreateModalOpen(false) } const openEditModal = (task: PsProjectTask) => { setEditingTask(task) setFormData({ name: task.name, description: task.description || '', projectId: task.projectId || '', phaseId: task.phaseId || '', taskType: task.taskType, status: task.status, priority: task.priority, assignedTo: task.assignedTo || '', assigneeEmail: task.assignee?.email || '', startDate: task.startDate.toISOString().split('T')[0], endDate: task.endDate.toISOString().split('T')[0], estimatedHours: task.estimatedHours, progress: task.progress, }) setIsEditModalOpen(true) } const closeEditModal = () => { setIsEditModalOpen(false) setEditingTask(null) } const handleInputChange = ( e: React.ChangeEvent, ) => { const { name, value } = e.target // Eğer atanan kişi seçimi yapılıyorsa, e-posta adresini otomatik doldur if (name === 'assignedTo') { const selectedEmployee = mockEmployees.find((emp) => emp.id === value) setFormData((prev) => ({ ...prev, [name]: value, assigneeEmail: selectedEmployee?.email || '', })) } else { setFormData((prev) => ({ ...prev, [name]: value, })) } } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() // Here you would normally save to backend console.log('Saving task:', formData) alert(isEditModalOpen ? 'Görev güncellendi!' : 'Yeni görev oluşturuldu!') if (isEditModalOpen) { closeEditModal() } else { closeCreateModal() } } const generateTaskCode = () => { const taskCount = mockProjectTasks.length + 1 return `TSK-${taskCount.toString().padStart(3, '0')}` } return (

Görev Yönetimi

Proje görevlerinizi oluşturun, düzenleyin ve takip edin

{/* Summary Stats */}
t.status === TaskStatusEnum.InProgress).length} color="yellow" icon="FaClock" /> t.status === TaskStatusEnum.Completed).length} color="green" icon="FaCheckCircle" /> 0 ? `${Math.round( mockProjectTasks.reduce((sum, t) => sum + t.progress, 0) / mockProjectTasks.length, )}%` : '0%' } color="red" icon="FaBullseye" />
{/* Filters */}
setSearchTerm(e.target.value)} className="w-full pl-10 px-3 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
{/* Task List */}
{filteredTasks.map((task, index) => ( ))}
Proje Aşama Görev Durum Öncelik Atanan İlerleme Bitiş Tarihi İşlemler
{(() => { const project = mockProjects.find((p) => p.id === task.projectId) return project?.name || `Proje ID: ${task.projectId}` })()}
{(() => { const project = mockProjects.find((p) => p.id === task.projectId) return project?.code || task.projectId })()}
{task.phase?.name || (() => { const phase = mockProjectPhases.find((p) => p.id === task.phaseId) return phase?.name || `Aşama ID: ${task.phaseId}` })()}
{task.phase?.code || (() => { const phase = mockProjectPhases.find((p) => p.id === task.phaseId) return phase?.code || task.phaseId })()}
{task.name}
{task.taskCode}
{getTaskStatusIcon(task.status)} {task.status} {task.priority}
{task.assignee?.name || '-'}
{task.progress}%
{task.endDate.toLocaleDateString('tr-TR')}
{filteredTasks.length === 0 && (

Görev bulunamadı

Arama kriterlerinizi değiştirmeyi deneyin veya yeni bir görev oluşturun.

)}
{/* Task Detail Modal */} {isModalOpen && selectedTask && (

{selectedTask.taskCode} - {selectedTask.name}

Görev detayları

{/* Sol Kolon - Temel Bilgiler */}

Görev Bilgileri

{(() => { const project = mockProjects.find( (p) => p.id === selectedTask.projectId, ) return project?.name || `Proje ID: ${selectedTask.projectId}` })()}
{(() => { const project = mockProjects.find( (p) => p.id === selectedTask.projectId, ) return project?.code || selectedTask.projectId })()}
{selectedTask.phase?.name || (() => { const phase = mockProjectPhases.find( (p) => p.id === selectedTask.phaseId, ) return phase?.name || `Aşama ID: ${selectedTask.phaseId}` })()}
{selectedTask.phase?.code || (() => { const phase = mockProjectPhases.find( (p) => p.id === selectedTask.phaseId, ) return phase?.code || selectedTask.phaseId })()}

{selectedTask.description || 'Açıklama bulunmuyor.'}

{selectedTask.taskType}
{getTaskStatusIcon(selectedTask.status)} {selectedTask.status}
{selectedTask.priority}
{selectedTask.assignee ? (

{selectedTask.assignee.name}

{selectedTask.assignee.email}

) : (

Atanmamış

)}
{/* Sağ Kolon - Tarih ve İlerleme */}

Tarih ve İlerleme

{selectedTask.startDate.toLocaleDateString('tr-TR')}

{selectedTask.actualStartDate?.toLocaleDateString('tr-TR') || 'Henüz başlanmadı'}

{selectedTask.endDate.toLocaleDateString('tr-TR')}

{selectedTask.actualEndDate?.toLocaleDateString('tr-TR') || 'Henüz tamamlanmadı'}

{selectedTask.estimatedHours} saat

{selectedTask.actualHours} saat

{selectedTask.progress > 20 && ( {selectedTask.progress}% )}
{selectedTask.progress <= 20 && ( {selectedTask.progress}% )}

{selectedTask.creationTime.toLocaleDateString('tr-TR')}

{selectedTask.lastModificationTime.toLocaleDateString('tr-TR')}

)} {/* Create/Edit Task Modal */} {(isCreateModalOpen || isEditModalOpen) && (
{/* Header */}
{isEditModalOpen ? ( ) : ( )}

{isEditModalOpen ? 'Görev Düzenle' : 'Yeni Görev Oluştur'}

{isEditModalOpen ? 'Mevcut görev bilgilerini güncelleyin' : 'Yeni bir görev tanımlayın'}

{/* Form */}
{/* Sol Kolon */}

Temel Bilgiler