113 lines
4.9 KiB
PHP
113 lines
4.9 KiB
PHP
<?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. 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; ?>
|