'use client' import React from 'react' import { Toast } from './_components/Toast' import { CompleteModal } from './_components/CompleteModal' import { SkipModal } from './_components/SkipModal' import { TaskFormModal } from './_components/TaskFormModal' import { TaskDetailModal } from './_components/TaskDetailModal' import { CalendarView } from './_components/CalendarView' import { CATEGORY_LABELS, CATEGORY_COLORS, STATUS_LABELS, STATUS_COLORS, STATUS_ICONS, FREQUENCY_LABELS, formatDate, dueLabel, dueLabelColor, } from './_components/types' import { useProcessTasks } from './_hooks/useProcessTasks' export default function ProcessTasksPage() { const p = useProcessTasks() return (

Compliance Process Manager

Wiederkehrende Compliance-Aufgaben verwalten und nachverfolgen

{[{ key: 'overview' as const, label: 'Uebersicht' }, { key: 'all' as const, label: 'Alle Aufgaben' }, { key: 'calendar' as const, label: 'Kalender' }].map(tab => ( ))}
{p.activeTab === 'overview' && (
{p.stats ? (
Ueberfaellig
{p.stats.overdue_count}
Sofortiger Handlungsbedarf
Diese Woche
{p.stats.due_7_days}
Naechste 7 Tage
Diesen Monat
{p.stats.due_30_days}
Naechste 30 Tage
Erledigt
{p.stats.by_status.completed || 0}
von {p.stats.total} Aufgaben
) : (
{[1, 2, 3, 4].map(i => (
))}
)} {p.stats && Object.keys(p.stats.by_category).length > 0 && (

Nach Kategorie

{Object.entries(p.stats.by_category).map(([cat, count]) => ( {CATEGORY_LABELS[cat] || cat}: {count} ))}
)}

Naechste faellige Aufgaben

{p.upcomingTasks.length === 0 ? (

Keine Aufgaben in den naechsten 30 Tagen faellig.

{p.stats && p.stats.total === 0 && ( )}
) : (
{p.upcomingTasks.slice(0, 5).map(t => (
p.setDetailTask(t)}> {STATUS_ICONS[t.status]}

{t.title}

{CATEGORY_LABELS[t.category]} {FREQUENCY_LABELS[t.frequency]}

{dueLabel(t.next_due_date)}

{formatDate(t.next_due_date)}

))}
)}
)} {p.activeTab === 'all' && (
{p.totalTasks} Aufgaben
{p.loading ? (
{[1, 2, 3, 4, 5].map(i => (
))}
) : p.tasks.length === 0 ? (

Keine Aufgaben gefunden

Erstellen Sie eine neue Aufgabe oder laden Sie die Standard-Aufgaben.

) : ( {p.tasks.map(t => ( p.setDetailTask(t)}> ))}
Status Titel Kategorie Frequenz Faellig am Zustaendig Aktionen
{STATUS_ICONS[t.status]}

{t.title}

{t.task_code}

{CATEGORY_LABELS[t.category] || t.category} {FREQUENCY_LABELS[t.frequency] || t.frequency} {formatDate(t.next_due_date)}

{dueLabel(t.next_due_date)}

{t.assigned_to || '\u2014'} e.stopPropagation()}>
{t.status !== 'completed' && ( )} {t.status !== 'completed' && ( )}
)}
{p.totalPages > 1 && (
Seite {p.page + 1} von {p.totalPages}
)}
)} {p.activeTab === 'calendar' && (
arr.findIndex(x => x.id === t.id) === i)} />
)} {p.showForm && p.setShowForm(false)} onSave={p.handleCreate} />} {p.editTask && ( p.setEditTask(null)} onSave={p.handleUpdate} /> )} {p.detailTask && ( p.setDetailTask(null)} onComplete={t => { p.setDetailTask(null); p.setCompleteTask(t) }} onSkip={t => { p.setDetailTask(null); p.setSkipTask(t) }} onEdit={t => { p.setDetailTask(null); p.setEditTask(t) }} onDelete={p.handleDelete} /> )} {p.completeTask && ( p.setCompleteTask(null)} onComplete={p.handleComplete} /> )} {p.skipTask && ( p.setSkipTask(null)} onSkip={p.handleSkip} /> )} {p.toast && p.setToast(null)} />}
) }