gdpr audit implemented, email log, vollmachten, pdf delete cancel data privacy and vollmachten, removed message no id card in engergy car, and other contracts that are not telecom contracts, added insert counter for engery

This commit is contained in:
2026-03-21 11:59:53 +01:00
parent 89cf92eaf5
commit f2876f877e
1491 changed files with 265550 additions and 1292 deletions
@@ -5,7 +5,7 @@ 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';
import { ArrowLeft, Clock, AlertTriangle, AlertCircle, CheckCircle, CreditCard } from 'lucide-react';
export default function DeadlineSettings() {
const queryClient = useQueryClient();
@@ -18,6 +18,8 @@ export default function DeadlineSettings() {
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(() => {
@@ -25,6 +27,8 @@ export default function DeadlineSettings() {
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]);
@@ -39,7 +43,7 @@ export default function DeadlineSettings() {
});
const handleSave = () => {
// Validierung
// Validierung Vertragsfristen
const critical = parseInt(criticalDays);
const warning = parseInt(warningDays);
const ok = parseInt(okDays);
@@ -54,10 +58,26 @@ export default function DeadlineSettings() {
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,
});
};
@@ -163,19 +183,79 @@ export default function DeadlineSettings() {
</div>
</div>
<div className="mt-6 pt-4 border-t flex justify-between items-center">
<div className="mt-6 pt-4 border-t">
<p className="text-sm text-gray-500">
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.
</p>
<Button
onClick={handleSave}
disabled={!hasChanges || updateMutation.isPending}
>
{updateMutation.isPending ? 'Speichere...' : 'Speichern'}
</Button>
</div>
</Card>
<Card title="Ausweis-Ablauffristen" className="mt-6">
<div className="flex items-center gap-2 mb-4">
<CreditCard className="w-5 h-5 text-gray-500" />
<p className="text-gray-600">
Ab wann ablaufende Ausweise im Cockpit als Warnung oder kritisch angezeigt werden.
</p>
</div>
<div className="space-y-6">
{/* Kritisch (Rot) */}
<div className="flex items-center gap-4 p-4 bg-red-50 border border-red-200 rounded-lg">
<AlertCircle className="w-8 h-8 text-red-500 flex-shrink-0" />
<div className="flex-1">
<label className="block font-medium text-red-800 mb-1">
Kritisch (Rot)
</label>
<p className="text-sm text-red-600 mb-2">
Ausweise die in weniger als X Tagen ablaufen werden rot markiert
</p>
<div className="flex items-center gap-2">
<Input
type="number"
min="1"
value={docCriticalDays}
onChange={(e) => handleChange(setDocCriticalDays, e.target.value)}
className="w-24"
/>
<span className="text-red-700">Tage</span>
</div>
</div>
</div>
{/* Warnung (Gelb) */}
<div className="flex items-center gap-4 p-4 bg-yellow-50 border border-yellow-200 rounded-lg">
<AlertTriangle className="w-8 h-8 text-yellow-500 flex-shrink-0" />
<div className="flex-1">
<label className="block font-medium text-yellow-800 mb-1">
Warnung (Gelb)
</label>
<p className="text-sm text-yellow-600 mb-2">
Ausweise die in weniger als X Tagen ablaufen werden gelb markiert
</p>
<div className="flex items-center gap-2">
<Input
type="number"
min="1"
value={docWarningDays}
onChange={(e) => handleChange(setDocWarningDays, e.target.value)}
className="w-24"
/>
<span className="text-yellow-700">Tage</span>
</div>
</div>
</div>
</div>
</Card>
<div className="mt-6 flex justify-end">
<Button
onClick={handleSave}
disabled={!hasChanges || updateMutation.isPending}
>
{updateMutation.isPending ? 'Speichere...' : 'Speichern'}
</Button>
</div>
</div>
);
}