import React, { useState, useEffect } from 'react' import { FaTimes, FaPlus, FaTrash, FaCalendar, FaClock, FaSave } from 'react-icons/fa' import { PmMaintenanceWorkOrder, WorkOrderTypeEnum, WorkOrderStatusEnum, PmWorkOrderMaterial, PmWorkOrderActivity, } from '../../../types/pm' import { mockWorkCenters } from '../../../mocks/mockWorkCenters' import { mockMaintenanceTeams } from '../../../mocks/mockMaintenanceTeams' import { mockEmployees } from '../../../mocks/mockEmployees' import { mockMaterials } from '../../../mocks/mockMaterials' import { PriorityEnum } from '../../../types/common' import { getPriorityText, getWorkOrderStatusText, getWorkOrderTypeText } from '@/utils/erp' interface EditWorkOrderModalProps { isOpen: boolean onClose: () => void onSave: (workOrder: PmMaintenanceWorkOrder) => void workOrder: PmMaintenanceWorkOrder } const EditWorkOrderModal: React.FC = ({ isOpen, onClose, onSave, workOrder, }) => { const [formData, setFormData] = useState({ workOrderNumber: '', workCenterId: '', orderType: WorkOrderTypeEnum.Corrective, priority: PriorityEnum.Normal, status: WorkOrderStatusEnum.Created, description: '', reportedBy: '', assignedTo: '', maintenanceTeamId: '', scheduledStart: '', scheduledEnd: '', actualStart: '', actualEnd: '', estimatedCost: 0, actualCost: 0, notes: '', completionNotes: '', }) const [materials, setMaterials] = useState([]) const [activities, setActivities] = useState([]) const [errors, setErrors] = useState>({}) useEffect(() => { if (workOrder && isOpen) { setFormData({ workOrderNumber: workOrder.workOrderNumber, workCenterId: workOrder.workCenterId, orderType: workOrder.orderType, priority: workOrder.priority, status: workOrder.status, description: workOrder.description, reportedBy: workOrder.reportedBy, assignedTo: workOrder.assignedTo || '', maintenanceTeamId: workOrder.maintenanceTeamId || '', scheduledStart: workOrder.scheduledStart ? workOrder.scheduledStart.toISOString().slice(0, 16) : '', scheduledEnd: workOrder.scheduledEnd ? workOrder.scheduledEnd.toISOString().slice(0, 16) : '', actualStart: workOrder.actualStart ? workOrder.actualStart.toISOString().slice(0, 16) : '', actualEnd: workOrder.actualEnd ? workOrder.actualEnd.toISOString().slice(0, 16) : '', estimatedCost: workOrder.estimatedCost, actualCost: workOrder.actualCost, notes: workOrder.notes || '', completionNotes: workOrder.completionNotes || '', }) setMaterials(workOrder.materials) setActivities(workOrder.activities) } }, [workOrder, isOpen]) const validateForm = () => { const newErrors: Record = {} if (!formData.description.trim()) { newErrors.description = 'Açıklama alanı zorunludur' } if (!formData.workCenterId) { newErrors.workCenterId = 'İş merkezi seçimi zorunludur' } if (!formData.reportedBy.trim()) { newErrors.reportedBy = 'Bildiren kişi zorunludur' } if (formData.estimatedCost < 0) { newErrors.estimatedCost = 'Tahmini maliyet negatif olamaz' } if (formData.actualCost < 0) { newErrors.actualCost = 'Gerçek maliyet negatif olamaz' } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (!validateForm()) return const updatedWorkOrder: PmMaintenanceWorkOrder = { ...workOrder, workOrderNumber: formData.workOrderNumber, workCenterId: formData.workCenterId, orderType: formData.orderType, priority: formData.priority, status: formData.status, description: formData.description, reportedBy: formData.reportedBy, assignedTo: formData.assignedTo || undefined, maintenanceTeamId: formData.maintenanceTeamId || undefined, scheduledStart: formData.scheduledStart ? new Date(formData.scheduledStart) : undefined, scheduledEnd: formData.scheduledEnd ? new Date(formData.scheduledEnd) : undefined, actualStart: formData.actualStart ? new Date(formData.actualStart) : undefined, actualEnd: formData.actualEnd ? new Date(formData.actualEnd) : undefined, estimatedCost: formData.estimatedCost, actualCost: formData.actualCost, materials, activities, notes: formData.notes || undefined, completionNotes: formData.completionNotes || undefined, lastModificationTime: new Date(), } onSave(updatedWorkOrder) onClose() } const addMaterial = () => { const newMaterial: PmWorkOrderMaterial = { id: `mat-${Date.now()}`, workOrderId: workOrder.id, materialId: '', materialCode: '', materialName: '', plannedQuantity: 1, actualQuantity: 0, unitCost: 0, totalCost: 0, } setMaterials([...materials, newMaterial]) } const removeMaterial = (index: number) => { setMaterials(materials.filter((_, i) => i !== index)) } const updateMaterial = (index: number, field: string, value: string | number) => { const updated = [...materials] if (field === 'materialId') { const selectedMaterial = mockMaterials.find((m) => m.id === value) if (selectedMaterial) { updated[index] = { ...updated[index], materialId: value as string, materialCode: selectedMaterial.code, materialName: selectedMaterial.name, unitCost: selectedMaterial.costPrice, totalCost: updated[index].plannedQuantity * selectedMaterial.costPrice, } } } else { const material = updated[index] if (field === 'plannedQuantity') { material.plannedQuantity = value as number material.totalCost = material.plannedQuantity * material.unitCost } else if (field === 'actualQuantity') { material.actualQuantity = value as number } else if (field === 'unitCost') { material.unitCost = value as number material.totalCost = material.plannedQuantity * material.unitCost } } setMaterials(updated) } const addActivity = () => { const newActivity: PmWorkOrderActivity = { id: `act-${Date.now()}`, workOrderId: workOrder.id, activityDescription: '', plannedDuration: 60, actualDuration: 0, performedBy: '', notes: '', } setActivities([...activities, newActivity]) } const removeActivity = (index: number) => { setActivities(activities.filter((_, i) => i !== index)) } const updateActivity = (index: number, field: string, value: string | number) => { const updated = [...activities] const activity = updated[index] if (field === 'activityDescription') { activity.activityDescription = value as string } else if (field === 'plannedDuration') { activity.plannedDuration = value as number } else if (field === 'actualDuration') { activity.actualDuration = value as number } else if (field === 'performedBy') { activity.performedBy = value as string } else if (field === 'notes') { activity.notes = value as string } setActivities(updated) } const toggleActivityCompletion = (index: number) => { const updated = [...activities] const activity = updated[index] if (activity.completedAt) { activity.completedAt = undefined } else { activity.completedAt = new Date() } setActivities(updated) } if (!isOpen) return null return (

İş Emrini Düzenle

{/* Basic Information */}
setFormData({ ...formData, workOrderNumber: e.target.value })} className="w-full px-3 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500" readOnly />
{errors.workCenterId && (

{errors.workCenterId}

)}