import { useState, useEffect } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { Link } from 'react-router-dom'; import { appSettingsApi } from '../../services/api'; import Card from '../../components/ui/Card'; import Input from '../../components/ui/Input'; import Button from '../../components/ui/Button'; import { ArrowLeft, Clock, AlertTriangle, AlertCircle, CheckCircle } from 'lucide-react'; export default function DeadlineSettings() { const queryClient = useQueryClient(); const { data: settingsData, isLoading } = useQuery({ queryKey: ['app-settings'], queryFn: () => appSettingsApi.getAll(), }); const [criticalDays, setCriticalDays] = useState('14'); const [warningDays, setWarningDays] = useState('42'); const [okDays, setOkDays] = useState('90'); const [hasChanges, setHasChanges] = useState(false); useEffect(() => { if (settingsData?.data) { setCriticalDays(settingsData.data.deadlineCriticalDays || '14'); setWarningDays(settingsData.data.deadlineWarningDays || '42'); setOkDays(settingsData.data.deadlineOkDays || '90'); setHasChanges(false); } }, [settingsData]); const updateMutation = useMutation({ mutationFn: (settings: Record) => appSettingsApi.update(settings), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['app-settings'] }); queryClient.invalidateQueries({ queryKey: ['contract-cockpit'] }); setHasChanges(false); }, }); const handleSave = () => { // Validierung const critical = parseInt(criticalDays); const warning = parseInt(warningDays); const ok = parseInt(okDays); if (isNaN(critical) || isNaN(warning) || isNaN(ok)) { alert('Bitte gültige Zahlen eingeben'); return; } if (critical >= warning || warning >= ok) { alert('Die Werte müssen aufsteigend sein: Kritisch < Warnung < OK'); return; } updateMutation.mutate({ deadlineCriticalDays: criticalDays, deadlineWarningDays: warningDays, deadlineOkDays: okDays, }); }; const handleChange = (setter: (value: string) => void, value: string) => { setter(value); setHasChanges(true); }; if (isLoading) { return (
Laden...
); } return (

Fristenschwellen

Definiere, ab wann Vertragsfristen als kritisch (rot), Warnung (gelb) oder OK (grün) angezeigt werden sollen. Die Werte geben die Anzahl der Tage bis zur Frist an.

{/* Kritisch (Rot) */}

Fristen mit weniger als X Tagen werden rot markiert

handleChange(setCriticalDays, e.target.value)} className="w-24" /> Tage
{/* Warnung (Gelb) */}

Fristen mit weniger als X Tagen werden gelb markiert

handleChange(setWarningDays, e.target.value)} className="w-24" /> Tage
{/* OK (Grün) */}

Fristen mit weniger als X Tagen werden grün markiert (darüber nicht angezeigt)

handleChange(setOkDays, e.target.value)} className="w-24" /> Tage

Beispiel: Bei 14/42/90 Tagen wird eine Frist die in 10 Tagen abläuft rot, eine in 30 Tagen gelb, und eine in 60 Tagen grün markiert.

); }