import React, { useState } from 'react'; import { X, CheckCircle2, XCircle, Play, Clock, UserCheck, Award, FileText } from 'lucide-react'; import { EmployeeTraining, TrainingStatus } from '../../types'; interface TrainingManagementModalProps { training: EmployeeTraining; onClose: () => void; onUpdate: (trainingId: number, updates: Partial) => Promise; } export const TrainingManagementModal: React.FC = ({ training, onClose, onUpdate }) => { const [status, setStatus] = useState(training.status || 'in_progress'); const [completionDate, setCompletionDate] = useState(training.completionDate || ''); const [score, setScore] = useState(training.score?.toString() || ''); const [passed, setPassed] = useState(training.passed ?? null); const [certificateNumber, setCertificateNumber] = useState(training.certificateNumber || ''); const [notes, setNotes] = useState(training.notes || ''); const [saving, setSaving] = useState(false); const handleStatusChange = (newStatus: TrainingStatus) => { setStatus(newStatus); // Автоматически устанавливаем дату завершения при статусе "completed" if (newStatus === 'completed' && !completionDate) { setCompletionDate(new Date().toISOString().split('T')[0]); setPassed(true); } else if (newStatus === 'failed') { setPassed(false); } else if (newStatus === 'cancelled') { setPassed(null); } }; const handleSave = async () => { try { setSaving(true); const updates: Partial = { status, completionDate: completionDate || undefined, score: score ? parseFloat(score) : undefined, passed, certificateNumber: certificateNumber || undefined, notes: notes || undefined }; await onUpdate(training.id, updates); onClose(); } catch (error) { console.error('Error updating training:', error); alert('Ошибка при обновлении обучения'); } finally { setSaving(false); } }; const getStatusIcon = (status: TrainingStatus) => { switch (status) { case 'completed': return ; case 'failed': return ; case 'cancelled': return ; case 'in_progress': return ; case 'not_started': return ; default: return ; } }; const getStatusLabel = (status: TrainingStatus) => { const labels: Record = { 'not_started': 'Не начато', 'in_progress': 'В процессе', 'completed': 'Завершено', 'failed': 'Не пройдено', 'expired': 'Просрочено', 'cancelled': 'Отменено' }; return labels[status] || status; }; return (
{/* Header */}

Управление обучением

{training.programTitle} • {training.employeeName}

{/* Статус обучения */}
{(['in_progress', 'completed', 'failed', 'cancelled'] as TrainingStatus[]).map((s) => ( ))}
{/* Посещаемость (можно отметить в примечаниях) */}

Посещаемость

Отметьте посещаемость в примечаниях ниже (например: "Посетил все занятия" или "Не посетил 2 из 5 занятий")

{/* Детали завершения (показываются только для завершенных/не пройденных) */} {(status === 'completed' || status === 'failed') && ( <>
setCompletionDate(e.target.value)} className="w-full px-4 py-3 border border-slate-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-primary-500" />
setScore(e.target.value)} className="w-full px-4 py-3 border border-slate-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-primary-500" placeholder="0-100" />
{status === 'completed' && (
setCertificateNumber(e.target.value)} className="w-full px-4 py-3 border border-slate-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-primary-500" placeholder="СЕРТ-2024-001" />
)} )} {/* Примечания */}