fix(buchhaltung): format transaction IDs as YYYY/NR and deduplicate dashboard widgets

This commit is contained in:
Matthias Hochmeister
2026-04-14 15:00:38 +02:00
parent a94d486a42
commit e6b6639fe9
4 changed files with 15 additions and 4 deletions

View File

@@ -382,11 +382,13 @@ async function getBankkontoStatement(
const where = `WHERE ${conditions.join(' AND ')}`;
const txResult = await pool.query(
`SELECT t.*,
hy.jahr as haushaltsjahr_jahr,
k.bezeichnung as konto_bezeichnung,
k.kontonummer as konto_kontonummer,
bk.bezeichnung as bankkonto_bezeichnung,
bk2.bezeichnung AS transfer_ziel_bezeichnung
FROM buchhaltung_transaktionen t
JOIN buchhaltung_haushaltsjahre hy ON t.haushaltsjahr_id = hy.id
LEFT JOIN buchhaltung_konten k ON t.konto_id = k.id
LEFT JOIN buchhaltung_bankkonten bk ON t.bankkonto_id = bk.id
LEFT JOIN buchhaltung_bankkonten bk2 ON t.transfer_ziel_bankkonto_id = bk2.id
@@ -535,11 +537,13 @@ async function getKontoDetail(kontoId: number) {
const transaktionenResult = await pool.query(
`SELECT t.*,
hy.jahr as haushaltsjahr_jahr,
k.bezeichnung as konto_bezeichnung,
k.kontonummer as konto_kontonummer,
bk.bezeichnung as bankkonto_bezeichnung,
bk2.bezeichnung AS transfer_ziel_bezeichnung
FROM buchhaltung_transaktionen t
JOIN buchhaltung_haushaltsjahre hy ON t.haushaltsjahr_id = hy.id
LEFT JOIN buchhaltung_konten k ON t.konto_id = k.id
LEFT JOIN buchhaltung_bankkonten bk ON t.bankkonto_id = bk.id
LEFT JOIN buchhaltung_bankkonten bk2 ON t.transfer_ziel_bankkonto_id = bk2.id
@@ -833,11 +837,13 @@ async function listTransaktionen(filters: {
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
const result = await pool.query(
`SELECT t.*,
hy.jahr as haushaltsjahr_jahr,
k.bezeichnung as konto_bezeichnung,
k.kontonummer as konto_kontonummer,
bk.bezeichnung as bankkonto_bezeichnung,
bk2.bezeichnung AS transfer_ziel_bezeichnung
FROM buchhaltung_transaktionen t
JOIN buchhaltung_haushaltsjahre hy ON t.haushaltsjahr_id = hy.id
LEFT JOIN buchhaltung_konten k ON t.konto_id = k.id
LEFT JOIN buchhaltung_bankkonten bk ON t.bankkonto_id = bk.id
LEFT JOIN buchhaltung_bankkonten bk2 ON t.transfer_ziel_bankkonto_id = bk2.id
@@ -856,11 +862,13 @@ async function getTransaktionById(id: number) {
try {
const txResult = await pool.query(
`SELECT t.*,
hy.jahr as haushaltsjahr_jahr,
k.bezeichnung as konto_bezeichnung,
k.kontonummer as konto_kontonummer,
bk.bezeichnung as bankkonto_bezeichnung,
bk2.bezeichnung AS transfer_ziel_bezeichnung
FROM buchhaltung_transaktionen t
JOIN buchhaltung_haushaltsjahre hy ON t.haushaltsjahr_id = hy.id
LEFT JOIN buchhaltung_konten k ON t.konto_id = k.id
LEFT JOIN buchhaltung_bankkonten bk ON t.bankkonto_id = bk.id
LEFT JOIN buchhaltung_bankkonten bk2 ON t.transfer_ziel_bankkonto_id = bk2.id
@@ -1484,10 +1492,12 @@ async function exportTransaktionenCsv(haushaltsjahrId: number): Promise<string>
try {
const result = await pool.query(
`SELECT t.*,
hy.jahr as haushaltsjahr_jahr,
k.bezeichnung as konto_bezeichnung,
k.kontonummer as konto_kontonummer,
bk.bezeichnung as bankkonto_bezeichnung
FROM buchhaltung_transaktionen t
JOIN buchhaltung_haushaltsjahre hy ON t.haushaltsjahr_id = hy.id
LEFT JOIN buchhaltung_konten k ON t.konto_id = k.id
LEFT JOIN buchhaltung_bankkonten bk ON t.bankkonto_id = bk.id
WHERE t.haushaltsjahr_id = $1
@@ -1516,7 +1526,7 @@ async function exportTransaktionenCsv(haushaltsjahrId: number): Promise<string>
return s.includes(';') || s.includes('"') || s.includes('\n') ? `"${s.replace(/"/g, '""')}"` : s;
};
return [
row.laufende_nummer ?? `E${row.id}`,
row.laufende_nummer != null ? `${row.haushaltsjahr_jahr}/${row.laufende_nummer}` : `E${row.id}`,
datum,
row.typ === 'einnahme' ? 'Einnahme' : 'Ausgabe',
escCsv(row.beschreibung),