Steuerkram/src/Views/dashboard_bucket.php

113 lines
4.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use Steuerkram\View;
$h = fn($v) => View::h($v);
$fmt = fn($v) => number_format((float)$v, 2, ',', '.') . ' €';
// Beitrag der Buchung zur Kachelsumme. In der Ergebnis-Ansicht mindern
// Betriebsausgaben den Gewinn, in den beiden anderen Ansichten wird die
// Spaltensumme selbst gebildet.
$beitrag = function (array $b) use ($bucket): float {
$netto = (float)$b['betrag_netto'];
if ($bucket === 'ergebnis' && $b['kontenart'] === 'Betriebsausgabe') {
return -$netto;
}
return $netto;
};
$summenwert = match ($bucket) {
'einnahmen' => $summary['einnahmen'],
'ausgaben' => $summary['ausgaben'],
default => $summary['ergebnis'],
};
?>
<div class="card">
<div class="card-header">
<div>
<div class="card-title"><?= $h($label) ?> – <?= $h($zeitraum) ?></div>
<div class="text-muted text-sm">
Zuordnung nach Kontenart wie in der EÜR<?= $month === null ? '' : ' · Geschäftsjahr ' . $h($year) ?>
</div>
</div>
<div style="display:flex;gap:.5rem">
<a href="/tax/euer/<?= $h($year) ?>" class="btn btn-secondary btn-sm">EÜR <?= $h($year) ?></a>
<a href="/dashboard" class="btn btn-secondary btn-sm">← Zurück zum Dashboard</a>
</div>
</div>
<?php if (empty($bookings)): ?>
<div class="card-body">
<p class="text-muted">Keine Buchungen in diesem Zeitraum.</p>
</div>
<?php else: ?>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>Datum</th>
<th>Buchungsnr.</th>
<th>Beleg</th>
<th>Buchungstext</th>
<th>Kategorie</th>
<th>Zahlungskonto</th>
<th class="td-right">Netto</th>
</tr>
</thead>
<tbody>
<?php
$summe = 0.0;
foreach ($bookings as $b):
$wert = $beitrag($b);
$summe += $wert;
$isReversal = (bool)$b['is_reversal'];
$isReversed = !empty($b['reversed_by']);
?>
<tr<?= ($isReversal || $isReversed) ? ' style="opacity:.6;font-style:italic"' : '' ?>>
<td class="td-mono text-sm"><?= View::formatDate($b['buchungs_datum']) ?></td>
<td class="td-mono text-sm"><?= $h($b['buchungs_nr']) ?></td>
<td>
<?php if ($b['beleg_id']): ?>
<a href="/belege/<?= (int)$b['beleg_id'] ?>"><?= $h($b['beleg_nr'] ?? '#' . $b['beleg_id']) ?></a>
<?php elseif (!empty($b['anlage_nr'])): ?>
<a href="/assets/<?= (int)$b['asset_id'] ?>/edit" title="<?= $h($b['anlage_bezeichnung']) ?>"><?= $h($b['anlage_nr']) ?></a>
<?php else: ?>
<span class="text-muted">–</span>
<?php endif; ?>
</td>
<td class="text-sm">
<?= $h($b['buchungstext']) ?>
<?php if ($isReversal): ?>
<span class="badge badge-red">Storno</span>
<?php elseif ($isReversed): ?>
<span class="badge badge-red">Storniert</span>
<?php endif; ?>
</td>
<td class="td-mono text-sm">
<a href="/tax/euer/<?= $h($year) ?>/konto/<?= (int)$b['kategorie_id'] ?>"><?= $h($b['kategorie_nr']) ?></a>
<span class="text-muted">– <?= $h($b['kategorie_name']) ?></span>
</td>
<td class="td-mono text-sm"><?= $h($b['zahlungs_nr']) ?> <span class="text-muted">– <?= $h($b['zahlungs_name']) ?></span></td>
<td class="td-right td-mono"><?= $fmt($wert) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
<tfoot>
<tr style="font-weight:700;border-top:2px solid var(--color-border)">
<td colspan="6">Summe (<?= count($bookings) ?> Buchungen)</td>
<td class="td-right td-mono"><?= $fmt($summe) ?></td>
</tr>
</tfoot>
</table>
</div>
<?php endif; ?>
</div>
<?php if ($bucket !== 'einnahmen' && $summary['nicht_abzugsfaehig'] != 0.0): ?>
<div class="card mt-2">
<div class="card-body text-sm text-muted">
Nicht enthalten: <strong><?= $fmt($summary['nicht_abzugsfaehig']) ?></strong> nicht abzugsfähige
Betriebsausgaben (EÜR-Zeile 74, z.&nbsp;B. der nicht abziehbare Anteil der Bewirtungskosten).
Sie mindern das steuerliche Ergebnis nicht und bleiben deshalb – wie in der EÜR – außen vor.
</div>
</div>
<?php endif; ?>