0 ORDER BY a.kontonummer', [$year] ); $einnahmen = []; $ausgaben = []; $nichtAbzugsfaehig = []; foreach ($rows as $row) { $netto = round((float)$row['summe_netto'], 2); if ($row['kontenart'] === 'Betriebseinnahme') { $einnahmen[] = array_merge($row, ['netto' => $netto]); } elseif ($row['euer_zeile'] === '51') { $nichtAbzugsfaehig[] = array_merge($row, ['netto' => $netto]); } else { $ausgaben[] = array_merge($row, ['netto' => $netto]); } } $totalEinnahmen = array_sum(array_column($einnahmen, 'netto')); $totalAusgaben = array_sum(array_column($ausgaben, 'netto')); $totalNichtAbzugsfaehig = array_sum(array_column($nichtAbzugsfaehig, 'netto')); $gewinn = round($totalEinnahmen - $totalAusgaben, 2); return [ 'year' => $year, 'einnahmen' => $einnahmen, 'ausgaben' => $ausgaben, 'nicht_abzugsfaehig' => $nichtAbzugsfaehig, 'total_einnahmen' => round($totalEinnahmen, 2), 'total_ausgaben' => round($totalAusgaben, 2), 'total_nicht_abzugsfaehig' => round($totalNichtAbzugsfaehig, 2), 'gewinn' => $gewinn, ]; } public function fetchBookingsForKonto(int $year, int $kontoId): array { return Database::fetchAll( 'SELECT bk.id, bk.buchungs_datum, bk.buchungstyp, bk.ust_satz, bk.betrag_netto, bk.betrag_ust, bk.betrag_brutto, bk.buchungstext, bk.is_reversal, bk.beleg_id, bk.asset_id, bl.beleg_nr, k.kontonummer AS kategorie_nr, k.bezeichnung AS kategorie_name, z.kontonummer AS zahlungs_nr, z.bezeichnung AS zahlungs_name, a.anlage_nr, a.bezeichnung AS anlage_bezeichnung FROM bookings bk JOIN fiscal_years fy ON bk.fiscal_year_id = fy.id LEFT JOIN belege bl ON bk.beleg_id = bl.id JOIN accounts k ON bk.kategorie_konto_id = k.id JOIN accounts z ON bk.zahlungskonto_id = z.id LEFT JOIN assets a ON bk.asset_id = a.id WHERE fy.year = ? AND bk.kategorie_konto_id = ? ORDER BY bk.buchungs_datum, bk.id', [$year, $kontoId] ); } }