152 lines
4.8 KiB
PHP
152 lines
4.8 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace Steuerkram\Controllers;
|
||
|
||
use Steuerkram\Models\Asset;
|
||
use Steuerkram\Models\Setting;
|
||
use Steuerkram\Models\FiscalYear;
|
||
use Steuerkram\Services\EuerCalculator;
|
||
use Steuerkram\Services\PdfEuerService;
|
||
use Steuerkram\Services\PdfAnlagelisteService;
|
||
use Steuerkram\View;
|
||
|
||
class EuerController extends BaseController
|
||
{
|
||
public function index(array $params): void
|
||
{
|
||
$years = FiscalYear::availableYears();
|
||
if (empty($years)) $years = [(int)date('Y')];
|
||
|
||
$view = new View();
|
||
$view->render('layout/base.php', [
|
||
'pageTitle' => 'EÜR – Einnahmen-Überschuss-Rechnung',
|
||
'content' => $this->renderView('tax/euer_index', ['years' => $years]),
|
||
]);
|
||
}
|
||
|
||
public function show(array $params): void
|
||
{
|
||
$year = (int)$params['year'];
|
||
$calc = new EuerCalculator();
|
||
$euer = $calc->calculate($year);
|
||
|
||
$anlageliste = Asset::anlageliste($year);
|
||
|
||
$view = new View();
|
||
$view->render('layout/base.php', [
|
||
'pageTitle' => "EÜR {$year}",
|
||
'content' => $this->renderView('tax/euer_show', [
|
||
'euer' => $euer,
|
||
'year' => $year,
|
||
'anlageliste' => $anlageliste,
|
||
]),
|
||
'topbarActions' => '',
|
||
]);
|
||
}
|
||
|
||
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'];
|
||
$calc = new EuerCalculator();
|
||
$euer = $calc->calculate($year);
|
||
$settings = Setting::get();
|
||
|
||
$svc = new PdfEuerService();
|
||
$svc->render($euer, $settings);
|
||
}
|
||
|
||
public function anlageCsv(array $params): void
|
||
{
|
||
$year = (int)$params['year'];
|
||
$anlageliste = Asset::anlageliste($year);
|
||
$settings = Setting::get();
|
||
$firma = $settings['firma'] ?? '';
|
||
|
||
$fmtDate = function ($v) {
|
||
if (empty($v)) return '';
|
||
$ts = strtotime($v);
|
||
return $ts ? date('d.m.Y', $ts) : $v;
|
||
};
|
||
$fmtNum = fn($v) => number_format((float)$v, 2, ',', '.');
|
||
|
||
header('Content-Type: text/csv; charset=UTF-8');
|
||
header('Content-Disposition: attachment; filename="Anlageliste-' . $year . '.csv"');
|
||
header('Cache-Control: no-cache');
|
||
|
||
$out = fopen('php://output', 'w');
|
||
fprintf($out, chr(0xEF) . chr(0xBB) . chr(0xBF)); // UTF-8 BOM für Excel
|
||
fputcsv($out, [
|
||
'Anlage-ID', 'Bezeichnung', 'Anschaffungsdatum', 'Anschaffungskosten',
|
||
'Nutzungsdauer', 'AfA Vorjahre', 'Restbuchwert Vorjahr',
|
||
'AfA ' . $year, 'Restbuchwert 31.12.' . $year,
|
||
], ';');
|
||
|
||
$sumBasis = $sumAfaVj = $sumRbwVj = $sumAfaJ = $sumRbw = 0.0;
|
||
foreach ($anlageliste as $al) {
|
||
$sumBasis += $al['basis'];
|
||
$sumAfaVj += $al['afa_vorjahre'];
|
||
$sumRbwVj += $al['restbuchwert_vorjahr'];
|
||
$sumAfaJ += $al['afa_jahr'];
|
||
$sumRbw += $al['restbuchwert'];
|
||
|
||
$nd = $al['nutzungsdauer'] !== null
|
||
? ($al['nutzungsdauer'] == 0 ? 'sofort' : $al['nutzungsdauer'])
|
||
: '';
|
||
|
||
fputcsv($out, [
|
||
$al['anlage_nr'] ?: $al['lfd_nr'],
|
||
$al['bezeichnung'],
|
||
$fmtDate($al['anschaffungsdatum']),
|
||
$fmtNum($al['basis']),
|
||
$nd,
|
||
$fmtNum($al['afa_vorjahre']),
|
||
$fmtNum($al['restbuchwert_vorjahr']),
|
||
$fmtNum($al['afa_jahr']),
|
||
$fmtNum($al['restbuchwert']),
|
||
], ';');
|
||
}
|
||
|
||
fputcsv($out, [
|
||
'Summe', '', '',
|
||
$fmtNum($sumBasis), '',
|
||
$fmtNum($sumAfaVj),
|
||
$fmtNum($sumRbwVj),
|
||
$fmtNum($sumAfaJ),
|
||
$fmtNum($sumRbw),
|
||
], ';');
|
||
|
||
fclose($out);
|
||
}
|
||
|
||
public function anlagePdf(array $params): void
|
||
{
|
||
$year = (int)$params['year'];
|
||
$anlageliste = Asset::anlageliste($year);
|
||
$settings = Setting::get();
|
||
|
||
$svc = new PdfAnlagelisteService();
|
||
$svc->render($year, $anlageliste, $settings);
|
||
}
|
||
}
|
||
|