Steuerkram/scripts/nextcloud-import.php
2026-04-10 21:30:32 +02:00

71 lines
2.2 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
/**
* Nextcloud-Belegimport – CLI-Einstiegspunkt.
*
* Liest Belege aus dem konfigurierten Nextcloud-Ordner (WebDAV) und legt
* sie in Steuerkram an. Danach werden die Dateien in Nextcloud in den
* Erledigte-Ordner verschoben (oder gelöscht, wenn kein DONE-Ordner gesetzt).
*
* Aufruf:
* docker compose exec web php scripts/nextcloud-import.php
*
* Für Cronjob (im Kontext des Containers):
* * * * * * docker compose -f /path/to/Steuerkram/docker-compose.yml exec -T web \
* php scripts/nextcloud-import.php >> /var/log/steuerkram-import.log 2>&1
*
* Umgebungsvariablen (in .env oder Systemumgebung):
* NEXTCLOUD_URL Basis-URL, z.B. https://cloud.example.com
* NEXTCLOUD_USER Benutzername
* NEXTCLOUD_PASS Passwort oder App-Passwort
* NEXTCLOUD_FOLDER Import-Ordner, z.B. /Belege/Import (Standard: /Belege/Import)
* NEXTCLOUD_DONE Erledigte-Ordner, z.B. /Belege/Importiert (leer = Datei löschen)
*/
declare(strict_types=1);
chdir(dirname(__DIR__));
// .env laden falls vorhanden
if (file_exists('.env')) {
foreach (file('.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
if (str_starts_with(trim($line), '#') || !str_contains($line, '=')) {
continue;
}
[$key, $value] = explode('=', $line, 2);
$key = trim($key);
$value = trim($value, " \t\n\r\0\x0B\"'");
if (!array_key_exists($key, $_ENV)) {
$_ENV[$key] = $value;
putenv("{$key}={$value}");
}
}
}
require_once 'vendor/autoload.php';
use Steuerkram\Config;
use Steuerkram\Services\NextcloudImportService;
Config::load(); // Database verbindet sich lazy über Config::get()
$start = microtime(true);
echo '[nextcloud-import] Start: ' . date('Y-m-d H:i:s') . PHP_EOL;
$svc = new NextcloudImportService();
$result = $svc->import();
foreach ($result['details'] as $line) {
echo '[nextcloud-import] ' . $line . PHP_EOL;
}
$elapsed = round(microtime(true) - $start, 2);
echo sprintf(
'[nextcloud-import] Fertig in %ss – importiert: %d, übersprungen: %d, Fehler: %d' . PHP_EOL,
$elapsed,
$result['imported'],
$result['skipped'],
$result['errors'],
);
exit($result['errors'] > 0 ? 1 : 0);