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"; 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;