import { useState } from 'react' import { FaChevronDown, FaPlay, FaStop, FaPlus, FaClockRotateLeft, FaPen } from 'react-icons/fa6' import { formatDistanceToNow, format } from 'date-fns' import { de } from 'date-fns/locale' import StatusDropdown from './StatusDropdown' import PriorityDropdown from './PriorityDropdown' import EditorDropdown from './EditorDropdown' import ResponseDropdown from './ResponseDropdown' import CreateWorksheetModal from './CreateWorksheetModal' import StatusHistoryModal from './StatusHistoryModal' import WorksheetList from './WorksheetList' import WorksheetStats from './WorksheetStats' import TicketAssignedProjectsPanel from './TicketAssignedProjectsPanel' import TicketProjectsModal from './TicketProjectsModal' import InvoicePanel from './InvoicePanel' import DocumentsPanel from './DocumentsPanel' import Tabs from './ui/Tabs' import Badge from './ui/Badge' import { StatusPill, PriorityPill } from './ui/StatusPill' import { useWorksheets } from '../hooks/useWorksheets' const TABS = [ { id: 'details', label: 'Details' }, { id: 'worksheets', label: 'Arbeitsblaetter' }, { id: 'invoices', label: 'Rechnungen' }, { id: 'documents', label: 'Dokumente' }, { id: 'project', label: 'Projekt / Preview' }, ] export default function TicketCard({ ticket, onUpdate }) { const [expanded, setExpanded] = useState(false) const [activeTab, setActiveTab] = useState('details') const [showCreateWorksheet, setShowCreateWorksheet] = useState(false) const [showHistoryModal, setShowHistoryModal] = useState(false) const [showProjectsModal, setShowProjectsModal] = useState(false) const [projectsRefreshKey, setProjectsRefreshKey] = useState(0) const { worksheets, loading: worksheetsLoading, createWorksheet, getTotalTime } = useWorksheets( expanded ? ticket.woid : null ) const createdAt = new Date(ticket.$createdAt || ticket.createdAt) const elapsed = formatDistanceToNow(createdAt, { locale: de, addSuffix: true }) const stop = (e) => e.stopPropagation() const handleCreateWorksheet = async (worksheetData, currentUser) => { const result = await createWorksheet(worksheetData, currentUser) if (result.success && worksheetData.newStatus !== ticket.status) { await onUpdate(ticket.$id, { status: worksheetData.newStatus, responseLevel: worksheetData.newResponseLevel || ticket.responseLevel, }) } return result } return (
setExpanded((e) => !e)}>
{ticket.woid || ticket.$id?.slice(-5)} {elapsed}
{ticket.customerName || 'Unbekannt'} {ticket.customerLocation && · {ticket.customerLocation}}
{ticket.topic || ticket.title || 'Kein Betreff'}
{ticket.type && {ticket.type}} {ticket.systemType && ticket.systemType !== 'n/a' && {ticket.systemType}} {ticket.serviceType && {ticket.serviceType}}
onUpdate(ticket.$id, { status: v })} />
onUpdate(ticket.$id, { priority: v })} />
setExpanded((e) => !e)} style={{ cursor: 'pointer' }} />
{expanded && (
{ticket.startDate || format(createdAt, 'dd.MM.yyyy')} {ticket.deadline || '-'} {ticket.requestedBy && Angefragt von: {ticket.requestedBy}}
onUpdate(ticket.$id, { assignedTo: v })} />
onUpdate(ticket.$id, { responseLevel: v })} />
{activeTab === 'details' && (
Ticket-Beschreibung

{ticket.details || 'Keine Details vorhanden.'}

)} {activeTab === 'worksheets' && (
{worksheets.length > 0 && (
)}
)} {activeTab === 'invoices' && } {activeTab === 'documents' && } {activeTab === 'project' && (
)}
)} setShowCreateWorksheet(false)} workorder={ticket} onCreate={handleCreateWorksheet} /> setShowHistoryModal(false)} worksheets={worksheets} ticket={ticket} /> setShowProjectsModal(false)} ticket={ticket} onUpdated={() => setProjectsRefreshKey((k) => k + 1)} />
) }