fix(buchhaltung): show Übersicht tab first and count all booked transactions in budget overview
This commit is contained in:
@@ -496,10 +496,11 @@ async function getKontenTree(haushaltsjahrId: number) {
|
||||
kt.bezeichnung as konto_typ_bezeichnung, kt.art as konto_typ_art,
|
||||
pk.bezeichnung AS parent_bezeichnung,
|
||||
k.kategorie_id, kat.bezeichnung AS kategorie_bezeichnung,
|
||||
COALESCE(SUM(CASE WHEN t.typ='ausgabe' AND t.ausgaben_typ='gwg' AND t.status='gebucht' THEN t.betrag ELSE 0 END), 0) AS spent_gwg,
|
||||
COALESCE(SUM(CASE WHEN t.typ='ausgabe' AND t.ausgaben_typ='anlagen' AND t.status='gebucht' THEN t.betrag ELSE 0 END), 0) AS spent_anlagen,
|
||||
COALESCE(SUM(CASE WHEN t.typ='ausgabe' AND t.ausgaben_typ='instandhaltung' AND t.status='gebucht' THEN t.betrag ELSE 0 END), 0) AS spent_instandhaltung,
|
||||
COALESCE(SUM(CASE WHEN t.typ='einnahme' AND t.status='gebucht' THEN t.betrag ELSE 0 END), 0) AS einnahmen_betrag
|
||||
COALESCE(SUM(CASE WHEN t.typ='ausgabe' AND t.ausgaben_typ='gwg' AND t.status IN ('gebucht','freigegeben') THEN t.betrag ELSE 0 END), 0) AS spent_gwg,
|
||||
COALESCE(SUM(CASE WHEN t.typ='ausgabe' AND t.ausgaben_typ='anlagen' AND t.status IN ('gebucht','freigegeben') THEN t.betrag ELSE 0 END), 0) AS spent_anlagen,
|
||||
COALESCE(SUM(CASE WHEN t.typ='ausgabe' AND t.ausgaben_typ='instandhaltung' AND t.status IN ('gebucht','freigegeben') THEN t.betrag ELSE 0 END), 0) AS spent_instandhaltung,
|
||||
COALESCE(SUM(CASE WHEN t.typ='ausgabe' AND t.status IN ('gebucht','freigegeben') THEN t.betrag ELSE 0 END), 0) AS spent_gesamt,
|
||||
COALESCE(SUM(CASE WHEN t.typ='einnahme' AND t.status IN ('gebucht','freigegeben') THEN t.betrag ELSE 0 END), 0) AS einnahmen_betrag
|
||||
FROM buchhaltung_konten k
|
||||
LEFT JOIN buchhaltung_konto_typen kt ON k.konto_typ_id = kt.id
|
||||
LEFT JOIN buchhaltung_konten pk ON pk.id = k.parent_id
|
||||
|
||||
@@ -513,7 +513,7 @@ function KontoRow({ konto, depth = 0, onNavigate }: { konto: KontoTreeNode; dept
|
||||
const [open, setOpen] = useState(false);
|
||||
const isEinfach = (konto.budget_typ || 'detailliert') === 'einfach';
|
||||
const totalBudget = isEinfach ? Number(konto.budget_gesamt || 0) : Number(konto.budget_gwg || 0) + Number(konto.budget_anlagen || 0) + Number(konto.budget_instandhaltung || 0);
|
||||
const totalSpent = Number(konto.spent_gwg || 0) + Number(konto.spent_anlagen || 0) + Number(konto.spent_instandhaltung || 0);
|
||||
const totalSpent = Number(konto.spent_gesamt || 0);
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -618,7 +618,7 @@ function UebersichtTab({ haushaltsjahre, selectedJahrId, onJahrChange }: {
|
||||
const sumSpentGwg = treeData.reduce((s, k) => s + Number(k.spent_gwg || 0), 0);
|
||||
const sumSpentAnlagen = treeData.reduce((s, k) => s + Number(k.spent_anlagen || 0), 0);
|
||||
const sumSpentInst = treeData.reduce((s, k) => s + Number(k.spent_instandhaltung || 0), 0);
|
||||
const sumSpentGesamt = sumSpentGwg + sumSpentAnlagen + sumSpentInst;
|
||||
const sumSpentGesamt = treeData.reduce((s, k) => s + Number(k.spent_gesamt || 0), 0);
|
||||
const sumEinnahmen = treeData.reduce((s, k) => s + Number(k.einnahmen_betrag || 0), 0);
|
||||
|
||||
const totalEinnahmen = sumEinnahmen;
|
||||
@@ -724,6 +724,7 @@ function UebersichtTab({ haushaltsjahre, selectedJahrId, onJahrChange }: {
|
||||
const catSpentGwg = items.reduce((s, k) => s + Number(k.spent_gwg || 0), 0);
|
||||
const catSpentAnl = items.reduce((s, k) => s + Number(k.spent_anlagen || 0), 0);
|
||||
const catSpentInst = items.reduce((s, k) => s + Number(k.spent_instandhaltung || 0), 0);
|
||||
const catSpentGesamt = items.reduce((s, k) => s + Number(k.spent_gesamt || 0), 0);
|
||||
const catEinnahmen = items.reduce((s, k) => s + Number(k.einnahmen_betrag || 0), 0);
|
||||
rows.push(
|
||||
<TableRow key={`cat-${key}`} sx={{ bgcolor: 'action.hover', '& td': { fontWeight: 600, fontSize: '0.8rem' } }}>
|
||||
@@ -735,7 +736,7 @@ function UebersichtTab({ haushaltsjahre, selectedJahrId, onJahrChange }: {
|
||||
<TableCell align="right" sx={dividerLeft}>{fmtEur(catSpentGwg)}</TableCell>
|
||||
<TableCell align="right">{fmtEur(catSpentAnl)}</TableCell>
|
||||
<TableCell align="right">{fmtEur(catSpentInst)}</TableCell>
|
||||
<TableCell align="right">{fmtEur(catSpentGwg + catSpentAnl + catSpentInst)}</TableCell>
|
||||
<TableCell align="right">{fmtEur(catSpentGesamt)}</TableCell>
|
||||
<TableCell align="right" sx={{ ...dividerLeft, ...dividerRight }}>{fmtEur(catEinnahmen)}</TableCell>
|
||||
<TableCell />
|
||||
</TableRow>
|
||||
@@ -1024,13 +1025,13 @@ function TransaktionenTab({ haushaltsjahre, selectedJahrId, onJahrChange }: {
|
||||
|
||||
const buchenMut = useMutation({
|
||||
mutationFn: (id: number) => buchhaltungApi.buchenTransaktion(id),
|
||||
onSuccess: () => { qc.invalidateQueries({ queryKey: ['buchhaltung-transaktionen'] }); qc.invalidateQueries({ queryKey: ['buchhaltung-stats'] }); showSuccess('Transaktion gebucht'); },
|
||||
onSuccess: () => { qc.invalidateQueries({ queryKey: ['buchhaltung-transaktionen'] }); qc.invalidateQueries({ queryKey: ['buchhaltung-stats'] }); qc.invalidateQueries({ queryKey: ['kontenTree'] }); showSuccess('Transaktion gebucht'); },
|
||||
onError: () => showError('Buchung fehlgeschlagen'),
|
||||
});
|
||||
|
||||
const stornoMut = useMutation({
|
||||
mutationFn: (id: number) => buchhaltungApi.stornoTransaktion(id),
|
||||
onSuccess: () => { qc.invalidateQueries({ queryKey: ['buchhaltung-transaktionen'] }); qc.invalidateQueries({ queryKey: ['buchhaltung-stats'] }); setTxSubTab(0); showSuccess('Transaktion storniert'); },
|
||||
onSuccess: () => { qc.invalidateQueries({ queryKey: ['buchhaltung-transaktionen'] }); qc.invalidateQueries({ queryKey: ['buchhaltung-stats'] }); qc.invalidateQueries({ queryKey: ['kontenTree'] }); setTxSubTab(0); showSuccess('Transaktion storniert'); },
|
||||
onError: () => showError('Storno fehlgeschlagen'),
|
||||
});
|
||||
|
||||
@@ -1981,20 +1982,20 @@ export default function Buchhaltung() {
|
||||
</Box>
|
||||
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
|
||||
<Tabs value={tabValue} onChange={handleTabChange} variant="scrollable" scrollButtons="auto">
|
||||
<Tab label="Transaktionen" />
|
||||
<Tab label="Übersicht" />
|
||||
<Tab label="Transaktionen" />
|
||||
<Tab label="Konten" />
|
||||
</Tabs>
|
||||
</Box>
|
||||
<TabPanel value={tabValue} index={0}>
|
||||
<TransaktionenTab
|
||||
<UebersichtTab
|
||||
haushaltsjahre={haushaltsjahre}
|
||||
selectedJahrId={selectedJahrId}
|
||||
onJahrChange={setSelectedJahrId}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel value={tabValue} index={1}>
|
||||
<UebersichtTab
|
||||
<TransaktionenTab
|
||||
haushaltsjahre={haushaltsjahre}
|
||||
selectedJahrId={selectedJahrId}
|
||||
onJahrChange={setSelectedJahrId}
|
||||
|
||||
@@ -115,6 +115,7 @@ export interface KontoTreeNode extends Konto {
|
||||
spent_gwg: number;
|
||||
spent_anlagen: number;
|
||||
spent_instandhaltung: number;
|
||||
spent_gesamt: number;
|
||||
einnahmen_betrag: number;
|
||||
kategorie_bezeichnung?: string;
|
||||
children: KontoTreeNode[];
|
||||
|
||||
Reference in New Issue
Block a user