Finanzmanager/src/Controllers/BaseController.php
fds2610-bot 3e55b3ba73 QIF-Import: nur ausgewählte Konten übernehmen
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>
2026-08-12 14:50:43 +02:00

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;
}
}