feat(buchhaltung): add transfers, bank statements, Haushaltsplan, and PDF export

This commit is contained in:
Matthias Hochmeister
2026-03-30 17:05:18 +02:00
parent 2eb59e9ff1
commit 5acfd7cc4f
14 changed files with 1911 additions and 10 deletions

View File

@@ -11,7 +11,11 @@ import type {
Freigabe,
Kategorie,
ErstattungFormData, ErstattungLinks,
TransferFormData,
BuchhaltungAudit,
BuchhaltungEinstellungen,
BankkontoStatement,
Planung, PlanungDetail, Planposition,
} from '../types/buchhaltung.types';
export const buchhaltungApi = {
@@ -67,6 +71,20 @@ export const buchhaltungApi = {
deleteBankkonto: async (id: number): Promise<void> => {
await api.delete(`/api/buchhaltung/bankkonten/${id}`);
},
getBankkontoStatement: async (id: number, params?: { von?: string; bis?: string }): Promise<BankkontoStatement> => {
const qs = new URLSearchParams();
if (params?.von) qs.set('von', params.von);
if (params?.bis) qs.set('bis', params.bis);
const r = await api.get(`/api/buchhaltung/bankkonten/${id}/transaktionen?${qs.toString()}`);
const d = r.data;
return {
bankkonto: d.konto,
einnahmen: d.summary.gesamteinnahmen,
ausgaben: d.summary.gesamtausgaben,
saldo: d.summary.saldo,
rows: d.rows,
};
},
// ── Konten ───────────────────────────────────────────────────────────────────
getKonten: async (haushaltsjahrId: number): Promise<Konto[]> => {
@@ -220,9 +238,60 @@ export const buchhaltungApi = {
return r.data.data;
},
// ── Transfers ──────────────────────────────────────────────────────────────
createTransfer: async (data: TransferFormData): Promise<{ debit: Transaktion; credit: Transaktion }> => {
const r = await api.post('/api/buchhaltung/transfers', data);
return r.data.data;
},
// ── Audit ─────────────────────────────────────────────────────────────────
getAudit: async (transaktionId: number): Promise<BuchhaltungAudit[]> => {
const r = await api.get(`/api/buchhaltung/audit/${transaktionId}`);
return r.data.data;
},
// ── Einstellungen ─────────────────────────────────────────────────────────
getEinstellungen: async (): Promise<BuchhaltungEinstellungen> => {
const r = await api.get('/api/buchhaltung/einstellungen');
return r.data.data;
},
setEinstellungen: async (data: Record<string, unknown>): Promise<void> => {
await api.put('/api/buchhaltung/einstellungen', data);
},
// ── Planung ───────────────────────────────────────────────────────────────
listPlanungen: async (): Promise<Planung[]> => {
const r = await api.get('/api/buchhaltung/planung');
return r.data.data;
},
getPlanung: async (id: number): Promise<PlanungDetail> => {
const r = await api.get(`/api/buchhaltung/planung/${id}`);
return r.data.data;
},
createPlanung: async (data: { haushaltsjahr_id?: number; bezeichnung: string }): Promise<Planung> => {
const r = await api.post('/api/buchhaltung/planung', data);
return r.data.data;
},
updatePlanung: async (id: number, data: { bezeichnung?: string; status?: string }): Promise<Planung> => {
const r = await api.put(`/api/buchhaltung/planung/${id}`, data);
return r.data.data;
},
deletePlanung: async (id: number): Promise<void> => {
await api.delete(`/api/buchhaltung/planung/${id}`);
},
createPlanposition: async (planungId: number, data: { konto_id?: number | null; bezeichnung: string; budget_gwg?: number; budget_anlagen?: number; budget_instandhaltung?: number; notizen?: string; sort_order?: number }): Promise<Planposition> => {
const r = await api.post(`/api/buchhaltung/planung/${planungId}/positionen`, data);
return r.data.data;
},
updatePlanposition: async (id: number, data: Partial<{ konto_id: number | null; bezeichnung: string; budget_gwg: number; budget_anlagen: number; budget_instandhaltung: number; notizen: string; sort_order: number }>): Promise<Planposition> => {
const r = await api.put(`/api/buchhaltung/planung/positionen/${id}`, data);
return r.data.data;
},
deletePlanposition: async (id: number): Promise<void> => {
await api.delete(`/api/buchhaltung/planung/positionen/${id}`);
},
createHaushaltsjahrFromPlan: async (planungId: number): Promise<Haushaltsjahr> => {
const r = await api.post(`/api/buchhaltung/planung/${planungId}/create-haushaltsjahr`);
return r.data.data;
},
};