#!/usr/bin/env php \n"); exit(1); } // Relative Angaben beziehen sich auf das Projektverzeichnis. if (!str_starts_with($datei, '/')) { $datei = dirname(__DIR__) . '/' . $datei; } if (!is_file($datei)) { fwrite(STDERR, "Datei nicht gefunden: {$datei}\n"); exit(1); } if ($benutzer !== null) { $zeile = Benutzer::findByName($benutzer); if ($zeile === null) { fwrite(STDERR, "Benutzer nicht gefunden: {$benutzer}\n"); exit(1); } Mandant::setze((int)$zeile['id']); } $stichtag ??= (string)Einstellung::get('import_stichtag', '2026-01-01'); $bis ??= date('Y-m-d'); try { $parser = QifParser::ausDatei($datei); $stamm = (new QifStammdatenImport($parser))->ausfuehren(!$uebernehmen); $buch = null; if (!$nurStammdaten) { $buch = (new QifBuchungsImport($parser, ['stichtag' => $stichtag, 'bis' => $bis])) ->ausfuehren(!$uebernehmen); } } catch (\Throwable $e) { fwrite(STDERR, 'Import fehlgeschlagen: ' . $e->getMessage() . "\n"); exit(1); } echo ($uebernehmen ? 'Import' : 'Trockenlauf') . ': ' . basename($datei) . "\n"; $abschnitte = []; foreach ($parser->zusammenfassung() as $typ => $anzahl) { $abschnitte[] = "{$typ}: {$anzahl}"; } echo 'Datei enthält ' . implode(' · ', $abschnitte) . "\n\n"; printf("%-12s %8s %12s %8s\n", 'Bereich', $uebernehmen ? 'angelegt' : 'neu', 'vorhanden', 'Fehler'); foreach (['klassen' => 'Klassen', 'kategorien' => 'Kategorien', 'konten' => 'Konten'] as $schluessel => $titel) { printf( "%-12s %8d %12d %8d\n", $titel, $stamm[$schluessel]['neu'], $stamm[$schluessel]['vorhanden'], $stamm[$schluessel]['fehler'] ); } $meldungen = $stamm['meldungen']; if ($buch !== null) { printf("%-12s %8d %12d %8d\n", 'Buchungen', $buch['buchungen']['neu'], $buch['buchungen']['vorhanden'], $buch['buchungen']['fehler']); echo "\nZeitraum ab {$stichtag} bis {$bis}\n"; printf(" vor dem Stichtag verrechnet: %6d Buchungen auf %d Konten (Summe %s)\n", $buch['buchungen']['vor_stichtag'], $buch['anfangssalden']['konten'], number_format($buch['anfangssalden']['summe'], 2, ',', '.')); printf(" nach dem Enddatum verworfen: %6d vorausberechnete Buchungen\n", $buch['buchungen']['zukunft']); printf(" darunter Wertpapiergeschäfte: %5d (nur Geldfluss)\n", $buch['buchungen']['wertpapier']); $meldungen = array_merge($meldungen, $buch['meldungen']); } if ($meldungen !== []) { echo "\nProtokoll:\n"; foreach ($meldungen as $meldung) { echo ' - ' . $meldung['text'] . "\n"; } } if (!$uebernehmen) { echo "\nEs wurde nichts gespeichert. Mit --uebernehmen wird der Import durchgeführt.\n"; } $fehler = $stamm['klassen']['fehler'] + $stamm['kategorien']['fehler'] + $stamm['konten']['fehler'] + ($buch['buchungen']['fehler'] ?? 0); exit($fehler > 0 ? 1 : 0);