import React, { useState, useEffect } from 'react' import { FaTimes, FaSave, FaCalendar, FaClock } from 'react-icons/fa' import { PmCalendarEvent, WorkOrderStatusEnum } from '../../../types/pm' import { mockWorkCenters } from '../../../mocks/mockWorkCenters' import { mockEmployees } from '../../../mocks/mockEmployees' import { PriorityEnum } from '../../../types/common' import { getPriorityText, getWorkOrderStatusText } from '@/utils/erp' interface NewCalendarEventModalProps { isOpen: boolean onClose: () => void onSave: (event: Partial) => void selectedDate?: Date } const NewCalendarEventModal: React.FC = ({ isOpen, onClose, onSave, selectedDate, }) => { const getInitialStartTime = () => { if (selectedDate) { const hour = selectedDate.getHours() const minute = selectedDate.getMinutes() return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}` } return '09:00' } const getInitialEndTime = () => { if (selectedDate) { const endTime = new Date(selectedDate) endTime.setHours(endTime.getHours() + 1) const hour = endTime.getHours() const minute = endTime.getMinutes() return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}` } return '10:00' } const [eventData, setEventData] = useState>({ title: '', type: 'plan', date: selectedDate || new Date(), startTime: getInitialStartTime(), endTime: getInitialEndTime(), status: WorkOrderStatusEnum.Planned, priority: PriorityEnum.Normal, assignedTo: '', workCenterCode: '', duration: 60, }) const [errors, setErrors] = useState>({}) // Update form data when selectedDate changes useEffect(() => { if (selectedDate) { const getInitialStartTime = () => { const hour = selectedDate.getHours() const minute = selectedDate.getMinutes() return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}` } const getInitialEndTime = () => { const endTime = new Date(selectedDate) endTime.setHours(endTime.getHours() + 1) const hour = endTime.getHours() const minute = endTime.getMinutes() return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}` } setEventData((prev) => ({ ...prev, date: selectedDate, startTime: getInitialStartTime(), endTime: getInitialEndTime(), })) } }, [selectedDate]) if (!isOpen) return null const validateForm = () => { const newErrors: Record = {} if (!eventData.title?.trim()) { newErrors.title = 'Başlık gerekli' } if (!eventData.workCenterCode?.trim()) { newErrors.workCenterCode = 'İş Merkezi seçimi gerekli' } if (!eventData.startTime) { newErrors.startTime = 'Başlangıç saati gerekli' } if (!eventData.endTime) { newErrors.endTime = 'Bitiş saati gerekli' } if (eventData.startTime && eventData.endTime) { const start = new Date(`2000-01-01 ${eventData.startTime}`) const end = new Date(`2000-01-01 ${eventData.endTime}`) if (start >= end) { newErrors.endTime = 'Bitiş saati başlangıç saatinden sonra olmalı' } } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleSave = () => { if (validateForm()) { // Calculate duration if (eventData.startTime && eventData.endTime) { const start = new Date(`2000-01-01 ${eventData.startTime}`) const end = new Date(`2000-01-01 ${eventData.endTime}`) const durationMinutes = (end.getTime() - start.getTime()) / (1000 * 60) eventData.duration = durationMinutes } onSave({ ...eventData, id: `E${Date.now()}`, // Generate a simple ID }) onClose() // Reset form setEventData({ title: '', type: 'plan', date: selectedDate || new Date(), startTime: getInitialStartTime(), endTime: getInitialEndTime(), status: WorkOrderStatusEnum.Planned, priority: PriorityEnum.Normal, assignedTo: '', workCenterCode: '', duration: 60, }) setErrors({}) } } const handleInputChange = ( field: keyof PmCalendarEvent, value: string | Date | PriorityEnum | WorkOrderStatusEnum | 'plan' | 'workorder' | 'scheduled', ) => { setEventData((prev) => ({ ...prev, [field]: value, })) // Clear error when user starts typing if (errors[field]) { setErrors((prev) => ({ ...prev, [field]: '', })) } } const generateTimeOptions = () => { const options = [] for (let hour = 0; hour < 24; hour++) { for (let minute = 0; minute < 60; minute += 30) { const timeString = `${hour.toString().padStart(2, '0')}:${minute .toString() .padStart(2, '0')}` options.push(timeString) } } return options } const timeOptions = generateTimeOptions() return (
{/* Header */}

Yeni Bakım Planlaması

{/* Content */}
{/* Basic Info */}
handleInputChange('title', e.target.value)} className={`w-full px-2.5 py-1.5 text-sm border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 ${ errors.title ? 'border-red-500' : 'border-gray-300' }`} placeholder="Bakım planı başlığı" /> {errors.title &&

{errors.title}

}
{errors.workCenterCode && (

{errors.workCenterCode}

)}
{/* Date and Time */}
handleInputChange('date', new Date(e.target.value))} className="w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
{errors.startTime &&

{errors.startTime}

}
{errors.endTime &&

{errors.endTime}

}
{/* Status */} {eventData.type === 'workorder' && (
)}
{/* Footer */}
) } export default NewCalendarEventModal