'use client' import * as React from 'react' import { useActionState } from 'react' import { AlertCircle, CheckCircle2, Link2, Undo2, XCircle } from 'lucide-react' import { Alert, AlertDescription } from '@/components/ui/alert' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Absendeknopf } from '@/components/finanzen/eingaben' import { zahlungenVertragZuordnen, zahlungsgruppeAbhaken, zahlungsgruppeZurueckholen, type Formularzustand, } from '@/server/actions/finanzen' /** * „Kein Vertrag" — eine Gruppe dauerhaft aus der Liste nehmen. * * Die Begründung ist freiwillig, steht aber im Formular ganz vorn. In einem * Jahr weiß niemand mehr, warum „Stadtwerke Bamberg" abgehakt wurde, und * dann fängt die Prüfung von vorn an. Ein halber Satz jetzt spart das. */ export function AlsGeklaertAbhaken({ betreuteId, schluessel, anzeigename, }: { betreuteId: string schluessel: string anzeigename: string }) { const [zustand, absenden] = useActionState( zahlungsgruppeAbhaken, {}, ) const [offen, setOffen] = React.useState(false) if (!offen) { return (
{zustand.fehler && ( )}
) } return (

„{anzeigename}“ verschwindet aus der Liste. Zurückholen geht jederzeit.

Abhaken
) } /** Holt eine abgehakte Gruppe zurück in die Liste. */ export function Zurueckholen({ betreuteId, eintragId, }: { betreuteId: string eintragId: string }) { const [zustand, absenden] = useActionState( zahlungsgruppeZurueckholen, {}, ) return (
{zustand.fehler && ( {zustand.fehler} )}
) } /** * Zeigt die Rückmeldung der letzten Aktion. * * Bewusst getrennt von den Knöpfen: Nach dem Abhaken verschwindet die * ganze Zeile samt Knopf, und mit ihr die Erfolgsmeldung. Sie hier * anzuzeigen wäre sinnlos — deshalb steht der Erfolg als kurzer Hinweis * oben auf der Seite, sobald die Liste neu geladen ist. */ export function Rueckmeldung({ text }: { text: string | null }) { if (!text) return null return ( ) } /** * Ordnet alle noch offenen Buchungen einer Gruppe dem Vertrag zu. * * Der Sinn dieses Knopfes ist die Menge: Eine monatliche Prämie über drei * Jahre sind 36 Buchungen. Sie einzeln anzuklicken wäre genau die stumpfe * Arbeit, die diese Zuordnung abschaffen soll. */ export function ZahlungenZuordnen({ betreuteId, vertragId, vertragBezeichnung, buchungIds, }: { betreuteId: string vertragId: string vertragBezeichnung: string buchungIds: string[] }) { const [zustand, absenden] = useActionState( zahlungenVertragZuordnen, {}, ) if (buchungIds.length === 0) return null return (
{zustand.fehler && ( {zustand.fehler} )} {zustand.erfolg && ( {zustand.erfolg} )} zu „{vertragBezeichnung}“
) }