diff --git a/backend/src/controllers/buchhaltung.controller.ts b/backend/src/controllers/buchhaltung.controller.ts
index 68812d5..72a0060 100644
--- a/backend/src/controllers/buchhaltung.controller.ts
+++ b/backend/src/controllers/buchhaltung.controller.ts
@@ -167,9 +167,10 @@ class BuchhaltungController {
try {
const data = await buchhaltungService.createKonto(req.body, req.user!.id);
res.status(201).json({ success: true, data });
- } catch (error) {
+ } catch (error: any) {
logger.error('BuchhaltungController.createKonto', { error });
- res.status(500).json({ success: false, message: 'Konto konnte nicht erstellt werden' });
+ const status = error.statusCode || 500;
+ res.status(status).json({ success: false, message: error.message || 'Konto konnte nicht erstellt werden' });
}
}
diff --git a/backend/src/services/buchhaltung.service.ts b/backend/src/services/buchhaltung.service.ts
index 8842076..aa4f151 100644
--- a/backend/src/services/buchhaltung.service.ts
+++ b/backend/src/services/buchhaltung.service.ts
@@ -375,8 +375,11 @@ async function createKonto(
[data.haushaltsjahr_id, data.konto_typ_id || null, data.kontonummer, data.bezeichnung, data.parent_id || null, data.budget_gwg || 0, data.budget_anlagen || 0, data.budget_instandhaltung || 0, data.notizen || null, userId]
);
return result.rows[0];
- } catch (error) {
+ } catch (error: any) {
logger.error('BuchhaltungService.createKonto failed', { error });
+ if (error.code === '23505' && error.constraint === 'buchhaltung_konten_haushaltsjahr_id_kontonummer_key') {
+ throw Object.assign(new Error(`Kontonummer "${data.kontonummer}" existiert bereits in diesem Haushaltsjahr`), { statusCode: 409 });
+ }
throw new Error('Konto konnte nicht erstellt werden');
}
}
diff --git a/frontend/src/pages/Buchhaltung.tsx b/frontend/src/pages/Buchhaltung.tsx
index c37de47..2aa5476 100644
--- a/frontend/src/pages/Buchhaltung.tsx
+++ b/frontend/src/pages/Buchhaltung.tsx
@@ -268,7 +268,7 @@ function KontoDialog({
-
+
);
@@ -992,7 +992,7 @@ function KontenTab({ haushaltsjahre, selectedJahrId, onJahrChange }: {
const createKontoMut = useMutation({
mutationFn: buchhaltungApi.createKonto,
onSuccess: () => { qc.invalidateQueries({ queryKey: ['buchhaltung-konten'] }); qc.invalidateQueries({ queryKey: ['kontenTree'] }); setKontoDialog({ open: false }); showSuccess('Konto erstellt'); },
- onError: () => showError('Konto konnte nicht erstellt werden'),
+ onError: (err: any) => showError(err?.response?.data?.message || 'Konto konnte nicht erstellt werden'),
});
const updateKontoMut = useMutation({
mutationFn: ({ id, data }: { id: number; data: Partial }) => buchhaltungApi.updateKonto(id, data),