Finanzmanager/scripts/housekeeping.php
fds2610-bot 2c86e8522b Import und Export in QIF und CSV, Housekeeping für Importdateien
Aus der Kachel QIF-Import wird Import/Export mit je einem Knopf für beide
Richtungen; davor steht die Wahl des Dateiformats (QIF oder CSV), die als
Dialog und ohne Skript als eigene Seite funktioniert.

- CsvBuchungsImport/CsvTabelle: Buchungen samt Splitzeilen, Spalten über die
  Kopfzeile, dieselbe Dublettenerkennung und der Trockenlauf wie beim QIF.
- BuchungsExport/ExportController: Filter nach Zeitraum, Konto, Kategorie und
  Klasse; die Datei entsteht im Speicher, ein Exportverzeichnis gibt es nicht.
- Housekeeping: Hochgeladene Importdateien und data/tmp werden nach der
  eingestellten Frist gelöscht (Vorgabe 14 Tage, 0 schaltet ab).

Migration 013, Test 29 sowie E2E-Spec importexport.spec.js.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 23:01:30 +02:00

57 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
/**
* Räumt die temporären Dateien von Import und Export weg.
*
* Gedacht für einen Cron-Eintrag:
*
* docker compose exec -u www-data php php scripts/housekeeping.php --still
*
* Nötig ist der Eintrag nicht: Beim Öffnen von Import und Export läuft dasselbe
* Aufräumen beiläufig mit, höchstens einmal am Tag. Wer den Finanzmanager
* wochenlang nicht öffnet, hat mit dem Cron trotzdem ein leeres
* Importverzeichnis.
*
* Mit `--probe` wird nur aufgezählt, was wegfiele; gelöscht wird dann nichts.
*/
require dirname(__DIR__) . '/vendor/autoload.php';
use Finanzmanager\Config;
use Finanzmanager\Services\Housekeeping;
Config::load();
$still = in_array('--still', $argv, true);
$probe = in_array('--probe', $argv, true);
$sage = static function (string $zeile) use ($still): void {
if (!$still) {
echo $zeile . PHP_EOL;
}
};
$tage = Housekeeping::tage();
if ($tage === 0) {
$sage('Das Aufräumen ist abgeschaltet (Einstellungen → Import/Export, Frist 0).');
exit(0);
}
$ergebnis = Housekeeping::ausfuehren($probe);
$sage(sprintf(
'%s: %d von %d Dateien älter als %d Tage (%s).',
$probe ? 'Probelauf' : 'Aufgeräumt',
$ergebnis['geloescht'],
$ergebnis['geprueft'],
$ergebnis['tage'],
number_format($ergebnis['bytes'] / 1024, 1, ',', '.') . ' kB'
));
foreach ($ergebnis['dateien'] as $datei) {
$sage(' ' . $datei);
}
exit(0);