+
+
+ {!datei && (
+
{
+ e.preventDefault();
+ setUeberZone(true);
+ }}
+ onDragLeave={() => setUeberZone(false)}
+ onDrop={beiAblegen}
+ onClick={() => eingabe.current?.click()}
+ onKeyDown={(e) => (e.key === 'Enter' || e.key === ' ') && eingabe.current?.click()}
+ role="button"
+ tabIndex={0}
+ >
+ Datei hierher ziehen
+
+ oder durchsuchen · mit Strg+V einfügen
+
+
+ PDF, JPEG, PNG, WebP, TIFF, HEIC · bis 20 MB
+
+
+ )}
+
+
onDatei(e.target.files?.[0] ?? null)}
+ />
+
+ {datei && (
+
+ {vorschau ? (
+

+ ) : (
+
+ {datei.type === 'application/pdf' ? 'PDF' : 'DAT'}
+
+ )}
+
+
+ {datei.name}
+
+
+ {lesbareGroesse(datei.size)}
+ {eingefuegt && ' · aus der Zwischenablage übernommen'}
+
+
+
+
+ )}
+
+ {status &&
{status.text}
}
+
+ );
+}
diff --git a/web/src/pages/Buchungen.tsx b/web/src/pages/Buchungen.tsx
index 1ee613e..87c296b 100644
--- a/web/src/pages/Buchungen.tsx
+++ b/web/src/pages/Buchungen.tsx
@@ -2,6 +2,8 @@ import { useEffect, useMemo, useState } from 'react';
import { api, useDaten } from '../lib/api';
import { useJahr } from '../lib/jahr';
import { BEHANDLUNG_LABEL, centAus, datum, eur, REGIME_LABEL } from '../lib/format';
+import { mitMandant } from '../lib/mandant';
+import BelegFeld from '../components/BelegFeld';
interface Konto {
nummer: string;
@@ -30,6 +32,9 @@ interface Buchung {
storniert: number;
festgeschrieben: number;
anlagegut_id: number | null;
+ beleg_datei: string | null;
+ beleg_name: string;
+ beleg_typ: string;
}
interface Aktivierung {
@@ -84,6 +89,8 @@ export default function Buchungen() {
const [form, setForm] = useState(LEER);
const [vorschau, setVorschau] = useState