import { useState, useEffect } from 'react' import { FaTimes } from 'react-icons/fa' import { useAuth } from '../context/AuthContext' const SERVICE_TYPES = ['Remote', 'On Site', 'Off Site', 'COMMENT'] const STATUS_OPTIONS = [ 'Open', 'Closed', 'Awaiting', 'Added Info', 'Occupied', 'Halted', 'Cancelled', 'Aborted', 'Assigned', 'In Test' ] const RESPONSE_LEVELS = [ 'KEY USER', '1st Level', '2nd Level', '3rd Level', 'FS/FE', '24/7', 'TECH MGMT', 'Backoffice', 'BUSI MGMT', 'n/a' ] export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCreate }) { const { user } = useAuth() const today = new Date().toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }) const [formData, setFormData] = useState({ serviceType: 'Remote', newStatus: workorder?.status || 'Open', newResponseLevel: workorder?.responseLevel || '', totalTime: 0, startDate: today, startTime: '', endDate: today, endTime: '', details: '', isComment: false }) const [loading, setLoading] = useState(false) const [error, setError] = useState('') const [autoCalculate, setAutoCalculate] = useState(true) // Reset form wenn Modal geöffnet wird useEffect(() => { if (isOpen && workorder) { setFormData({ serviceType: 'Remote', newStatus: workorder.status || 'Open', newResponseLevel: workorder.responseLevel || '', totalTime: 0, startDate: today, startTime: '', endDate: today, endTime: '', details: '', isComment: false }) setError('') setAutoCalculate(true) } }, [isOpen, workorder, today]) // Automatische Zeitberechnung useEffect(() => { if (autoCalculate && formData.startTime && formData.endTime && !formData.isComment) { try { const startHour = parseInt(formData.startTime.substring(0, 2)) const startMin = parseInt(formData.startTime.substring(2, 4)) const endHour = parseInt(formData.endTime.substring(0, 2)) const endMin = parseInt(formData.endTime.substring(2, 4)) if (!isNaN(startHour) && !isNaN(startMin) && !isNaN(endHour) && !isNaN(endMin)) { const startTotal = startHour * 60 + startMin const endTotal = endHour * 60 + endMin let diff = endTotal - startTotal if (diff < 0) { diff += 24 * 60 // Overnight } setFormData(prev => ({ ...prev, totalTime: diff })) } } catch (err) { // Ignoriere Fehler } } }, [formData.startTime, formData.endTime, formData.isComment, autoCalculate]) const handleChange = (field, value) => { setFormData(prev => ({ ...prev, [field]: value })) // Wenn totalTime manuell geändert wird, deaktiviere Auto-Berechnung if (field === 'totalTime') { setAutoCalculate(false) } } const handleSubmit = async (e) => { e.preventDefault() setLoading(true) setError('') try { if (!formData.details.trim()) { setError('Bitte Details eingeben') setLoading(false) return } const worksheetData = { woid: workorder.woid, workorderId: workorder.$id, serviceType: formData.serviceType, oldStatus: workorder.status, newStatus: formData.newStatus, oldResponseLevel: workorder.responseLevel || '', newResponseLevel: formData.newResponseLevel, totalTime: formData.isComment ? 0 : parseInt(formData.totalTime) || 0, startDate: formData.startDate, startTime: formData.startTime, endDate: formData.endDate, endTime: formData.endTime, details: formData.details, isComment: formData.isComment, employeeShort: user?.prefs?.shortCode || '' // Aus User-Preferences } const result = await onCreate(worksheetData, user) if (result.success) { onClose() } else { setError(result.error || 'Fehler beim Erstellen des Worksheets') } } catch (err) { console.error('Error creating worksheet:', err) setError(err.message || 'Ein unerwarteter Fehler ist aufgetreten') } finally { setLoading(false) } } if (!isOpen || !workorder) return null return (

Create New Worksheet - WOID {workorder.woid}

{error && (
{error}
)}
handleChange('totalTime', e.target.value)} disabled={formData.isComment} placeholder="0" /> {autoCalculate && formData.startTime && formData.endTime ? '✓ Automatisch berechnet' : 'Manuell eingeben'}
handleChange('startDate', e.target.value)} required />
handleChange('endDate', e.target.value)} required />
handleChange('startTime', e.target.value)} maxLength="4" />
handleChange('endTime', e.target.value)} maxLength="4" />