diff --git a/public/index.php b/public/index.php index 5da8efa..a3c4031 100644 --- a/public/index.php +++ b/public/index.php @@ -104,6 +104,7 @@ $router->get('/tax/ustva/{year}/{month}/kz/{kz}', fn($p) => (new UstvaController $router->get('/tax/euer', fn($p) => (new EuerController())->index($p)); $router->get('/tax/euer/{year}', fn($p) => (new EuerController())->show($p)); $router->get('/tax/euer/{year}/pdf', fn($p) => (new EuerController())->pdf($p)); +$router->get('/tax/euer/{year}/konto/{konto_id}', fn($p) => (new EuerController())->kontoBookings($p)); // ── Einstellungen ──────────────────────────────────────────── $router->get('/settings', fn($p) => (new SettingsController())->show($p)); diff --git a/src/Controllers/EuerController.php b/src/Controllers/EuerController.php index 190a436..d7da4b8 100644 --- a/src/Controllers/EuerController.php +++ b/src/Controllers/EuerController.php @@ -41,6 +41,25 @@ class EuerController ]); } + public function kontoBookings(array $params): void + { + $year = (int)$params['year']; + $kontoId = (int)$params['konto_id']; + $calc = new EuerCalculator(); + $bookings = $calc->fetchBookingsForKonto($year, $kontoId); + $konto = \Steuerkram\Models\Account::find($kontoId); + + $view = new View(); + $view->render('layout/base.php', [ + 'pageTitle' => "EÜR {$year} – " . ($konto['bezeichnung'] ?? ''), + 'content' => $this->renderView('tax/euer_konto_bookings', [ + 'year' => $year, + 'konto' => $konto, + 'bookings' => $bookings, + ]), + ]); + } + public function pdf(array $params): void { $year = (int)$params['year']; diff --git a/src/Services/EuerCalculator.php b/src/Services/EuerCalculator.php index eb99585..63c9453 100644 --- a/src/Services/EuerCalculator.php +++ b/src/Services/EuerCalculator.php @@ -68,4 +68,23 @@ class EuerCalculator '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.beleg_id, bl.beleg_nr, + k.kontonummer AS kategorie_nr, k.bezeichnung AS kategorie_name, + z.kontonummer AS zahlungs_nr, z.bezeichnung AS zahlungs_name + 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 + WHERE fy.year = ? AND bk.kategorie_konto_id = ? AND bk.is_reversal = 0 + ORDER BY bk.buchungs_datum, bk.id', + [$year, $kontoId] + ); + } } diff --git a/src/Views/tax/euer_konto_bookings.php b/src/Views/tax/euer_konto_bookings.php new file mode 100644 index 0000000..b028a69 --- /dev/null +++ b/src/Views/tax/euer_konto_bookings.php @@ -0,0 +1,79 @@ + View::h($v); +$fmt = fn($v) => number_format((float)$v, 2, ',', '.') . ' €'; +?> + +
Keine Buchungen für dieses Konto in = $h($year) ?>.
+| Datum | +Beleg | +Buchungstext | +Zahlungskonto | +Netto | +USt | +Brutto | +
|---|---|---|---|---|---|---|
| = $h($b['buchungs_datum']) ?> | ++ + = $h($b['beleg_nr'] ?? '#' . $b['beleg_id']) ?> + + – + + | += $h($b['buchungstext']) ?> | ++ = $h($b['zahlungs_nr']) ?> = $h($b['zahlungs_name']) ?> + | += $fmt($netto) ?> | += $fmt($ust) ?> | += $fmt($brutto) ?> | +
| Summe (= count($bookings) ?> Buchungen) | += $fmt($sumNetto) ?> | += $fmt($sumUst) ?> | += $fmt($sumBrutto) ?> | +|||