feat(buchhaltung): recurring job, budget alerts, audit endpoint, konto-typen CRUD
This commit is contained in:
@@ -115,6 +115,45 @@ class BuchhaltungController {
|
||||
}
|
||||
}
|
||||
|
||||
async createKontoTyp(req: Request, res: Response): Promise<void> {
|
||||
try {
|
||||
const data = await buchhaltungService.createKontoTyp(req.body);
|
||||
res.status(201).json({ success: true, data });
|
||||
} catch (error) {
|
||||
logger.error('BuchhaltungController.createKontoTyp', { error });
|
||||
res.status(500).json({ success: false, message: 'Kontotyp konnte nicht erstellt werden' });
|
||||
}
|
||||
}
|
||||
|
||||
async updateKontoTyp(req: Request, res: Response): Promise<void> {
|
||||
const id = parseInt(param(req, 'id'), 10);
|
||||
if (isNaN(id)) { res.status(400).json({ success: false, message: 'Ungültige ID' }); return; }
|
||||
try {
|
||||
const data = await buchhaltungService.updateKontoTyp(id, req.body);
|
||||
res.json({ success: true, data });
|
||||
} catch (error) {
|
||||
logger.error('BuchhaltungController.updateKontoTyp', { error });
|
||||
res.status(500).json({ success: false, message: 'Kontotyp konnte nicht aktualisiert werden' });
|
||||
}
|
||||
}
|
||||
|
||||
async deleteKontoTyp(req: Request, res: Response): Promise<void> {
|
||||
const id = parseInt(param(req, 'id'), 10);
|
||||
if (isNaN(id)) { res.status(400).json({ success: false, message: 'Ungültige ID' }); return; }
|
||||
try {
|
||||
await buchhaltungService.deleteKontoTyp(id);
|
||||
res.json({ success: true });
|
||||
} catch (error) {
|
||||
const statusCode = (error as any).statusCode;
|
||||
if (statusCode === 409) {
|
||||
res.status(409).json({ success: false, message: (error as Error).message });
|
||||
return;
|
||||
}
|
||||
logger.error('BuchhaltungController.deleteKontoTyp', { error });
|
||||
res.status(500).json({ success: false, message: 'Kontotyp konnte nicht gelöscht werden' });
|
||||
}
|
||||
}
|
||||
|
||||
// ── Bankkonten ───────────────────────────────────────────────────────────────
|
||||
|
||||
async listBankkonten(_req: Request, res: Response): Promise<void> {
|
||||
@@ -486,6 +525,20 @@ class BuchhaltungController {
|
||||
}
|
||||
}
|
||||
|
||||
// ── Audit ────────────────────────────────────────────────────────────────────
|
||||
|
||||
async getAudit(req: Request, res: Response): Promise<void> {
|
||||
const id = parseInt(param(req, 'transaktionId'), 10);
|
||||
if (isNaN(id)) { res.status(400).json({ success: false, message: 'Ungültige ID' }); return; }
|
||||
try {
|
||||
const data = await buchhaltungService.getAuditByTransaktion(id);
|
||||
res.json({ success: true, data });
|
||||
} catch (error) {
|
||||
logger.error('BuchhaltungController.getAudit', { error });
|
||||
res.status(500).json({ success: false, message: 'Audit konnte nicht geladen werden' });
|
||||
}
|
||||
}
|
||||
|
||||
// ── Erstattungen ────────────────────────────────────────────────────────────
|
||||
|
||||
async createErstattung(req: Request, res: Response): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user