Der Import kannte bisher nur den Zeitraum als Filter – ein Export ließ sich nur ganz einlesen. Neu ist die Option "konten": im Dialog eine Ankreuzliste, die erst nach dem Trockenlauf erscheint (vorher ist die Datei ungelesen), auf der Kommandozeile --konto=NAME und --konten. Maßgeblich ist nicht allein der !Account-Abschnitt, sondern jedes Konto, das der Eintrag berührt: das eigene, die Umbuchungsziele aus L und den Splitzeilen und beim Wertpapiergeschäft das Verrechnungskonto. Eine Umbuchung steht nur einmal in der Datei – sonst fehlte dem gewählten Konto die Gegenseite. Die Anfangssalden werden weiter über die ganze Datei gerechnet, aber nur für die gewählten Konten geschrieben; ein Teilimport überschreibt sonst fremde Salden. Die Fingerabdrücke entstehen jetzt vorab in einem eigenen Durchgang: Der laufende Zähler für gleiche Fingerabdrücke hing sonst an der Auswahl, und dieselbe Buchung wäre beim zweiten Lauf mit anderer Auswahl doppelt angelegt worden. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
80 lines
1.9 KiB
PHP
80 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Finanzmanager\Controllers;
|
|
|
|
use Finanzmanager\Auth;
|
|
use Finanzmanager\View;
|
|
|
|
abstract class BaseController
|
|
{
|
|
protected View $view;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->view = new View();
|
|
}
|
|
|
|
/** Seiten hinter der Anmeldung rufen das zuerst auf. */
|
|
protected function verlangeAnmeldung(): void
|
|
{
|
|
Auth::verlange();
|
|
}
|
|
|
|
protected function render(string $template, array $daten = []): void
|
|
{
|
|
$daten['csrfToken'] = Auth::csrfToken();
|
|
$daten['benutzer'] = Auth::benutzer();
|
|
$this->view->render($template, $daten);
|
|
}
|
|
|
|
protected function post(string $feld, string $standard = ''): string
|
|
{
|
|
$wert = $_POST[$feld] ?? $standard;
|
|
return is_string($wert) ? trim($wert) : $standard;
|
|
}
|
|
|
|
/**
|
|
* Mehrfachauswahl aus dem Formular (Ankreuzfelder mit Namen wie „konten[]“).
|
|
*
|
|
* @return list<int>
|
|
*/
|
|
protected function postIds(string $feld): array
|
|
{
|
|
$werte = $_POST[$feld] ?? [];
|
|
if (!is_array($werte)) {
|
|
return [];
|
|
}
|
|
|
|
return array_values(array_map('intval', array_filter($werte, 'is_scalar')));
|
|
}
|
|
|
|
/**
|
|
* Mehrfachauswahl mit Textwerten (Ankreuzfelder wie „konten[]“).
|
|
*
|
|
* @return list<string>
|
|
*/
|
|
protected function postTexte(string $feld): array
|
|
{
|
|
$werte = $_POST[$feld] ?? [];
|
|
if (!is_array($werte)) {
|
|
return [];
|
|
}
|
|
|
|
$texte = [];
|
|
foreach ($werte as $wert) {
|
|
if (is_string($wert) && trim($wert) !== '') {
|
|
$texte[] = trim($wert);
|
|
}
|
|
}
|
|
|
|
return $texte;
|
|
}
|
|
|
|
protected function query(string $feld, string $standard = ''): string
|
|
{
|
|
$wert = $_GET[$feld] ?? $standard;
|
|
return is_string($wert) ? trim($wert) : $standard;
|
|
}
|
|
}
|