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,
|
kt.bezeichnung as konto_typ_bezeichnung, kt.art as konto_typ_art,
|
||||||
pk.bezeichnung AS parent_bezeichnung,
|
pk.bezeichnung AS parent_bezeichnung,
|
||||||
k.kategorie_id, kat.bezeichnung AS kategorie_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='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='gebucht' THEN t.betrag ELSE 0 END), 0) AS spent_anlagen,
|
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='gebucht' THEN t.betrag ELSE 0 END), 0) AS spent_instandhaltung,
|
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='einnahme' AND t.status='gebucht' THEN t.betrag ELSE 0 END), 0) AS einnahmen_betrag
|
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
|
FROM buchhaltung_konten k
|
||||||
LEFT JOIN buchhaltung_konto_typen kt ON k.konto_typ_id = kt.id
|
LEFT JOIN buchhaltung_konto_typen kt ON k.konto_typ_id = kt.id
|
||||||
LEFT JOIN buchhaltung_konten pk ON pk.id = k.parent_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 [open, setOpen] = useState(false);
|
||||||
const isEinfach = (konto.budget_typ || 'detailliert') === 'einfach';
|
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 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 (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -618,7 +618,7 @@ function UebersichtTab({ haushaltsjahre, selectedJahrId, onJahrChange }: {
|
|||||||
const sumSpentGwg = treeData.reduce((s, k) => s + Number(k.spent_gwg || 0), 0);
|
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 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 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 sumEinnahmen = treeData.reduce((s, k) => s + Number(k.einnahmen_betrag || 0), 0);
|
||||||
|
|
||||||
const totalEinnahmen = sumEinnahmen;
|
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 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 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 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);
|
const catEinnahmen = items.reduce((s, k) => s + Number(k.einnahmen_betrag || 0), 0);
|
||||||
rows.push(
|
rows.push(
|
||||||
<TableRow key={`cat-${key}`} sx={{ bgcolor: 'action.hover', '& td': { fontWeight: 600, fontSize: '0.8rem' } }}>
|
<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" sx={dividerLeft}>{fmtEur(catSpentGwg)}</TableCell>
|
||||||
<TableCell align="right">{fmtEur(catSpentAnl)}</TableCell>
|
<TableCell align="right">{fmtEur(catSpentAnl)}</TableCell>
|
||||||
<TableCell align="right">{fmtEur(catSpentInst)}</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 align="right" sx={{ ...dividerLeft, ...dividerRight }}>{fmtEur(catEinnahmen)}</TableCell>
|
||||||
<TableCell />
|
<TableCell />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
@@ -1024,13 +1025,13 @@ function TransaktionenTab({ haushaltsjahre, selectedJahrId, onJahrChange }: {
|
|||||||
|
|
||||||
const buchenMut = useMutation({
|
const buchenMut = useMutation({
|
||||||
mutationFn: (id: number) => buchhaltungApi.buchenTransaktion(id),
|
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'),
|
onError: () => showError('Buchung fehlgeschlagen'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const stornoMut = useMutation({
|
const stornoMut = useMutation({
|
||||||
mutationFn: (id: number) => buchhaltungApi.stornoTransaktion(id),
|
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'),
|
onError: () => showError('Storno fehlgeschlagen'),
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1981,20 +1982,20 @@ export default function Buchhaltung() {
|
|||||||
</Box>
|
</Box>
|
||||||
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
|
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
|
||||||
<Tabs value={tabValue} onChange={handleTabChange} variant="scrollable" scrollButtons="auto">
|
<Tabs value={tabValue} onChange={handleTabChange} variant="scrollable" scrollButtons="auto">
|
||||||
<Tab label="Transaktionen" />
|
|
||||||
<Tab label="Übersicht" />
|
<Tab label="Übersicht" />
|
||||||
|
<Tab label="Transaktionen" />
|
||||||
<Tab label="Konten" />
|
<Tab label="Konten" />
|
||||||
</Tabs>
|
</Tabs>
|
||||||
</Box>
|
</Box>
|
||||||
<TabPanel value={tabValue} index={0}>
|
<TabPanel value={tabValue} index={0}>
|
||||||
<TransaktionenTab
|
<UebersichtTab
|
||||||
haushaltsjahre={haushaltsjahre}
|
haushaltsjahre={haushaltsjahre}
|
||||||
selectedJahrId={selectedJahrId}
|
selectedJahrId={selectedJahrId}
|
||||||
onJahrChange={setSelectedJahrId}
|
onJahrChange={setSelectedJahrId}
|
||||||
/>
|
/>
|
||||||
</TabPanel>
|
</TabPanel>
|
||||||
<TabPanel value={tabValue} index={1}>
|
<TabPanel value={tabValue} index={1}>
|
||||||
<UebersichtTab
|
<TransaktionenTab
|
||||||
haushaltsjahre={haushaltsjahre}
|
haushaltsjahre={haushaltsjahre}
|
||||||
selectedJahrId={selectedJahrId}
|
selectedJahrId={selectedJahrId}
|
||||||
onJahrChange={setSelectedJahrId}
|
onJahrChange={setSelectedJahrId}
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ export interface KontoTreeNode extends Konto {
|
|||||||
spent_gwg: number;
|
spent_gwg: number;
|
||||||
spent_anlagen: number;
|
spent_anlagen: number;
|
||||||
spent_instandhaltung: number;
|
spent_instandhaltung: number;
|
||||||
|
spent_gesamt: number;
|
||||||
einnahmen_betrag: number;
|
einnahmen_betrag: number;
|
||||||
kategorie_bezeichnung?: string;
|
kategorie_bezeichnung?: string;
|
||||||
children: KontoTreeNode[];
|
children: KontoTreeNode[];
|
||||||
|
|||||||
Reference in New Issue
Block a user