From 57c8964384220339ac3ef7dce99fe012ed4c7ba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20P=C3=B6ttker?= Date: Tue, 14 Jul 2026 10:55:04 +0200 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20Manuell=20bearbeiten=20?= =?UTF-8?q?=E2=80=93=20Speichern=20trotz=20fehlender=20Pflichtfelder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Im "Manuell bearbeiten"-Dialog (DocumentEditModal, isPosteingang=false) kann jetzt trotz leerer Pflichtfelder gespeichert werden: Schlägt die Formular- Validierung fehl, erscheint ein Bestätigungsdialog, der die fehlenden Pflicht- felder auflistet; per "Trotzdem speichern" wird ohne erneute Validierung gespeichert. Der Posteingang (isPosteingang=true) blockiert wie bisher. Die Kontonummer-Logik wurde in runSave() ausgelagert und von beiden Pfaden (normal + "trotzdem speichern") wiederverwendet. Co-Authored-By: Claude Opus 4.8 --- .../src/components/DocumentEditModal.tsx | 59 +++++++++++++------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/paperless-frontend/src/components/DocumentEditModal.tsx b/paperless-frontend/src/components/DocumentEditModal.tsx index dde6890..02382a7 100644 --- a/paperless-frontend/src/components/DocumentEditModal.tsx +++ b/paperless-frontend/src/components/DocumentEditModal.tsx @@ -294,28 +294,51 @@ export default function DocumentEditModal({ documentId, document, open, onClose, } }; + const runSave = async (values: any, isNext: boolean) => { + // Kontonummer-Logik (unverändert): neue Kontonummer ggf. bestätigen lassen. + const kontonummerReq = requirements.find(r => r.customFieldIndex === 5); + if (kontonummerReq && values['cf_5'] && values.correspondent) { + const kNummer = values['cf_5']; + const knData = await posteingangApi.getKontonummern(values.correspondent); + const exists = knData.some(k => k.Nummer === kNummer); + if (!exists) { + // Prompt user to save kontonummer + setKontonummerMissing({ correspondentId: values.correspondent, nummer: kNummer }); + return; // Stop saving, wait for confirmation + } + } + await handleSaveDocument(values, isNext); + }; + const handleSubmit = async (isNext: boolean = false) => { try { - const values = await form.validateFields(); - - // Kontonummer Logic - const kontonummerReq = requirements.find(r => r.customFieldIndex === 5); - if (kontonummerReq && values[`cf_5`] && values.correspondent) { - const kNummer = values[`cf_5`]; - const knData = await posteingangApi.getKontonummern(values.correspondent); - const exists = knData.some(k => k.Nummer === kNummer); - - if (!exists) { - // Prompt user to save kontonummer - setKontonummerMissing({ correspondentId: values.correspondent, nummer: kNummer }); - return; // Stop saving, wait for confirmation - } - } - - await handleSaveDocument(values, isNext); + const values = await form.validateFields(); + await runSave(values, isNext); } catch (e) { - // Validation failed + const errorFields = + (e as { errorFields?: { name: unknown; errors: string[] }[] })?.errorFields ?? []; + + // Kein Validierungsfehler, oder Posteingang → bisheriges Verhalten (stiller Abbruch). + if (errorFields.length === 0 || isPosteingang) { console.error("Form validation failed:", e); + return; + } + + // "Manuell bearbeiten": Speichern trotz fehlender Pflichtfelder mit Hinweis anbieten. + const missing = Array.from(new Set(errorFields.flatMap((f) => f.errors))); + Modal.confirm({ + title: 'Pflichtfelder unvollständig', + okText: 'Trotzdem speichern', + cancelText: 'Abbrechen', + content: ( +
+

Nicht alle Pflichtfelder sind ausgefüllt:

+
    {missing.map((m, i) =>
  • {m}
  • )}
+

Möchtest du trotzdem speichern?

+
+ ), + onOk: () => runSave(form.getFieldsValue(), isNext), + }); } };