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, CreditCard } 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 [docCriticalDays, setDocCriticalDays] = useState('30'); const [docWarningDays, setDocWarningDays] = 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'); setDocCriticalDays(settingsData.data.documentExpiryCriticalDays || '30'); setDocWarningDays(settingsData.data.documentExpiryWarningDays || '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 Vertragsfristen 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; } // Validierung Ausweis-Fristen const docCrit = parseInt(docCriticalDays); const docWarn = parseInt(docWarningDays); if (isNaN(docCrit) || isNaN(docWarn)) { alert('Bitte gültige Zahlen für Ausweis-Fristen eingeben'); return; } if (docCrit >= docWarn) { alert('Ausweis-Fristen: Kritisch muss kleiner als Warnung sein'); return; } updateMutation.mutate({ deadlineCriticalDays: criticalDays, deadlineWarningDays: warningDays, deadlineOkDays: okDays, documentExpiryCriticalDays: docCriticalDays, documentExpiryWarningDays: docWarningDays, }); }; 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.

Ab wann ablaufende Ausweise im Cockpit als Warnung oder kritisch angezeigt werden.

{/* Kritisch (Rot) */}

Ausweise die in weniger als X Tagen ablaufen werden rot markiert

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

Ausweise die in weniger als X Tagen ablaufen werden gelb markiert

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