Unter den Kategorien stehen überall die aktiven Umbuchungskonten, je Kontengruppe gruppiert und in deren Reihenfolge (Konto::umbuchungsgruppen()): Regeln samt Splitzeilen, Umsatzabgleich, Buchungsvorlagen, Regelmäßige Buchungen, Zahlungsverkehr, Verträge sowie die Filter von Buchungsbericht und Export. Die Masken nutzen dafür die gemeinsame Liste Kategorie / Gegenkonto der Buchungsmaske; das getrennte Gegenkonto-Feld der Regel entfällt. Regel-Splitzeilen können auf ein Umbuchungskonto zeigen. Zahlungsaufträge und Verträge bekommen ein Gegenkonto (Migration 030). Ein schon gewähltes inaktives Konto bleibt sichtbar, damit keine Zuordnung verloren geht. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
157 lines
6.9 KiB
PHP
157 lines
6.9 KiB
PHP
<?php
|
||
|
||
use Finanzmanager\Controllers\BuchungenController;
|
||
use Finanzmanager\View;
|
||
|
||
/**
|
||
* @var list<array<string,mixed>> $vorlagen
|
||
* @var string $suche
|
||
* @var int $anzahl
|
||
* @var list<array<string,mixed>> $konten
|
||
* @var list<array<string,mixed>> $kategorien
|
||
* @var list<array<string,mixed>> $klassen
|
||
* @var string $csrfToken
|
||
*/
|
||
|
||
include __DIR__ . '/../layout/kopf.php';
|
||
?>
|
||
|
||
<div class="tableiste">
|
||
<span class="tab aktiv" title="Eine Vorlage füllt die Buchung vor: Empfänger, Kategorie und Splitzeilen stehen schon, einzutragen bleibt das Datum – und der Betrag, wenn er schwankt. Weicht er ab, werden die Splitzeilen im gleichen Verhältnis mitgezogen.">Buchungsvorlagen</span>
|
||
<a href="/termine" class="tab">Regelmäßige Buchungen</a>
|
||
<a href="/termine/kalender" class="tab">Finanzkalender</a>
|
||
</div>
|
||
|
||
<div class="seitenaktionen">
|
||
<button type="button" class="knopf primaer" id="neu-knopf" data-neudialog="neudialog">+ Neu</button>
|
||
</div>
|
||
|
||
<form method="get" action="/vorlagen" class="filterleiste">
|
||
<label for="suche">Suchen</label>
|
||
<input type="search" id="suche" name="suche" value="<?= View::h($suche) ?>"
|
||
placeholder="Name oder Empfänger">
|
||
<button type="submit" class="knopf">Suchen</button>
|
||
<?php if ($suche !== ''): ?>
|
||
<a href="/vorlagen" class="knopf">Alle zeigen</a>
|
||
<?php endif; ?>
|
||
<span class="nebentext"><?= (int)$anzahl ?> Vorlagen insgesamt</span>
|
||
</form>
|
||
|
||
<?php if ($vorlagen === []): ?>
|
||
<p class="platzhalter">
|
||
<?= $suche === ''
|
||
? 'Noch keine Vorlagen. Sie kommen aus dem QIF-Import oder entstehen aus einer vorhandenen Buchung.'
|
||
: 'Keine Vorlage passt zur Suche.' ?>
|
||
</p>
|
||
<?php else: ?>
|
||
<?php foreach ($vorlagen as $vorlage): ?>
|
||
<form id="vorlage-buchen-<?= (int)$vorlage['id'] ?>" method="post"
|
||
action="/vorlagen/<?= (int)$vorlage['id'] ?>/buchen"></form>
|
||
<form id="vorlage-loeschen-<?= (int)$vorlage['id'] ?>" method="post"
|
||
action="/vorlagen/<?= (int)$vorlage['id'] ?>/loeschen"
|
||
data-bestaetigen="Vorlage „<?= View::h($vorlage['name']) ?>“ löschen?"></form>
|
||
<?php endforeach; ?>
|
||
|
||
<table class="liste">
|
||
<thead>
|
||
<tr>
|
||
<th>Vorlage</th><th>Kategorie / Gegenkonto</th><th>Konto</th>
|
||
<th class="rechts">Betrag</th><th>Buchen am</th>
|
||
<th class="rechts">Genutzt</th><th class="rechts">Aktion</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<?php foreach ($vorlagen as $vorlage): ?>
|
||
<?php $f = 'vorlage-buchen-' . (int)$vorlage['id']; ?>
|
||
<tr>
|
||
<td>
|
||
<?= View::h($vorlage['name']) ?>
|
||
<?php if (($vorlage['splits'] ?? null) !== null): ?>
|
||
<span class="marke">Split</span>
|
||
<?php endif; ?>
|
||
</td>
|
||
<td><?= View::h($vorlage['gegenkontoname'] !== null
|
||
? '[' . $vorlage['gegenkontoname'] . ']'
|
||
: ($vorlage['kategorie_pfad'] ?? '–')) ?></td>
|
||
<td>
|
||
<input type="hidden" form="<?= $f ?>" name="csrf_token" value="<?= View::h($csrfToken) ?>">
|
||
<?php if ($vorlage['konto_id'] === null): ?>
|
||
<select form="<?= $f ?>" name="konto_id" required>
|
||
<option value="">– Konto wählen –</option>
|
||
<?php foreach ($konten as $konto): ?>
|
||
<option value="<?= (int)$konto['id'] ?>"><?= View::h($konto['name']) ?></option>
|
||
<?php endforeach; ?>
|
||
</select>
|
||
<?php else: ?>
|
||
<?= View::h($vorlage['kontoname']) ?>
|
||
<?php endif; ?>
|
||
</td>
|
||
<td class="rechts">
|
||
<input type="text" form="<?= $f ?>" name="betrag" class="schmal" inputmode="decimal"
|
||
value="<?= View::h(number_format((float)$vorlage['betrag'], 2, ',', '')) ?>">
|
||
</td>
|
||
<td>
|
||
<input type="date" form="<?= $f ?>" name="datum" value="<?= View::h(date('Y-m-d')) ?>">
|
||
</td>
|
||
<td class="rechts"><?= (int)$vorlage['verwendet'] ?></td>
|
||
<td class="rechts nowrap">
|
||
<input type="hidden" form="vorlage-loeschen-<?= (int)$vorlage['id'] ?>"
|
||
name="csrf_token" value="<?= View::h($csrfToken) ?>">
|
||
<button type="submit" form="<?= $f ?>" class="knopf klein primaer">Buchen</button>
|
||
<button type="submit" form="vorlage-loeschen-<?= (int)$vorlage['id'] ?>"
|
||
class="knopf klein gefahr">Löschen</button>
|
||
</td>
|
||
</tr>
|
||
<?php endforeach; ?>
|
||
</tbody>
|
||
</table>
|
||
<?php endif; ?>
|
||
|
||
<dialog id="neudialog" class="splitdialog neudialog">
|
||
<form method="post" action="/vorlagen/neu" class="formular breit">
|
||
<input type="hidden" name="csrf_token" value="<?= View::h($csrfToken) ?>">
|
||
<h2>Neue Vorlage</h2>
|
||
|
||
<label for="name">Name</label>
|
||
<input type="text" id="name" name="name" required>
|
||
|
||
<label for="empfaenger">Empfänger</label>
|
||
<input type="text" id="empfaenger" name="empfaenger">
|
||
|
||
<label for="konto_id">Konto</label>
|
||
<select id="konto_id" name="konto_id">
|
||
<option value="">– beim Buchen wählen –</option>
|
||
<?php foreach ($konten as $konto): ?>
|
||
<option value="<?= (int)$konto['id'] ?>"><?= View::h($konto['name']) ?></option>
|
||
<?php endforeach; ?>
|
||
</select>
|
||
|
||
<label for="betrag">Betrag</label>
|
||
<input type="text" id="betrag" name="betrag" inputmode="decimal" value="0,00">
|
||
|
||
<label for="zuordnung"
|
||
title="Unter den Kategorien stehen die aktiven Umbuchungskonten in eckigen Klammern. Eines davon macht aus der Buchung eine Umbuchung.">Kategorie / Gegenkonto</label>
|
||
<select id="zuordnung" name="zuordnung">
|
||
<?php $gewaehlt = ''; $eigenesKonto = 0; $mitSplit = false; $mitDepot = false; ?>
|
||
<?php include __DIR__ . '/../buchungen/zuordnungsliste.php'; ?>
|
||
</select>
|
||
|
||
<label for="klasse_id">Klasse</label>
|
||
<select id="klasse_id" name="klasse_id">
|
||
<option value="">– keine –</option>
|
||
<?php foreach ($klassen as $klasse): ?>
|
||
<option value="<?= (int)$klasse['id'] ?>"><?= View::h($klasse['name']) ?></option>
|
||
<?php endforeach; ?>
|
||
</select>
|
||
|
||
<label for="buchungstext">Buchungstext</label>
|
||
<input type="text" id="buchungstext" name="buchungstext">
|
||
|
||
<div class="knopfleiste">
|
||
<button type="submit" class="knopf primaer">Vorlage anlegen</button>
|
||
<button type="submit" class="knopf" formmethod="dialog" formnovalidate>Abbrechen</button>
|
||
</div>
|
||
</form>
|
||
</dialog>
|
||
|
||
<?php include __DIR__ . '/../layout/fuss.php'; ?>
|