import React, { useState } from 'react' import { FaPlus, FaSearch, FaEdit, FaTrash, FaCodeBranch, FaUsers, FaCog, FaClock, FaCheckCircle, FaEye, } from 'react-icons/fa' import { MmApprovalWorkflow } from '../../../types/mm' import ApprovalWorkflowModal from './ApprovalWorkflowModal' import { mockApprovalWorkflows } from '../../../mocks/mockApprovalWorkflows' import { getApprovalLevelColor, getApprovalLevelText, getRequestTypeColor, getRequestTypeText, } from '../../../utils/erp' import { Container } from '@/components/shared' const ApprovalWorkflows: React.FC = () => { const [searchTerm, setSearchTerm] = useState('') const [showModal, setShowModal] = useState(false) const [editingWorkflow, setEditingWorkflow] = useState(null) const [selectedWorkflow, setSelectedWorkflow] = useState(null) const [modalMode, setModalMode] = useState<'create' | 'view' | 'edit'>('create') // Mock data - replace with actual API calls const [workflows] = useState(mockApprovalWorkflows) const filteredWorkflows = workflows.filter( (workflow) => workflow.name.toLowerCase().includes(searchTerm.toLowerCase()) || workflow.departmentId.toLowerCase().includes(searchTerm.toLowerCase()), ) const getTotalSteps = (workflow: MmApprovalWorkflow) => { return workflow.approvalLevels.length } const getRequiredSteps = (workflow: MmApprovalWorkflow) => { return workflow.approvalLevels.filter((level) => level.isRequired).length } const getMaxTimeout = (workflow: MmApprovalWorkflow) => { return Math.max(...workflow.approvalLevels.map((level) => level.timeoutDays || 0)) } const handleEdit = (workflow: MmApprovalWorkflow) => { setEditingWorkflow(workflow) setModalMode('edit') setShowModal(true) } const handleView = (workflow: MmApprovalWorkflow) => { setEditingWorkflow(workflow) setModalMode('view') setShowModal(true) } const handleAddNew = () => { setEditingWorkflow(null) setModalMode('create') setShowModal(true) } const handleViewDetails = (workflow: MmApprovalWorkflow) => { setSelectedWorkflow(workflow) } const handleSaveWorkflow = (workflow: MmApprovalWorkflow) => { // TODO: Implement save logic console.log('Saving workflow:', workflow) setShowModal(false) setEditingWorkflow(null) } const handleCloseModal = () => { setShowModal(false) setEditingWorkflow(null) } return (
{/* Header */}

Onay Süreçleri

Departman bazlı satınalma onay süreçlerini yönetin

{/* Search Bar */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
{/* Workflow List */}

Onay Süreçleri

{filteredWorkflows.map((workflow) => (
handleViewDetails(workflow)} >

{workflow.name}

{getRequestTypeText(workflow.requestType)}

Departman: {workflow.department?.name}

Limit: ₺{workflow.amountThreshold.toLocaleString()} ve üzeri

Toplam Adım {getTotalSteps(workflow)}
Zorunlu Adım {getRequiredSteps(workflow)}
Maks. Süre {getMaxTimeout(workflow)} gün
Son Güncelleme {workflow.lastModificationTime.toLocaleDateString('tr-TR')}
{workflow.isActive ? 'Aktif' : 'Pasif'}
{workflow.approvalLevels.some((level) => level.isParallel) && ( Paralel Onay )}
))} {filteredWorkflows.length === 0 && (

Onay süreci bulunamadı

Arama kriterlerinizi değiştirin veya yeni bir onay süreci ekleyin.

)}
{/* Workflow Details */}

Onay Adımları

{selectedWorkflow ? (

{selectedWorkflow.name}

Departman: {selectedWorkflow.departmentId}
Tür: {getRequestTypeText(selectedWorkflow.requestType)}
Tutar Limiti: ₺{selectedWorkflow.amountThreshold.toLocaleString()}
Durum: {selectedWorkflow.isActive ? 'Aktif' : 'Pasif'}
{selectedWorkflow.approvalLevels .sort((a, b) => a.sequence - b.sequence) .map((level, index) => (
Adım {level.sequence} {getApprovalLevelText(level.level)} {level.isRequired && ( Zorunlu )} {level.isParallel && ( Paralel )}
{level.timeoutDays && ( {level.timeoutDays} gün )}
Onaylayanlar:
{level.approverNames.map((name, idx) => (
{name} ({level.approverUserIds[idx]})
))}
{index < selectedWorkflow.approvalLevels.length - 1 && (
)}
))}
{/* Workflow Statistics */}
{getTotalSteps(selectedWorkflow)}
Toplam Adım
{getRequiredSteps(selectedWorkflow)}
Zorunlu Adım
{getMaxTimeout(selectedWorkflow)}
Maks. Gün
) : (

Onay Adımlarını Görüntüle

Detaylarını görmek için sol taraftan bir onay süreci seçin.

)}
{/* Approval Workflow Modal */}
) } export default ApprovalWorkflows