Finanzmanager/src/Views/auswertungen/drilldown.php
fds2610-bot 233b570e76 Fix #84: Cockpit-Legendeneinträge öffnen die Buchungen dahinter
Jeder Legendeneintrag der Cockpit-Kacheln führt zu den Buchungen, aus denen
sich sein Wert zusammensetzt: Kategorien, „Nicht kategorisiert“ und „Übrige“
in „Meine Ausgaben“, Einnahmen/Ausgaben/Saldo in „Einnahmen und Ausgaben“,
Konten der Vermögensentwicklung ins Kontoblatt. Ziel ist der Drilldown der
Auswertungen mit dem Filter der Kachel; zeilenbuchungen() kennt dafür einen
Art-Filter, „alle Bewegungen“ und mehrere Kategorien.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 08:27:32 +02:00

105 lines
3.7 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 Finanzmanager\View;
/**
* Der Drilldown: die Buchungen hinter einer Berichtszeile – oder hinter einem
* Legendeneintrag einer Cockpit-Kachel.
*
* @var array<string,mixed> $zeile
* @var string $zurueck
* @var bool $ausCockpit
*/
$ausCockpit = $ausCockpit ?? false;
$artname = match ($zeile['art'] ?? '') {
'einnahme' => 'Einnahmen',
'ausgabe' => 'Ausgaben',
default => '',
};
include __DIR__ . '/../layout/kopf.php';
?>
<div class="tableiste">
<?php if ($ausCockpit): ?>
<a class="tab" href="/">Cockpit</a>
<?php else: ?>
<a class="tab" href="/auswertungen">Hauptansicht</a>
<a class="tab" href="<?= View::h($zurueck) ?>">Bericht</a>
<?php endif; ?>
<span class="tab aktiv">Buchungen</span>
</div>
<div class="seitenaktionen">
<a href="<?= View::h($zurueck) ?>" class="knopf primaer"><?= $ausCockpit ? 'Zurück zum Cockpit' : 'Zurück zum Bericht' ?></a>
</div>
<div class="berichtskopf">
<h2><?= View::h($zeile['name']) ?></h2>
<p><?= View::h($zeile['dimension']) ?><?= $artname !== '' && $artname !== $zeile['name'] ? ' · ' . View::h($artname) : '' ?>
· <?= View::h($zeile['spaltentitel']) ?></p>
</div>
<?php if ($zeile['buchungen'] === []): ?>
<p class="platzhalter">Zu dieser Zeile gibt es keine Buchungen mehr – vermutlich wurde
zwischenzeitlich etwas geändert.</p>
<?php else: ?>
<table class="liste">
<thead>
<tr>
<th>Datum</th>
<th>Konto</th>
<th>Empfänger</th>
<th>Buchungstext</th>
<th>Kategorie</th>
<th>Klasse</th>
<th class="rechts">Betrag</th>
</tr>
</thead>
<tbody>
<?php foreach ($zeile['buchungen'] as $buchung): ?>
<tr>
<td class="nowrap"><?= View::datum($buchung['datum']) ?></td>
<td>
<a href="/konten/<?= (int)$buchung['konto_id'] ?>"><?= View::h($buchung['konto']) ?></a>
</td>
<td>
<a href="/buchungen/<?= (int)$buchung['buchung_id'] ?>">
<?= View::h($buchung['empfaenger'] !== '' ? $buchung['empfaenger'] : '(ohne Empfänger)') ?>
</a>
</td>
<td><?= View::h($buchung['text']) ?></td>
<td>
<?= View::h($buchung['kategorie']) ?>
<?php if ($buchung['split_gesamt']): ?>
<span class="marke" title="Gesamtbetrag einer Splitbuchung – Aufschlüsselung im Kontoblatt">Splitbuchung</span>
<?php elseif ($buchung['gesplittet']): ?>
<span class="marke" title="Zeile einer Splitbuchung">Split</span>
<?php endif; ?>
</td>
<td><?= View::h($buchung['klasse']) ?></td>
<td class="rechts <?= View::betragKlasse($buchung['betrag']) ?>">
<?= View::betrag($buchung['betrag'], false) ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
<tfoot>
<tr class="summenzeile">
<td colspan="6">Summe (<?= count($zeile['buchungen']) ?> Buchungen)</td>
<td class="rechts <?= View::betragKlasse($zeile['summe']) ?>">
<?= View::betrag($zeile['summe'], false) ?>
</td>
</tr>
</tfoot>
</table>
<p class="hinweis klein">
Die Beträge stehen mit ihrem buchhalterischen Vorzeichen – <?= $ausCockpit
? 'in der Kachel erscheinen Ausgaben ohne Minus.'
: 'im Summenbericht erscheint dieselbe Summe unter „Ausgaben“ ohne Minus.' ?>
</p>
<?php endif; ?>
<?php include __DIR__ . '/../layout/fuss.php'; ?>