From b9f307fc815ed1840c4d6434304d712f02b66be7 Mon Sep 17 00:00:00 2001 From: Johannes Rest Date: Mon, 19 Oct 2026 16:52:48 +0200 Subject: [PATCH] =?UTF-8?q?Lokalen=20Rechnungsassistenten=20mit=20Vorlagen?= =?UTF-8?q?=20und=20PDF-Vorschau=20erg=C3=A4nzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation.md | 11 +- README.md | 49 ++- bin/einvoice | 10 +- bin/einvoice-ui | 1 + bin/jr-einvoice | 10 +- docs/assets/einvoice-ui.png | Bin 0 -> 202380 bytes docs/desktop-ui.md | 148 ++++++++ jr_einvoice/create.py | 35 +- jr_einvoice/gui.py | 739 ++++++++++++++++++++++++++++++++++++ jr_einvoice/gui_data.py | 99 +++++ jr_einvoice/gui_worker.py | 76 ++++ jr_einvoice/maintenance.py | 19 +- pyproject.toml | 6 +- scripts/install_commands.py | 22 +- tests/test_gui.py | 224 +++++++++++ 15 files changed, 1423 insertions(+), 26 deletions(-) create mode 120000 bin/einvoice-ui create mode 100644 docs/assets/einvoice-ui.png create mode 100644 docs/desktop-ui.md create mode 100644 jr_einvoice/gui.py create mode 100644 jr_einvoice/gui_data.py create mode 100644 jr_einvoice/gui_worker.py create mode 100644 tests/test_gui.py diff --git a/Documentation.md b/Documentation.md index 290f485..5c2221c 100644 --- a/Documentation.md +++ b/Documentation.md @@ -1,6 +1,15 @@ # Bedienung und technische Dokumentation -Stand: 16.10.2026 · Version 1.0 +Stand: 19.10.2026 · Version 1.1 + +## Desktop-Oberfläche + +`einvoice-ui` ergänzt die Konsole um Vorlagen, Kundenformular, mehrere Positionen, +Betragsübersicht, Entwurfsvorschau und eingebettete fertige PDF. +Installation: `einvoice --update --apply --with-gui`, danach +`python3 scripts/install_commands.py --desktop`. +Die GUI nutzt dieselbe Erstellung und Validierung wie die Konsole. +[Vollständige Bedienungs- und Entwicklungsdokumentation](docs/desktop-ui.md). ## Einrichtung und persönliche Vorlagen diff --git a/README.md b/README.md index 9230439..16e8f96 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,49 @@ -# einvoice – Rechnung mit einem Konsolenaufruf +# einvoice – Rechnungen per Oberfläche oder Konsolenaufruf + +## Desktop-Oberfläche + +**Vorlage laden → Daten prüfen und ergänzen → E-Rechnung erstellen → fertige PDF im Fenster ansehen.** +Die lokale Anwendung verwendet dieselbe Berechnung, Nummernvergabe und technische +Validierung wie die Konsole. Ein separates Repository ist deshalb nicht erforderlich. + +```bash +# Auf diesem Rechner eingerichtet: +einvoice-ui +# Alternativ: +einvoice --gui +``` + +Im Anwendungsmenü steht **JR eInvoice**. Kunden lassen sich wiederverwenden oder +neu erfassen. Mehrere Positionen mit mehrzeiliger Beschreibung, Mengen, deutschen +Nettopreisen, Steuersätzen, Leistungszeitraum und Zahlungsziel sind bearbeitbar. +Die Betragsübersicht rechnet sofort mit. „Entwurf ansehen“ zeigt eine PDF ohne +Nummernreservierung; „E-Rechnung erstellen“ speichert und validiert die endgültige +ZUGFeRD-PDF und zeigt sie direkt an. Ordner und Prüfbericht sind per Knopf erreichbar. + +Eigene YAML-Vorlagen und frühere `invoice.yaml`-Dateien können geladen werden. +Dabei werden Nummer und Datumsfelder für eine **neue** Rechnung zurückgesetzt. +Leistungsbeschreibung, Referenzen, Mengen, Preise und Zeitraum vor Erstellung prüfen. +Vorlagen ändern das Rechnungsdaten-Gerüst; das Layout kommt weiterhin aus der +gemeinsamen HTML/Jinja2-Vorlage. Die PDF-Ansicht ist schreibgeschützt. + +![Desktop-Oberfläche mit fiktiver Beispielrechnung](docs/assets/einvoice-ui.png) + +Erstinstallation / anderer Rechner: + +```bash +# Bestehendes Checkout mit funktionierender Laufzeit: +einvoice --update --apply --with-gui +python3 scripts/install_commands.py --desktop + +# Entwicklerumgebung (Java und Mustang wie unten einrichten): +pip install -e '.[pdf,gui]' +.venv/bin/einvoice-ui +``` + +Die GUI ist optional; reine Konsoleninstallationen benötigen Qt nicht. Nach einem +Update mit `--with-gui` behalten weitere Updates die Oberfläche bei. Rechnungs- und +Kundendaten bleiben lokal; die Anwendung versendet keine E-Mails. +[Bedienung, Installation und technische Details](docs/desktop-ui.md). Kundenname, Leistung, Menge und Nettopreis eingeben: `einvoice --create` erledigt Rechnungsnummer, Berechnung, PDF/A-Erstellung, Einbettung des EN16931-XML und @@ -114,7 +159,7 @@ einvoice --update --rollback jr-einvoice --help ``` -Der Installer verlinkt beide Starter nach `~/.local/bin` und prüft ihre Funktion. +Der Installer verlinkt die Konsolen- und GUI-Starter nach `~/.local/bin` und prüft die Konsole. Dort vorhandene andere Befehle werden vor dem Ersetzen gesichert. Wiederholtes Ausführen ist möglich. Auf diesem Rechner ist das Verzeichnis bereits im PATH. Bei einem gespeicherten alten Shell-Pfad einmal `rehash` (zsh) bzw. `hash -r` diff --git a/bin/einvoice b/bin/einvoice index 9c87ab7..2d02337 100755 --- a/bin/einvoice +++ b/bin/einvoice @@ -6,7 +6,7 @@ if [[ "${1:-}" == --update ]]; then shift exec python3 "$root/scripts/update.py" "$@" fi -# Resolve once: one invocation uses one complete release even during an update. +# Ein Aufruf verwendet auch während eines Updates eine vollständige Laufzeit. if [[ -L "$root/.runtime/current" ]]; then release="$(readlink -f -- "$root/.runtime/current")" export JR_EINVOICE_MUSTANG_JAR="$release/Mustang-CLI.jar" @@ -16,6 +16,14 @@ else fi export JR_EINVOICE_HOME="${JR_EINVOICE_HOME:-$root/private}" export JR_EINVOICE_PRESETS="${JR_EINVOICE_PRESETS:-$root/private/presets}" +if [[ "$(basename -- "$0")" == einvoice-ui || "${1:-}" == --gui ]]; then + if [[ "${1:-}" == --gui ]]; then shift; fi + if ! "$python" -I -c 'from PySide6.QtPdfWidgets import QPdfView' 2>/dev/null; then + echo 'Oberfläche fehlt. Einmalig: einvoice --update --apply --with-gui' >&2 + exit 1 + fi + exec "$python" -I -m jr_einvoice.gui "$@" +fi if [[ "$(basename -- "$0")" == jr-einvoice ]]; then exec "$python" -I -c 'from jr_einvoice.cli import app; app()' "$@" fi diff --git a/bin/einvoice-ui b/bin/einvoice-ui new file mode 120000 index 0000000..3764aa3 --- /dev/null +++ b/bin/einvoice-ui @@ -0,0 +1 @@ +einvoice \ No newline at end of file diff --git a/bin/jr-einvoice b/bin/jr-einvoice index 9c87ab7..2d02337 100755 --- a/bin/jr-einvoice +++ b/bin/jr-einvoice @@ -6,7 +6,7 @@ if [[ "${1:-}" == --update ]]; then shift exec python3 "$root/scripts/update.py" "$@" fi -# Resolve once: one invocation uses one complete release even during an update. +# Ein Aufruf verwendet auch während eines Updates eine vollständige Laufzeit. if [[ -L "$root/.runtime/current" ]]; then release="$(readlink -f -- "$root/.runtime/current")" export JR_EINVOICE_MUSTANG_JAR="$release/Mustang-CLI.jar" @@ -16,6 +16,14 @@ else fi export JR_EINVOICE_HOME="${JR_EINVOICE_HOME:-$root/private}" export JR_EINVOICE_PRESETS="${JR_EINVOICE_PRESETS:-$root/private/presets}" +if [[ "$(basename -- "$0")" == einvoice-ui || "${1:-}" == --gui ]]; then + if [[ "${1:-}" == --gui ]]; then shift; fi + if ! "$python" -I -c 'from PySide6.QtPdfWidgets import QPdfView' 2>/dev/null; then + echo 'Oberfläche fehlt. Einmalig: einvoice --update --apply --with-gui' >&2 + exit 1 + fi + exec "$python" -I -m jr_einvoice.gui "$@" +fi if [[ "$(basename -- "$0")" == jr-einvoice ]]; then exec "$python" -I -c 'from jr_einvoice.cli import app; app()' "$@" fi diff --git a/docs/assets/einvoice-ui.png b/docs/assets/einvoice-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..b718644b37b4185d8b1d0117f16656ba1b405c4b GIT binary patch literal 202380 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

M}4L%&z-jq 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±HFAbh<1@bh4nGCF89JV-;Z_Uw|Jkw9k+sr` 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 wiederholen. +Ein technischer Fehler veröffentlicht keine fertige E-Rechnung. Beim erfolgreichen +Ergebnis bleiben `invoice.yaml`, XML, PDF, Prüfbericht, Log und Hashmanifest im +Rechnungsordner erhalten. + +## Entwicklung und Prüfung + +Neuer Quellcode und Kommentare sind deutsch beschrieben: + +| Datei | Aufgabe | +| --- | --- | +| `jr_einvoice/gui.py` | Fenster, Formulare, PDF-Ansicht, Prozesssteuerung | +| `jr_einvoice/gui_data.py` | Geprüfte Formulardaten und Vorlagen | +| `jr_einvoice/gui_worker.py` | PDF-Aufträge ohne Qt im eigenen Prozess | +| `jr_einvoice/create.py` | Gemeinsame Rechnungserstellung für GUI und CLI | +| `tests/test_gui.py` | Vorlagen, Fehlerfälle, Vorschau, echter Erstellungsablauf | + +```bash +QT_QPA_PLATFORM=offscreen .venv/bin/python -m unittest discover -s tests -v +QT_QPA_PLATFORM=offscreen JR_EINVOICE_INTEGRATION=1 \ + .venv/bin/python -m unittest discover -s tests -v +``` + +Ohne GUI-Extra werden Qt-Tests übersprungen, Vorlagentests laufen weiterhin. +Die Integration prüft einen tatsächlichen Button-Klick bis zur validierten PDF in +der eingebetteten Ansicht. Hinzu kommen ungültige Eingaben, geschützte Vorlagen, +alte Rechnungsdaten, Kundenkonflikte, Hintergrundfehler und Doppelklickschutz. +Tests verwenden ausschließlich temporäre Verzeichnisse und fiktive Beispieldaten; +sie belegen keine Nummern im echten Rechnungsstamm. diff --git a/jr_einvoice/create.py b/jr_einvoice/create.py index 54b4451..c403a98 100644 --- a/jr_einvoice/create.py +++ b/jr_einvoice/create.py @@ -1,4 +1,4 @@ -"""One-command invoice creation with reusable private customer records.""" +"""Rechnungen für Konsole und Oberfläche mit gemeinsamen Prüfungen erstellen.""" from dataclasses import dataclass from datetime import date, timedelta from decimal import Decimal, InvalidOperation @@ -16,7 +16,7 @@ from .calc import compute_totals from .utils import money_fmt from .folder_naming import default_invoice_folder_name from .invoice_number import invoice_root_lock -from .models import Invoice, Party +from .models import Invoice, Item, Party from .pipeline import build_in_folder, BuildResult from .presets import load_yaml @@ -24,7 +24,7 @@ MONTHS = 'januar februar märz april mai juni juli august september oktober nove def decimal_input(value: str) -> Decimal: - """Accept 85,00 €, 1.234,56 EUR or ungrouped decimal-point notation.""" + """Deutsche Beträge und ungruppierte Zahlen mit Dezimalpunkt einlesen.""" raw = re.sub(r'\s*(?:€|EUR)\s*$', '', value.strip(), flags=re.I) raw = raw.replace('\u00a0', '').strip() if ',' in raw: @@ -43,7 +43,7 @@ def decimal_input(value: str) -> Decimal: def customer_key(name: str) -> str: - # Hash prevents punctuation/transliteration collisions and path traversal. + # Der Hash verhindert Namenskollisionen und Pfadmanipulation durch Kundennamen. readable = re.sub(r'[^a-z0-9]+', '-', name.casefold()).strip('-')[:32] or 'kunde' return f'{readable}-{hashlib.sha256(name.casefold().encode()).hexdigest()[:8]}' @@ -67,7 +67,7 @@ def save_customer(presets: Path, name: str, buyer: dict) -> tuple[str, dict]: directory.mkdir(parents=True, exist_ok=True, mode=0o700) target = directory / f'{key}.yaml' data = {'buyer': buyer} - # Exclusive create; never replace an existing customer's stored details silently. + # Vorhandene Kundenstammdaten niemals stillschweigend ersetzen. with target.open('x', encoding='utf-8') as file: target.chmod(0o600) yaml.safe_dump(data, file, allow_unicode=True, sort_keys=False) @@ -106,6 +106,10 @@ def create_invoice(*, root: Path, resources: Path, presets: Path, customer: str, month: str | None = None, service_date: date | None = None, unit: str = 'HUR', tax: Decimal = Decimal('19'), due_days: int = 30, buyer_reference: str | None = None, order_reference: str | None = None, + items: list[Item] | None = None, + notes: str = 'Vielen Dank für Ihren Auftrag.', + service_period_start: date | None = None, + service_period_end: date | None = None, progress=lambda message: None) -> CreatedInvoice: if due_days < 0: raise ValueError('Zahlungsziel darf nicht negativ sein') @@ -120,9 +124,21 @@ def create_invoice(*, root: Path, resources: Path, presets: Path, customer: str, key, record = match issued = issued or date.today() delivery, start, end = service_period(entry, month, service_date, issued) + if service_period_start is not None or service_period_end is not None: + if month or service_date: + raise ValueError('Leistungszeitraum nicht mit Monat oder Einzeltermin kombinieren') + if not service_period_start or not service_period_end or service_period_start > service_period_end: + raise ValueError('Leistungszeitraum benötigt einen Beginn und ein Ende in richtiger Reihenfolge') + start, end, delivery = service_period_start, service_period_end, service_period_end + positions = items if items is not None else [Item(name=entry, quantity=volume, unit=unit, + unit_price_net=price, tax_rate=tax)] + # Eingaben vor Nummernreservierung und Dateizugriff auf ihre Form prüfen. + positions = [Item.model_validate(item) for item in positions] + if not positions: + raise ValueError('Mindestens eine Rechnungsposition ist erforderlich') root = root.expanduser().resolve() with invoice_root_lock(root): - # Only dedicated invoice directories; unknown/corrupt records stop allocation. + # Unklare vorhandene Entwürfe stoppen die Vergabe neuer Nummern. used = set() for path in root.glob('*/invoice.yaml'): existing = load_yaml(path).get('meta', {}).get('invoice_number') @@ -145,12 +161,11 @@ def create_invoice(*, root: Path, resources: Path, presets: Path, customer: str, 'meta': {'invoice_number': number, 'invoice_date': issued, 'service_date': delivery, 'service_period_start': start, 'service_period_end': end, 'buyer_reference': buyer_reference, 'order_reference': order_reference, - 'notes': 'Vielen Dank für Ihren Auftrag.'}, + 'notes': notes}, 'seller': seller_data['seller'], 'buyer': record['buyer'], 'payment': {**seller_data['payment'], 'due_date': issued + timedelta(days=due_days), 'reference': f'Rechnung {number}'}, - 'items': [{'name': entry, 'quantity': volume, 'unit': unit, - 'unit_price_net': price, 'tax_rate': tax}], + 'items': [item.model_dump(mode='json') for item in positions], }) with tempfile.TemporaryDirectory(prefix='.create-', dir=root) as staging: work = Path(staging) / 'invoice' @@ -164,7 +179,7 @@ def create_invoice(*, root: Path, resources: Path, presets: Path, customer: str, if logo.is_file(): shutil.copy2(logo, work / 'assets/logo.svg') work.rename(target) - # Retain the reserved number and input on build failures for diagnosis/retry. + # Bei Fehlern Nummer und Entwurf für Diagnose und Wiederholung erhalten. from .logging_utils import setup_logging logger = setup_logging('WARNING', target / 'out/logs/run.log') progress(f'Rechnungsdaten vollständig: {number} · {inv.buyer.name}') diff --git a/jr_einvoice/gui.py b/jr_einvoice/gui.py new file mode 100644 index 0000000..f16045f --- /dev/null +++ b/jr_einvoice/gui.py @@ -0,0 +1,739 @@ +"""Lokaler Rechnungsassistent mit Qt und eingebetteter PDF-Ansicht.""" +from __future__ import annotations + +import argparse +import calendar +from datetime import date +import json +from pathlib import Path +import sys +import tempfile + +from PySide6.QtCore import QDate, Qt, QObject, QProcess, QUrl, Signal +from PySide6.QtGui import QDesktopServices, QIcon +from PySide6.QtPdf import QPdfDocument +from PySide6.QtPdfWidgets import QPdfView +from PySide6.QtWidgets import ( + QApplication, QComboBox, QDateEdit, QFileDialog, QFormLayout, QFrame, + QGridLayout, QGroupBox, QHBoxLayout, QInputDialog, QLabel, QLineEdit, + QMainWindow, QMessageBox, QPlainTextEdit, QProgressBar, QPushButton, + QScrollArea, QSpinBox, QSplitter, QVBoxLayout, QWidget, +) + +from .calc import compute_totals, line_net +from .cli import _default_mustang_jar +from .create import CreatedInvoice, decimal_input, find_customer +from .gui_data import InvoiceForm, InvoiceTemplate, load_template, save_template +from .models import Invoice, Item, Party +from .pipeline import BuildResult +from .paths import private_root, presets_root, resource_root +from .presets import load_yaml +from .utils import money_fmt + + +STYLE = """ +QWidget { font-family: 'Noto Sans', 'DejaVu Sans'; font-size: 13px; color: #24374b; } +QMainWindow, QScrollArea, QWidget#editor { background: #f1f5f9; } +QFrame#header { background: #123655; border-radius: 12px; } +QLabel#brand { color: white; font-size: 25px; font-weight: 700; } +QLabel#tagline { color: #c7dbea; } +QLabel#badge { color: #b4eadb; background: #204a61; padding: 8px 14px; border-radius: 14px; } +QGroupBox { background: white; border: 1px solid #dce5ed; border-radius: 10px; + margin-top: 22px; padding: 20px 14px 12px; font-weight: 600; } +QGroupBox::title { subcontrol-origin: margin; left: 14px; padding: 0 4px; } +QLineEdit, QPlainTextEdit, QComboBox, QDateEdit, QSpinBox { + background: white; color: #24374b; selection-background-color: #c1e9df; + border: 1px solid #c7d4df; border-radius: 5px; padding: 7px; min-height: 20px; } +QLineEdit:focus, QPlainTextEdit:focus, QComboBox:focus, QDateEdit:focus, QSpinBox:focus { + border: 1px solid #168575; } +QLineEdit:read-only { background: #f4f7fa; color: #52677b; } +QPushButton { background: white; border: 1px solid #bdcdda; border-radius: 6px; + padding: 9px 13px; min-height: 18px; font-weight: 600; } +QPushButton:hover { background: #e7f0f6; } +QPushButton:disabled { color: #8696a7; background: #edf1f4; border-color: #dce5ed; } +QPushButton#primary { color: white; background: #087f70; border: 0; padding: 12px 18px; } +QPushButton#primary:hover { background: #066c60; } +QPushButton#primary:disabled { background: #8bbab1; } +QPushButton#remove { color: #a34242; font-size: 12px; padding: 5px 9px; } +QLabel#muted { color: #60768b; } +QLabel#total { color: #123655; font-size: 21px; font-weight: 700; } +QFrame#summary { background: #e4f1ed; border-radius: 8px; padding: 6px; } +QLabel#notice { background: #e8eff5; padding: 12px; border-radius: 7px; } +QProgressBar { border: 0; background: #e1e9ef; height: 5px; border-radius: 2px; } +QProgressBar::chunk { background: #087f70; } +QSplitter::handle { background: #dce5ed; width: 3px; } +""" + + +def label(text: str, name: str = '') -> QLabel: + widget = QLabel(text) + widget.setObjectName(name) + widget.setWordWrap(True) + # Fachliche Eingaben dürfen keine HTML-Auszeichnung in Statusfeldern erzeugen. + widget.setTextFormat(Qt.TextFormat.PlainText) + return widget + + +def button(text: str, callback, name: str = '') -> QPushButton: + widget = QPushButton(text) + widget.setObjectName(name) + widget.clicked.connect(callback) + return widget + + +def date_edit(value: date) -> QDateEdit: + widget = QDateEdit(QDate(value.year, value.month, value.day)) + widget.setCalendarPopup(True) + widget.setDisplayFormat('dd.MM.yyyy') + return widget + + +def german_number(value) -> str: + return format(value, 'f').replace('.', ',') + + +class Position(QGroupBox): + """Eine Position mit mehrzeiliger Beschreibung und deutscher Zahleneingabe.""" + + changed = Signal() + remove_requested = Signal(object) + + def __init__(self, item: Item | None = None): + super().__init__('Rechnungsposition') + layout = QVBoxLayout(self) + head = QHBoxLayout() + self.name = QLineEdit() + self.name.setPlaceholderText('Leistung, z. B. Softwareentwicklung') + head.addWidget(self.name, 1) + head.addWidget(button('Entfernen', lambda: self.remove_requested.emit(self), 'remove')) + layout.addLayout(head) + self.description = QPlainTextEdit() + self.description.setPlaceholderText('Weitere Angaben zur Leistung (optional)') + self.description.setFixedHeight(62) + layout.addWidget(self.description) + grid = QGridLayout() + self.quantity = QLineEdit('1') + self.unit = QComboBox() + for text, code in [('Stunden', 'HUR'), ('Stück', 'C62'), ('Tage', 'DAY')]: + self.unit.addItem(text, code) + self.price = QLineEdit('0,00') + self.tax = QLineEdit('19') + self.total = label('0,00 EUR', 'muted') + for col, (title, widget) in enumerate([ + ('Menge', self.quantity), ('Einheit', self.unit), ('Einzelpreis netto', self.price), + ('USt %', self.tax), ('Position netto', self.total), + ]): + grid.addWidget(label(title, 'muted'), 0, col) + grid.addWidget(widget, 1, col) + grid.setColumnStretch(col, 1) + layout.addLayout(grid) + if item: + self.name.setText(item.name) + self.description.setPlainText(item.description or '') + self.quantity.setText(german_number(item.quantity)) + self.price.setText(german_number(item.unit_price_net)) + self.tax.setText(german_number(item.tax_rate)) + index = self.unit.findData(item.unit) + if index < 0: + self.unit.addItem(item.unit, item.unit) + index = self.unit.count() - 1 + self.unit.setCurrentIndex(index) + for field in (self.name, self.quantity, self.price, self.tax): + field.textChanged.connect(self.changed) + self.description.textChanged.connect(self.changed) + self.unit.currentIndexChanged.connect(self.changed) + + def item(self) -> Item: + return Item(name=self.name.text(), description=self.description.toPlainText() or None, + quantity=decimal_input(self.quantity.text()), unit=self.unit.currentData(), + unit_price_net=decimal_input(self.price.text()), tax_rate=decimal_input(self.tax.text())) + + +class InvoiceWorker(QObject): + """PDF und Java-Prüfung von der Qt-Laufzeit vollständig trennen.""" + + progress = Signal(str) + succeeded = Signal(object) + failed = Signal(str) + finished = Signal() + + def __init__(self, request, parent=None): + super().__init__(parent) + self.directory = tempfile.TemporaryDirectory(prefix='jr-einvoice-auftrag-') + self.request_path = Path(self.directory.name) / 'request.json' + self.request_path.write_text(json.dumps(request), encoding='utf-8') + self.request_path.chmod(0o600) + self.process = QProcess(self) + self.process.setProgram(sys.executable) + self.process.setArguments(['-I', '-m', 'jr_einvoice.gui_worker', str(self.request_path)]) + self.process.readyReadStandardOutput.connect(self.read_progress) + self.process.finished.connect(self.completed) + self.process.errorOccurred.connect(self.process_error) + self.buffer = b'' + self.done = False + + def start(self): + self.process.start() + + def read_progress(self): + self.buffer += bytes(self.process.readAllStandardOutput()) + while b'\n' in self.buffer: + line, self.buffer = self.buffer.split(b'\n', 1) + try: + self.progress.emit(json.loads(line)['progress']) + except (ValueError, KeyError): + pass + + def process_error(self, error): + if error == QProcess.ProcessError.FailedToStart: + self.completed(-1) + + def completed(self, code, *_): + if self.done: + return + self.done = True + try: + path = self.request_path.with_name('result.json') + if not path.is_file(): + detail = bytes(self.process.readAllStandardError()).decode('utf-8', errors='replace')[-4000:] + raise RuntimeError(f'Hintergrundprozess fehlgeschlagen (Exit {code}). {detail}') + payload = json.loads(path.read_text(encoding='utf-8')) + if code or 'error' in payload: + raise RuntimeError(payload.get('error', f'Hintergrundprozess beendet (Exit {code})')) + self.succeeded.emit(payload['result']) + except Exception as exc: + self.failed.emit(str(exc)) + finally: + self.directory.cleanup() + self.finished.emit() + + +class InvoiceWindow(QMainWindow): + def __init__(self, *, root: Path | None = None, presets: Path | None = None, + jar: Path | None = None): + super().__init__() + self.resources = resource_root() + self.root = root or private_root() / 'invoices' + self.presets = presets or presets_root() + self.jar = jar or _default_mustang_jar() + self.template_dir = private_root() / 'templates' + self.scratch = tempfile.TemporaryDirectory(prefix='jr-einvoice-vorschau-') + self.worker = None + self.positions: list[Position] = [] + self.result = None + self.generated = False + self.dirty = False + self.loading = True + self.setWindowTitle('JR IT Services · eInvoice') + self.resize(1520, 1000) + self.setMinimumSize(1000, 720) + icon = self.resources / 'assets/logo.svg' + self.setWindowIcon(QIcon(str(icon))) + self.setStyleSheet(STYLE) + central = QWidget() + self.setCentralWidget(central) + outer = QVBoxLayout(central) + outer.setContentsMargins(20, 16, 20, 16) + header = QFrame() + header.setObjectName('header') + row = QHBoxLayout(header) + row.setContentsMargins(22, 18, 22, 18) + titles = QVBoxLayout() + titles.addWidget(label('JR IT Services / eInvoice', 'brand')) + titles.addWidget(label('Von der Vorlage zur geprüften E-Rechnung.', 'tagline')) + row.addLayout(titles, 1) + row.addWidget(label('LOKAL · ZUGFeRD / Factur-X', 'badge')) + row.addWidget(button('Neue Rechnung', self.new_invoice)) + outer.addWidget(header) + splitter = QSplitter() + outer.addWidget(splitter, 1) + scroll = QScrollArea() + scroll.setWidgetResizable(True) + scroll.setFrameShape(QFrame.Shape.NoFrame) + self.editor = QWidget() + self.editor.setObjectName('editor') + layout = QVBoxLayout(self.editor) + layout.setContentsMargins(0, 0, 14, 0) + scroll.setWidget(self.editor) + splitter.addWidget(scroll) + self._template_section(layout) + self._customer_section(layout) + self._invoice_section(layout) + self.positions_layout = QVBoxLayout() + self.positions_layout.setContentsMargins(0, 0, 0, 0) + layout.addLayout(self.positions_layout) + layout.addWidget(button('+ Position hinzufügen', self.add_position)) + self.notes = QPlainTextEdit('Vielen Dank für Ihren Auftrag.') + self.notes.setFixedHeight(70) + layout.addWidget(label('Hinweise auf der Rechnung', 'muted')) + layout.addWidget(self.notes) + layout.addStretch() + self._preview_section(splitter) + splitter.setSizes([760, 720]) + splitter.setChildrenCollapsible(False) + self.progress = QProgressBar() + self.progress.setRange(0, 1) + self.progress.setValue(0) + self.progress.setTextVisible(False) + outer.addWidget(self.progress) + self.status = label('Kunden und Positionen erfassen oder eine Vorlage laden.', 'notice') + self.status.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) + outer.addWidget(self.status) + actions = QHBoxLayout() + self.totals = label('Netto — · USt — · Brutto —', 'total') + actions.addWidget(self.totals, 1) + self.preview_button = button('Entwurf ansehen', self.preview) + self.generate_button = button('E-Rechnung erstellen', self.generate, 'primary') + actions.addWidget(self.preview_button) + actions.addWidget(self.generate_button) + outer.addLayout(actions) + self._connect_changes() + self.refresh_customers() + self.refresh_templates() + self.add_position() + self.loading = False + self.dirty = False + self.changed() + self.dirty = False + + def _template_section(self, layout): + group = QGroupBox('01 Vorlage') + box = QVBoxLayout(group) + self.templates = QComboBox() + self.templates.setMinimumContentsLength(20) + self.templates.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon) + box.addWidget(self.templates) + row = QHBoxLayout() + row.addWidget(button('Auswahl laden', self.load_selected_template)) + row.addWidget(button('Datei öffnen …', self.load_template_file)) + row.addWidget(button('Als Vorlage speichern …', self.save_current_template)) + box.addLayout(row) + box.addWidget(label('Vorlagen und frühere Rechnungen als Ausgangspunkt verwenden.', 'muted')) + layout.addWidget(group) + + def _customer_section(self, layout): + group = QGroupBox('02 Rechnungsempfänger') + box = QVBoxLayout(group) + self.customers = QComboBox() + self.customers.currentIndexChanged.connect(self.select_customer) + box.addWidget(self.customers) + self.customer_summary = label('', 'muted') + box.addWidget(self.customer_summary) + self.customer_toggle = button('Anschrift anzeigen / verbergen', self.toggle_customer_details) + box.addWidget(self.customer_toggle) + self.customer_details = QWidget() + form = QFormLayout(self.customer_details) + form.setContentsMargins(0, 0, 0, 0) + box.addWidget(self.customer_details) + self.buyer_fields = {} + for key, title in [('name', 'Firma / Name'), ('street', 'Straße / Hausnummer'), + ('postal_code', 'Postleitzahl'), ('city', 'Ort'), ('country', 'Land (ISO-Code)'), + ('email', 'Rechnungs-E-Mail (optional)'), ('vat_id', 'USt-ID (optional)')]: + field = QLineEdit('DE' if key == 'country' else '') + self.buyer_fields[key] = field + form.addRow(title, field) + self.customer_note = label('Neue Kunden werden bei der Erstellung gespeichert.', 'muted') + box.addWidget(self.customer_note) + layout.addWidget(group) + + def toggle_customer_details(self): + self.customer_details.setVisible(not self.customer_details.isVisible()) + + def _invoice_section(self, layout): + group = QGroupBox('03 Rechnungsdaten') + form = QGridLayout(group) + self.number = QLineEdit() + self.number.setPlaceholderText('Automatisch: JR-JJJJ-NNNN') + self.issued = date_edit(date.today()) + today = date.today() + self.start = date_edit(today.replace(day=1)) + self.end = date_edit(today.replace(day=calendar.monthrange(today.year, today.month)[1])) + self.due = QSpinBox() + self.due.setRange(0, 3650) + self.due.setValue(30) + self.due.setSuffix(' Tage') + self.buyer_reference = QLineEdit() + self.order_reference = QLineEdit() + for index, (text, field) in enumerate([ + ('Rechnungsnummer', self.number), ('Rechnungsdatum', self.issued), + ('Leistung von', self.start), ('Leistung bis', self.end), + ('Zahlungsziel', self.due), ('Bestellnummer', self.order_reference), + ('Kundenreferenz', self.buyer_reference)]): + row, col = divmod(index, 2) + form.addWidget(label(text, 'muted'), row * 2, col) + form.addWidget(field, row * 2 + 1, col) + form.setColumnStretch(0, 1) + form.setColumnStretch(1, 1) + layout.addWidget(group) + + def _preview_section(self, splitter): + pane = QWidget() + layout = QVBoxLayout(pane) + layout.setContentsMargins(14, 4, 0, 0) + row = QHBoxLayout() + row.addWidget(label('Rechnungsvorschau', 'total'), 1) + zoom = QComboBox() + zoom.addItems(['Seitenbreite', 'Ganze Seite', '100 %']) + row.addWidget(zoom) + layout.addLayout(row) + self.preview_state = label('Hier erscheint der Entwurf oder die fertige, geprüfte PDF.', 'notice') + layout.addWidget(self.preview_state) + self.document = QPdfDocument(self) + self.pdf = QPdfView() + self.pdf.setDocument(self.document) + self.pdf.setPageMode(QPdfView.PageMode.MultiPage) + self.pdf.setZoomMode(QPdfView.ZoomMode.FitToWidth) + zoom.currentIndexChanged.connect(lambda index: self.pdf.setZoomMode([ + QPdfView.ZoomMode.FitToWidth, QPdfView.ZoomMode.FitInView, QPdfView.ZoomMode.Custom][index])) + layout.addWidget(self.pdf, 1) + self.path_label = label('', 'muted') + self.path_label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) + layout.addWidget(self.path_label) + row = QHBoxLayout() + self.open_pdf = button('PDF extern öffnen', lambda: self.open_result('pdf')) + self.open_folder = button('Rechnungsordner', lambda: self.open_result('folder')) + self.open_report = button('Prüfbericht', lambda: self.open_result('report')) + for widget in (self.open_pdf, self.open_folder, self.open_report): + widget.setEnabled(False) + row.addWidget(widget) + layout.addLayout(row) + splitter.addWidget(pane) + + def _connect_changes(self): + for field in [*self.buyer_fields.values(), self.number, self.buyer_reference, self.order_reference]: + field.textChanged.connect(self.changed) + for field in (self.issued, self.start, self.end): + field.dateChanged.connect(self.changed) + self.due.valueChanged.connect(self.changed) + self.notes.textChanged.connect(self.changed) + + def changed(self, *_): + if self.loading: + return + self.dirty = True + self.generated = False + self.generate_button.setEnabled(self.worker is None) + self.preview_button.setEnabled(self.worker is None) + if self.document.pageCount(): + self.preview_state.setText('Eingaben geändert · Die angezeigte PDF zeigt den vorherigen Stand.') + for widget in (self.open_pdf, self.open_folder, self.open_report): + widget.setEnabled(False) + try: + items = [position.item() for position in self.positions] + # Gleiche Rundung wie im Rechnungskern, einschließlich Steuergruppen. + from types import SimpleNamespace + totals = compute_totals(SimpleNamespace(items=items)) + self.totals.setText(f'Netto {money_fmt(totals.net_total)} · USt {money_fmt(totals.tax_total)}' + f' · Brutto {money_fmt(totals.gross_total)}') + for position, item in zip(self.positions, items): + position.total.setText(money_fmt(line_net(item))) + except (ValueError, ArithmeticError): + self.totals.setText('Beträge ergänzen, um die Summe zu berechnen.') + + def add_position(self, item=None): + # Das clicked-Signal liefert bei einem Button ein bool statt einer Position. + position = Position(item if isinstance(item, Item) else None) + position.changed.connect(self.changed) + position.remove_requested.connect(self.remove_position) + self.positions.append(position) + self.positions_layout.addWidget(position) + self.changed() + + def remove_position(self, position): + self.positions.remove(position) + self.positions_layout.removeWidget(position) + position.deleteLater() + self.changed() + + def refresh_customers(self): + self.customers.blockSignals(True) + self.customers.clear() + self.customers.addItem('Neuen Kunden erfassen', None) + for path in sorted((self.presets / 'customers').glob('*.yaml')): + buyer = Party.model_validate(load_yaml(path)['buyer']) + self.customers.addItem(f'{buyer.name} ({path.stem})', buyer) + self.customers.blockSignals(False) + self.select_customer() + + def select_customer(self, *_): + buyer = self.customers.currentData() + data = buyer.model_dump() if buyer else {} + address = data.get('address', {}) + for key, field in self.buyer_fields.items(): + field.setReadOnly(buyer is not None) + field.setText(str(data.get(key) or address.get(key) or ('DE' if key == 'country' else ''))) + self.customer_note.setText('Gespeicherte Stammdaten werden unverändert verwendet.' if buyer else + 'Neue Kunden werden bei der Erstellung gespeichert.') + self.customer_summary.setText(f'{buyer.name}\n{buyer.address.street} · ' + f'{buyer.address.postal_code} {buyer.address.city} · {buyer.address.country}' + if buyer else '') + self.customer_summary.setVisible(buyer is not None) + self.customer_toggle.setVisible(buyer is not None) + self.customer_details.setVisible(buyer is None) + self.changed() + + def refresh_templates(self): + self.templates.clear() + self.templates.addItem('Vorlage oder frühere Rechnung auswählen …', None) + for path in sorted(self.template_dir.glob('*.yaml')): + self.templates.addItem(f'Vorlage · {path.stem}', path) + for path in sorted(self.root.glob('*/invoice.yaml'), reverse=True): + self.templates.addItem(f'Rechnung · {path.parent.name}', path) + + def form(self) -> InvoiceForm: + fields = {key: field.text().strip() for key, field in self.buyer_fields.items()} + buyer = self.customers.currentData() or Party.model_validate({ + 'name': fields['name'], 'email': fields['email'] or None, 'vat_id': fields['vat_id'] or None, + 'address': {key: fields[key].upper() if key == 'country' else fields[key] + for key in ('street', 'postal_code', 'city', 'country')}}) + return InvoiceForm(buyer=buyer, items=[position.item() for position in self.positions], + issued=self.issued.date().toPython(), due_days=self.due.value(), + start=self.start.date().toPython(), end=self.end.date().toPython(), + number=self.number.text().strip() or None, notes=self.notes.toPlainText(), + buyer_reference=self.buyer_reference.text().strip() or None, + order_reference=self.order_reference.text().strip() or None) + + def error(self, message): + self.status.setText('Bitte prüfen: ' + message) + dialog = QMessageBox(self) + dialog.setIcon(QMessageBox.Icon.Warning) + dialog.setWindowTitle('Rechnung konnte nicht verarbeitet werden') + dialog.setTextFormat(Qt.TextFormat.PlainText) + dialog.setText(message) + dialog.exec() + + def confirm_replace(self) -> bool: + return not self.dirty or QMessageBox.question( + self, 'Formular ersetzen?', 'Die aktuellen Formulareingaben durch die Vorlage ersetzen?', + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, + QMessageBox.StandardButton.No) == QMessageBox.StandardButton.Yes + + def new_invoice(self): + if self.worker is not None or not self.confirm_replace(): + return + self.loading = True + self.refresh_customers() + for position in list(self.positions): + self.remove_position(position) + self.add_position() + self.number.clear() + today = date.today() + self.issued.setDate(QDate(today.year, today.month, today.day)) + self.start.setDate(QDate(today.year, today.month, 1)) + self.end.setDate(QDate(today.year, today.month, calendar.monthrange(today.year, today.month)[1])) + self.due.setValue(30) + self.buyer_reference.clear() + self.order_reference.clear() + self.notes.setPlainText('Vielen Dank für Ihren Auftrag.') + self.result = None + self.document.close() + self.path_label.clear() + self.preview_state.setText('Hier erscheint der Entwurf oder die fertige, geprüfte PDF.') + self.loading = False + self.changed() + self.dirty = False + self.status.setText('Neue Rechnung: Kunden und Positionen erfassen oder Vorlage laden.') + + def load_selected_template(self): + path = self.templates.currentData() + if path: + self.apply_template(path) + + def load_template_file(self): + path, _ = QFileDialog.getOpenFileName(self, 'Rechnungsvorlage laden', str(self.template_dir), + 'YAML-Dateien (*.yaml *.yml)') + if path: + self.apply_template(Path(path)) + + def apply_template(self, path: Path): + try: + template = load_template(path) + if not self.confirm_replace(): + return + self.loading = True + self.customers.setCurrentIndex(0) + # Bei importierten Vorlagen die vollständigen Stammdaten vergleichen. + found = False + for index in range(1, self.customers.count()): + if self.customers.itemData(index) == template.buyer: + self.customers.setCurrentIndex(index) + found = True + break + if not found: + buyer = template.buyer.model_dump() + for key, field in self.buyer_fields.items(): + field.setText(str(buyer.get(key) or buyer['address'].get(key) or '')) + # Nicht sichtbare zusätzliche Stammdaten (z. B. Steuernummer) bewahren. + if not found: + self.customers.addItem(f'Vorlage · {template.buyer.name}', template.buyer) + self.customers.setCurrentIndex(self.customers.count() - 1) + for position in list(self.positions): + self.remove_position(position) + for item in template.items: + self.add_position(item) + self.number.clear() + today = date.today() + self.issued.setDate(QDate(today.year, today.month, today.day)) + self.start.setDate(QDate(today.year, today.month, 1)) + self.end.setDate(QDate(today.year, today.month, calendar.monthrange(today.year, today.month)[1])) + self.due.setValue(template.due_days) + self.notes.setPlainText(template.notes) + self.buyer_reference.setText(template.buyer_reference or '') + self.order_reference.setText(template.order_reference or '') + self.status.setText('Vorlage geladen. Nummer zurückgesetzt; Datumsfelder auf heute / aktuellen Monat gesetzt. ' + 'Leistungsbeschreibung, Mengen, Preise und Zeitraum für die neue Rechnung prüfen.') + except Exception as exc: + self.error(str(exc)) + finally: + self.loading = False + self.changed() + + def save_current_template(self): + try: + template = InvoiceTemplate.from_form(self.form()) + name, accepted = QInputDialog.getText(self, 'Vorlage speichern', 'Name der Rechnungsvorlage:') + if not accepted: + return + try: + path = save_template(self.template_dir, name.strip(), template) + except FileExistsError: + if QMessageBox.question(self, 'Vorlage vorhanden', 'Diese Vorlage überschreiben?', + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, + QMessageBox.StandardButton.No) != QMessageBox.StandardButton.Yes: + return + path = save_template(self.template_dir, name.strip(), template, overwrite=True) + self.refresh_templates() + self.status.setText(f'Vorlage gespeichert: {path}') + except Exception as exc: + self.error(str(exc)) + + def start_task(self, mode, form, finished): + if self.worker is not None: + return + self.editor.setEnabled(False) + self.preview_button.setEnabled(False) + self.generate_button.setEnabled(False) + self.progress.setRange(0, 0) + request = {'mode': mode, 'form': form.model_dump(mode='json'), + 'root': str(self.root), 'presets': str(self.presets), 'resources': str(self.resources), + 'jar': str(self.jar), 'scratch': self.scratch.name} + self.worker = InvoiceWorker(request, self) + self.worker.progress.connect(self.status.setText) + self.worker.succeeded.connect(finished) + self.worker.failed.connect(self.error) + self.worker.finished.connect(self.task_finished) + self.worker.finished.connect(self.worker.deleteLater) + self.worker.start() + + def task_finished(self): + self.worker = None + self.editor.setEnabled(True) + self.preview_button.setEnabled(not self.generated) + self.generate_button.setEnabled(not self.generated) + self.progress.setRange(0, 1) + self.progress.setValue(1) + + def preview(self): + try: + form = self.form() + form.invoice(self.presets) + # Ein Dokument vor erneutem Schreiben freigeben (auch unter Windows). + self.document.close() + self.start_task('preview', form, self.show_draft) + except Exception as exc: + self.error(str(exc)) + + def show_pdf(self, path: Path): + self.document.close() + error = self.document.load(str(path)) + if error != QPdfDocument.Error.None_: + raise RuntimeError(f'PDF kann nicht angezeigt werden: {path} ({error.name})') + self.path_label.setText(str(path)) + + def show_draft(self, payload): + try: + self.show_pdf(Path(payload['pdf'])) + self.preview_state.setText('ENTWURF · Keine Nummer vergeben · Noch keine E-Rechnung') + self.status.setText('Entwurf bereit. Mit „E-Rechnung erstellen“ die endgültige PDF erzeugen und prüfen.') + except Exception as exc: + self.error(str(exc)) + + def generate(self): + # Auch programmatische Doppelaufrufe dürfen keine zweite Rechnung erzeugen. + if self.worker is not None or self.generated: + return + try: + form = self.form() + form.invoice(self.presets) + if not self.jar or not self.jar.is_file(): + raise ValueError('Mustang fehlt. Einmalig jr-einvoice setup-mustang ausführen.') + existing = find_customer(self.presets, form.buyer.name) + if existing and Party.model_validate(existing[1]['buyer']) != form.buyer: + raise ValueError('Dieser Kundenname ist mit anderen Stammdaten gespeichert. ' + 'Bitte den gespeicherten Kunden auswählen oder die Stammdaten in der Kundendatei prüfen.') + self.status.setText('E-Rechnung wird erstellt …') + self.start_task('generate', form, self.show_result) + except Exception as exc: + self.error(str(exc)) + + def show_result(self, payload): + result = CreatedInvoice(BuildResult(**{key: Path(value) if value is not None else None + for key, value in payload['build'].items()}), + Path(payload['attachment']), Invoice.model_validate(payload['invoice'])) + self.result = result + self.generated = True + self.dirty = False + self.refresh_templates() + for widget in (self.open_pdf, self.open_folder, self.open_report): + widget.setEnabled(True) + self.preview_state.setText(f'{result.invoice.meta.invoice_number} · PDF/A und EN16931 technisch gültig') + self.status.setText('Fertige E-Rechnung gespeichert. Empfänger, Leistungsdaten und Betrag vor Versand prüfen. ' + 'Die angezeigte PDF kann direkt als E-Mail-Anhang verwendet werden.') + try: + self.show_pdf(result.attachment) + except Exception as exc: + self.error('Rechnung erfolgreich gespeichert; Vorschau fehlgeschlagen: ' + str(exc)) + + def open_result(self, kind): + if self.result: + path = {'pdf': self.result.attachment, 'folder': self.result.build.invoice_dir, + 'report': self.result.build.validate_report}[kind] + QDesktopServices.openUrl(QUrl.fromLocalFile(str(path))) + + def closeEvent(self, event): + if self.worker is not None: + self.status.setText('Bitte warten: Die laufende Erstellung oder Prüfung wird zuerst abgeschlossen.') + event.ignore() + return + if self.dirty and QMessageBox.question( + self, 'Formular schließen?', 'Ungespeicherte Formulareingaben verwerfen und schließen?', + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, + QMessageBox.StandardButton.No) != QMessageBox.StandardButton.Yes: + event.ignore() + return + self.document.close() + self.scratch.cleanup() + event.accept() + + +def main(argv=None): + parser = argparse.ArgumentParser(description='Lokaler Rechnungsassistent mit PDF-Vorschau für JR IT Services.') + parser.add_argument('--root', type=Path, help='Abweichender Rechnungsstamm') + parser.add_argument('--mustang-jar', type=Path, help='Abweichende Mustang-CLI.jar') + args = parser.parse_args(argv) + app = QApplication(sys.argv[:1]) + app.setApplicationName('JR eInvoice') + app.setOrganizationName('JR IT Services') + app.setStyle('Fusion') + app.setPalette(app.style().standardPalette()) + try: + window = InvoiceWindow(root=args.root, jar=args.mustang_jar) + window.show() + return app.exec() + except Exception as exc: + print(f'GUI konnte nicht gestartet werden: {exc}', file=sys.stderr) + return 1 + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/jr_einvoice/gui_data.py b/jr_einvoice/gui_data.py new file mode 100644 index 0000000..98500fb --- /dev/null +++ b/jr_einvoice/gui_data.py @@ -0,0 +1,99 @@ +"""Geprüfte Formulardaten und private Vorlagen ohne Abhängigkeit von Qt.""" +from datetime import date, timedelta +from pathlib import Path +import os +import re +import tempfile + +from pydantic import Field, model_validator +import yaml + +from .models import Invoice, Item, Party, StrictModel +from .presets import load_yaml + + +class InvoiceForm(StrictModel): + """Vollständiger neuer Auftrag; die endgültige Nummer vergibt der Kern.""" + + buyer: Party + items: list[Item] = Field(min_length=1) + issued: date = Field(default_factory=date.today) + due_days: int = Field(default=30, ge=0, le=3650) + start: date + end: date + number: str | None = Field(default=None, pattern=r'^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$') + notes: str = 'Vielen Dank für Ihren Auftrag.' + buyer_reference: str | None = None + order_reference: str | None = None + + @model_validator(mode='after') + def ordered_period(self): + if self.start > self.end: + raise ValueError('Der Leistungsbeginn muss vor dem Leistungsende liegen') + return self + + def invoice(self, presets: Path) -> Invoice: + """Auch Absender und Zahlungsdaten vor jeder Erstellung vollständig prüfen.""" + seller = load_yaml(presets / 'seller.default.yaml') + if not seller.get('seller') or not seller.get('payment'): + raise ValueError(f'Absender und Zahlungsdaten fehlen: {presets / "seller.default.yaml"}') + return Invoice.model_validate({ + 'seller': seller['seller'], 'buyer': self.buyer, + 'items': self.items, + 'meta': {'invoice_number': self.number or 'AUTOMATISCH', 'invoice_date': self.issued, + 'service_date': self.end, 'service_period_start': self.start, + 'service_period_end': self.end, 'notes': self.notes, + 'buyer_reference': self.buyer_reference, 'order_reference': self.order_reference}, + 'payment': {**seller['payment'], 'due_date': self.issued + timedelta(days=self.due_days), + 'reference': f'Rechnung {self.number or "AUTOMATISCH"}'}}) + + +class InvoiceTemplate(StrictModel): + """Vorlagen enthalten bewusst keine alte Rechnungsnummer oder Leistungsdaten.""" + + schema_version: int = Field(default=1, ge=1, le=1) + buyer: Party + items: list[Item] = Field(min_length=1) + due_days: int = Field(default=30, ge=0, le=3650) + notes: str = 'Vielen Dank für Ihren Auftrag.' + buyer_reference: str | None = None + order_reference: str | None = None + + @classmethod + def from_form(cls, form: InvoiceForm): + return cls.model_validate(form.model_dump(exclude={'issued', 'start', 'end', 'number'})) + + +def load_template(path: Path) -> InvoiceTemplate: + """Eigene Vorlagen oder bestehende invoice.yaml als neue Rechnung übernehmen.""" + data = load_yaml(path) + if 'meta' in data: + inv = Invoice.model_validate(data) + return InvoiceTemplate(buyer=inv.buyer, items=inv.items, + due_days=(inv.payment.due_date - inv.meta.invoice_date).days, + notes=inv.meta.notes or '', buyer_reference=inv.meta.buyer_reference, + order_reference=inv.meta.order_reference) + return InvoiceTemplate.model_validate(data) + + +def save_template(directory: Path, name: str, template: InvoiceTemplate, *, overwrite=False) -> Path: + """Vorlagen geschützt speichern; vorhandene Namen nur ausdrücklich überschreiben.""" + if not re.fullmatch(r'[\wÄÖÜäöüß][\wÄÖÜäöüß .-]{0,79}', name) or name.endswith(('.', ' ')): + raise ValueError('Vorlagenname: 1–80 Buchstaben/Ziffern, Leerzeichen, Punkt oder Bindestrich') + directory.mkdir(parents=True, exist_ok=True, mode=0o700) + target = directory / f'{name}.yaml' + # Die temporäre Datei bleibt bei jedem Fehler außerhalb der Vorlagenauswahl. + fd, temporary = tempfile.mkstemp(prefix='.vorlage-', dir=directory) + try: + with os.fdopen(fd, 'w', encoding='utf-8') as stream: + yaml.safe_dump(template.model_dump(mode='json'), stream, allow_unicode=True, sort_keys=False) + stream.flush() + os.fsync(stream.fileno()) + if overwrite: + os.replace(temporary, target) + else: + # link statt exists+rename verhindert auch gleichzeitiges Überschreiben. + os.link(temporary, target) + finally: + Path(temporary).unlink(missing_ok=True) + return target diff --git a/jr_einvoice/gui_worker.py b/jr_einvoice/gui_worker.py new file mode 100644 index 0000000..3adfc53 --- /dev/null +++ b/jr_einvoice/gui_worker.py @@ -0,0 +1,76 @@ +"""PDF-Erzeugung in einem eigenen Prozess ohne Qt-Laufzeit ausführen.""" +from __future__ import annotations + +import json +import logging +from pathlib import Path +import shutil +import sys + +from .create import create_invoice, find_customer, save_customer +from .gui_data import InvoiceForm +from .models import Party +from .render import render_html, render_pdf + + +def execute(request: dict, progress) -> dict: + """Nur geprüfte Formulardaten an die gemeinsame Rechnungserstellung übergeben.""" + form = InvoiceForm.model_validate(request['form']) + presets, resources = Path(request['presets']), Path(request['resources']) + invoice = form.invoice(presets) + if request['mode'] == 'preview': + progress('Entwurf wird ohne Nummernreservierung erstellt …') + invoice.meta.invoice_number = 'ENTWURF' + invoice.payment.reference = 'Entwurf – noch keine Rechnungsnummer vergeben' + invoice.meta.notes = 'ENTWURF – nicht zum Versand.\n' + (invoice.meta.notes or '') + folder = Path(request['scratch']) + (folder / 'assets').mkdir(exist_ok=True) + logo = presets / 'logo.svg' + if not logo.is_file(): + logo = resources / 'assets/logo.svg' + shutil.copy2(logo, folder / 'assets/logo.svg') + result = render_pdf(render_html(invoice, resources / 'templates/invoice.html.j2'), + folder / 'entwurf.pdf', logging.getLogger('gui-preview'), base_url=str(folder)) + if not result.ok: + raise RuntimeError(result.error) + return {'pdf': str(result.path)} + if request['mode'] != 'generate': + raise ValueError('Unbekannter Auftrag') + jar = Path(request['jar']) + if not jar.is_file(): + raise ValueError('Mustang fehlt. Einmalig jr-einvoice setup-mustang ausführen.') + existing = find_customer(presets, form.buyer.name) + if existing and Party.model_validate(existing[1]['buyer']) != form.buyer: + raise ValueError('Dieser Kundenname ist mit anderen Stammdaten gespeichert. ' + 'Bitte den gespeicherten Kunden auswählen oder die Kundendatei prüfen.') + # Vorlagen dürfen vorhandene Kundenadressen nicht stillschweigend ersetzen. + match = existing or save_customer(presets, form.buyer.name, form.buyer.model_dump(mode='json')) + first = form.items[0] + result = create_invoice(root=Path(request['root']), resources=resources, presets=presets, + customer=match[0], entry=first.name, volume=first.quantity, + price=first.unit_price_net, items=form.items, notes=form.notes, + jar=jar, logger=logging.getLogger('gui'), number=form.number, + issued=form.issued, due_days=form.due_days, + service_period_start=form.start, service_period_end=form.end, + buyer_reference=form.buyer_reference, order_reference=form.order_reference, + progress=progress) + return {'invoice': result.invoice.model_dump(mode='json'), 'attachment': str(result.attachment), + 'build': {key: str(value) if value is not None else None + for key, value in vars(result.build).items()}} + + +def main(argv=None): + request_path = Path((argv or sys.argv[1:])[0]) + result_path = request_path.with_name('result.json') + try: + request = json.loads(request_path.read_text(encoding='utf-8')) + result = execute(request, lambda message: print(json.dumps({'progress': message}), flush=True)) + result_path.write_text(json.dumps({'result': result}), encoding='utf-8') + return 0 + except Exception as exc: + result_path.write_text(json.dumps({'error': str(exc)}), encoding='utf-8') + return 1 + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/jr_einvoice/maintenance.py b/jr_einvoice/maintenance.py index b9aad68..def65c8 100644 --- a/jr_einvoice/maintenance.py +++ b/jr_einvoice/maintenance.py @@ -1,4 +1,4 @@ -"""Checkout maintenance; standard library only, so broken dependencies cannot block rollback.""" +"""Laufzeiten isoliert aktualisieren; Rollback bleibt ohne Zusatzpakete nutzbar.""" from __future__ import annotations import argparse @@ -61,6 +61,7 @@ class Maintenance: env.pop(key, None) env['JR_EINVOICE_MUSTANG_JAR'] = str(release / 'Mustang-CLI.jar') env['JR_EINVOICE_INTEGRATION'] = '1' + env['QT_QPA_PLATFORM'] = 'offscreen' self.log.info('PRÜFUNG: pip check, WeasyPrint, CLI und echte Rechnungs-/Negativtests') self.run([python, '-I', '-m', 'pip', 'check'], env=env) with tempfile.TemporaryDirectory(prefix='einvoice-health-') as folder: @@ -87,7 +88,7 @@ class Maintenance: def activate(self, target: Path): active = self.state / 'current' old = active.resolve() if active.is_symlink() else self.baseline() - # Persist rollback target before changing the single runtime pointer. + # Rücksprungziel vor dem einzigen aktiven Laufzeitzeiger sichern. point(self.state / 'previous', old) self.log.info('AKTIVIERUNG: %s', target) point(active, target) @@ -99,7 +100,7 @@ class Maintenance: raise self.log.info('ERFOLG: Laufzeit aktiv. Rollback verfügbar: %s', old) - def update(self, apply=False, version=None): + def update(self, apply=False, version=None, gui=False): version = version or get_latest_mustang_version(self.log) if not re.fullmatch(r'\d+(?:\.\d+)+', version): raise ValueError(f'Keine stabile Mustang-Version: {version!r}; --mustang-version verwenden.') @@ -109,9 +110,14 @@ class Maintenance: self.run(['java', '-version']) self.run([sys.executable, '-m', 'venv', release / 'venv']) python = release / 'venv/bin/python' + # Eine einmal aktivierte Oberfläche auch bei späteren Updates mitnehmen. + current_manifest = self.state / 'current/manifest.json' + if current_manifest.is_file(): + gui = gui or json.loads(current_manifest.read_text()).get('gui', False) + extras = 'pdf,gui' if gui else 'pdf' self.run([python, '-m', 'pip', 'install', '--upgrade', 'pip']) self.run([python, '-m', 'pip', 'install', '--upgrade', '--upgrade-strategy', 'eager', - '--report', release / 'install-report.json', f'{self.root}[pdf]']) + '--report', release / 'install-report.json', f'{self.root}[{extras}]']) install_mustang(version, release / 'Mustang-CLI.jar', self.log) frozen = self.run([python, '-m', 'pip', 'freeze', '--all']) (release / 'requirements.freeze.txt').write_text(frozen) @@ -122,7 +128,7 @@ class Maintenance: before = old.get(package['name'].lower(), '(neu)') if before != package['version']: self.log.info('VERSION: %s: %s -> %s', package['name'], before, package['version']) - manifest = {'mustang': version, 'jar_sha256': hashlib.sha256((release / 'Mustang-CLI.jar').read_bytes()).hexdigest(), + manifest = {'mustang': version, 'gui': gui, 'jar_sha256': hashlib.sha256((release / 'Mustang-CLI.jar').read_bytes()).hexdigest(), 'packages': packages, 'source_commit': self.run(['git', 'rev-parse', 'HEAD']).strip()} (release / 'manifest.json').write_text(json.dumps(manifest, indent=2) + '\n') self.health(release) @@ -147,6 +153,7 @@ def main(argv=None): mode.add_argument('--rollback', action='store_true', help='Vorherigen Stand prüfen und aktivieren') mode.add_argument('--status', action='store_true', help='Aktiven und vorherigen Stand anzeigen, ohne Netzwerk') parser.add_argument('--mustang-version', help='Explizite stabile Version statt Maven-Release') + parser.add_argument('--with-gui', action='store_true', help='Desktop-Oberfläche einschließlich PDF-Anzeige installieren') args = parser.parse_args(argv) root = Path(__file__).resolve().parent.parent state = root / '.runtime' @@ -170,7 +177,7 @@ def main(argv=None): elif args.rollback: maintenance.rollback() else: - maintenance.update(args.apply, args.mustang_version) + maintenance.update(args.apply, args.mustang_version, args.with_gui) except (Exception, KeyboardInterrupt) as exc: logging.getLogger('maintenance').error('FEHLER: %s; nicht aktivierte Kandidaten bleiben zur Diagnose erhalten.', exc) return 1 diff --git a/pyproject.toml b/pyproject.toml index 8456c20..a06fea1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "jr-einvoice-toolchain" -version = "1.0.0" +version = "1.1.0" description = "Folder-first Factur-X (ZUGFeRD/EN16931) invoice generator for Linux/Arch: invoice folder + YAML -> PDF + XML -> Factur-X PDF + validation." readme = "README.md" requires-python = ">=3.11" @@ -22,10 +22,14 @@ dependencies = [ pdf = [ "weasyprint>=62.3" ] +gui = [ + "PySide6>=6.8,<7" +] [project.scripts] jr-einvoice = "jr_einvoice.cli:app" einvoice = "jr_einvoice.quick_cli:main" +einvoice-ui = "jr_einvoice.gui:main" [tool.hatch.build.targets.wheel] packages = ["jr_einvoice"] diff --git a/scripts/install_commands.py b/scripts/install_commands.py index 6d24b64..fdaf06c 100755 --- a/scripts/install_commands.py +++ b/scripts/install_commands.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Install per-user launchers without sudo or changing shell configuration.""" +"""Starter im Benutzer-Suchpfad ohne sudo oder Änderungen an der Shell einrichten.""" import argparse from datetime import datetime, timezone import os @@ -15,7 +15,7 @@ def install(bin_dir: Path) -> None: bin_dir.mkdir(parents=True, exist_ok=True) changed = [] try: - for name in ('einvoice', 'jr-einvoice'): + for name in ('einvoice', 'jr-einvoice', 'einvoice-ui'): source = root / 'bin' / name target = bin_dir / name if target.is_symlink() and target.resolve() == source: @@ -41,7 +41,7 @@ def install(bin_dir: Path) -> None: temporary.unlink(missing_ok=True) changed.append((target, backup)) print(f'Eingerichtet: {target} -> {source}', flush=True) - # A different cwd verifies that symlinks resolve to the checkout correctly. + # Aus fremdem Verzeichnis die Auflösung der Konsolenstarter prüfen. for name in ('einvoice', 'jr-einvoice'): subprocess.run([str(bin_dir / name), '--help'], cwd=bin_dir, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True) @@ -56,16 +56,30 @@ def install(bin_dir: Path) -> None: if str(bin_dir) not in os.environ.get('PATH', '').split(os.pathsep): import shlex print(f'Für diese Shell ausführen: export PATH={shlex.quote(str(bin_dir))}:"$PATH"') - print('Ab jetzt: einvoice --help | einvoice --update --status | jr-einvoice --help') + print('Ab jetzt: einvoice --help | einvoice-ui | einvoice --update --status | jr-einvoice --help') print('Falls die Shell noch den alten Pfad merkt: rehash (zsh) bzw. hash -r (bash).') def main(): parser = argparse.ArgumentParser(description='einvoice und jr-einvoice im Benutzer-Suchpfad einrichten.') parser.add_argument('--bin-dir', type=Path, default=Path.home() / '.local/bin') + parser.add_argument('--desktop', action='store_true', help='Zusätzlich einen Eintrag im Anwendungsmenü installieren') args = parser.parse_args() try: install(args.bin_dir) + if args.desktop: + root = Path(__file__).resolve().parent.parent + applications = Path(os.environ.get('XDG_DATA_HOME', Path.home() / '.local/share')) / 'applications' + applications.mkdir(parents=True, exist_ok=True) + launcher = str(root / 'bin/einvoice-ui').replace('%', '%%') + for char in ('\\', '"', '`', '$'): + launcher = launcher.replace(char, '\\' + char) + entry = applications / 'de.jr-it-services.einvoice.desktop' + entry.write_text('[Desktop Entry]\nType=Application\nName=JR eInvoice\n' + 'Comment=E-Rechnungen erstellen und als PDF ansehen\n' + f'Exec="{launcher}"\nIcon={root / "assets/logo.svg"}\n' + 'Terminal=false\nCategories=Office;Finance;\nStartupNotify=true\n', encoding='utf-8') + print(f'Anwendungsmenü eingerichtet: {entry}') except (Exception, KeyboardInterrupt) as exc: print(f'FEHLER: {exc}; geänderte Befehle wurden zurückgesetzt.', file=sys.stderr) if isinstance(exc, subprocess.CalledProcessError) and exc.stderr: diff --git a/tests/test_gui.py b/tests/test_gui.py new file mode 100644 index 0000000..a174b9a --- /dev/null +++ b/tests/test_gui.py @@ -0,0 +1,224 @@ +"""Vorlagen, GUI-Zustände und optional die vollständige echte Rechnung prüfen.""" +import calendar +from datetime import date +import importlib.util +import logging +import os +from pathlib import Path +import tempfile +import time +import unittest +from unittest.mock import patch + +import yaml + +from jr_einvoice.calc import compute_totals +from jr_einvoice.create import create_invoice, save_customer +from jr_einvoice.models import Invoice + +# Beim Rollback ältere Laufzeiten mit ihrer tatsächlich verfügbaren Funktion prüfen. +HAS_GUI_DATA = importlib.util.find_spec('jr_einvoice.gui_data') is not None +if HAS_GUI_DATA: + from jr_einvoice.gui_data import InvoiceForm, InvoiceTemplate, load_template, save_template + +ROOT = Path(__file__).resolve().parent.parent +SAMPLE = Invoice.model_validate(yaml.safe_load((ROOT / 'examples/invoice.sample.yaml').read_text())) +HAS_QT = importlib.util.find_spec('PySide6') is not None + + +@unittest.skipUnless(HAS_GUI_DATA, 'Diese Laufzeit enthält noch keinen Desktop-Assistenten') +class TemplateTest(unittest.TestCase): + def test_roundtrip_excludes_old_number_dates_and_bank_details(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + template = load_template(ROOT / 'examples/invoice.sample.yaml') + path = save_template(root / 'templates', 'IT-Beratung', template) + self.assertEqual(load_template(path), template) + data = yaml.safe_load(path.read_text()) + for excluded in ('meta', 'number', 'issued', 'start', 'end', 'seller', 'payment'): + self.assertNotIn(excluded, data) + self.assertEqual(path.stat().st_mode & 0o777, 0o600) + self.assertEqual(path.parent.stat().st_mode & 0o777, 0o700) + with self.assertRaises(FileExistsError): + save_template(path.parent, 'IT-Beratung', template) + save_template(path.parent, 'IT-Beratung', template, overwrite=True) + for name in ('../escape', '/tmp/escape', '', 'a/b', '..', 'trailing.'): + with self.assertRaises(ValueError): + save_template(path.parent, name, template) + + def test_invalid_template_version_and_position_rejected(self): + template = load_template(ROOT / 'examples/invoice.sample.yaml') + for changes in ({'schema_version': 2}, {'items': []}, {'old_number': '2020-1234'}): + with self.assertRaises(ValueError): + InvoiceTemplate.model_validate(template.model_dump() | changes) + + def test_multiple_items_custom_period_and_notes_use_shared_core(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + presets = root / 'presets' + presets.mkdir() + (presets / 'seller.default.yaml').write_text(yaml.safe_dump({ + 'seller': SAMPLE.seller.model_dump(mode='json'), 'payment': SAMPLE.payment.model_dump(mode='json')})) + save_customer(presets, SAMPLE.buyer.name, SAMPLE.buyer.model_dump(mode='json')) + items = SAMPLE.items + form = InvoiceForm(buyer=SAMPLE.buyer, items=items, start=date(2026, 9, 10), + end=date(2026, 9, 20), notes='Individuelle Hinweise', issued=date(2026, 10, 19)) + invoice = form.invoice(presets) + self.assertEqual(compute_totals(invoice).gross_total, compute_totals(SAMPLE).gross_total) + jar = root / 'mustang.jar' + jar.touch() + # Abbruch genau am Übergang zur PDF-Erzeugung: gespeicherte Daten prüfen. + with patch('jr_einvoice.create.build_in_folder', side_effect=RuntimeError('Testabbruch')): + with self.assertRaises(RuntimeError): + create_invoice(root=root / 'invoices', resources=ROOT, presets=presets, + customer=SAMPLE.buyer.name, entry='Oktober 2026', volume=1, price=1, + items=items, notes=form.notes, jar=jar, logger=logging.getLogger('test'), + service_period_start=form.start, service_period_end=form.end) + saved = Invoice.model_validate(yaml.safe_load(next((root / 'invoices').glob('*/invoice.yaml')).read_text())) + self.assertEqual(saved.items, items) + self.assertEqual(saved.meta.service_period_start, form.start) + self.assertEqual(saved.meta.service_period_end, form.end) + self.assertEqual(saved.meta.notes, form.notes) + + +@unittest.skipUnless(HAS_QT and HAS_GUI_DATA, 'Diese Laufzeit enthält keine installierte Desktop-Oberfläche') +class GuiTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + os.environ.setdefault('QT_QPA_PLATFORM', 'offscreen') + from PySide6.QtWidgets import QApplication + cls.app = QApplication.instance() or QApplication([]) + cls.app.setStyle('Fusion') + + def setUp(self): + from jr_einvoice.gui import InvoiceWindow + self.tmp = tempfile.TemporaryDirectory() + self.addCleanup(self.tmp.cleanup) + self.home = Path(self.tmp.name) + self.env = patch.dict(os.environ, {'JR_EINVOICE_HOME': str(self.home)}) + self.env.start() + self.addCleanup(self.env.stop) + presets = self.home / 'presets' + presets.mkdir() + (presets / 'seller.default.yaml').write_text(yaml.safe_dump({ + 'seller': SAMPLE.seller.model_dump(mode='json'), 'payment': SAMPLE.payment.model_dump(mode='json')})) + self.jar = Path(os.environ.get('JR_EINVOICE_MUSTANG_JAR', ROOT / 'tools/mustang/Mustang-CLI.jar')) + self.window = InvoiceWindow(root=self.home / 'invoices', presets=presets, jar=self.jar) + self.addCleanup(self.cleanup_window) + self.window.confirm_replace = lambda: True + self.errors = [] + self.window.error = self.errors.append + + def cleanup_window(self): + self.wait_worker() + self.window.dirty = False + self.window.close() + self.window.deleteLater() + self.app.processEvents() + + def wait_worker(self): + from PySide6.QtTest import QTest + deadline = time.monotonic() + 150 + while self.window.worker is not None and time.monotonic() < deadline: + self.app.processEvents() + QTest.qWait(20) + self.assertIsNone(self.window.worker, 'Hintergrundauftrag nicht rechtzeitig abgeschlossen') + self.app.processEvents() + + def load_sample(self): + self.window.apply_template(ROOT / 'examples/invoice.sample.yaml') + self.assertFalse(self.errors) + + def test_load_earlier_invoice_resets_dates_but_preserves_details(self): + self.load_sample() + form = self.window.form() + self.assertEqual(form.issued, date.today()) + self.assertEqual(form.start, date.today().replace(day=1)) + self.assertEqual(form.end.day, calendar.monthrange(date.today().year, date.today().month)[1]) + self.assertIsNone(form.number) + self.assertEqual(form.buyer, SAMPLE.buyer) + self.assertEqual(form.items, SAMPLE.items) + self.window.positions[0].quantity.setText('7,5') + self.window.positions[0].price.setText('1.234,56 €') + self.assertEqual(str(self.window.form().items[0].unit_price_net), '1234.56') + self.assertIn('Brutto', self.window.totals.text()) + + def test_invalid_fields_do_not_save_customer_or_reserve_number(self): + self.load_sample() + self.window.positions[0].quantity.setText('-1') + self.window.generate() + self.assertTrue(self.errors) + self.assertIsNone(self.window.worker) + self.assertFalse(self.window.root.exists()) + self.assertEqual(list((self.window.presets / 'customers').glob('*.yaml')), []) + + def test_existing_customer_cannot_be_silently_overwritten(self): + save_customer(self.window.presets, SAMPLE.buyer.name, + SAMPLE.buyer.model_dump(mode='json') | {'email': 'andere@example.invalid'}) + self.load_sample() + self.window.generate() + self.assertIn('anderen Stammdaten', self.errors[0]) + self.assertIsNone(self.window.worker) + self.assertFalse(self.window.root.exists()) + + def test_preview_creates_no_customer_or_invoice_number(self): + self.load_sample() + self.window.preview() + self.wait_worker() + self.assertFalse(self.errors) + self.assertGreater(self.window.document.pageCount(), 0) + self.assertIn('ENTWURF', self.window.preview_state.text()) + self.assertFalse(self.window.root.exists()) + self.assertEqual(list((self.window.presets / 'customers').glob('*.yaml')), []) + self.assertFalse(self.window.open_pdf.isEnabled()) + + def test_background_failure_restores_editing_without_success(self): + self.load_sample() + self.window.jar = self.home / 'kaputte-mustang.jar' + self.window.jar.write_text('Keine gültige JAR') + self.window.generate() + self.wait_worker() + self.assertEqual(len(self.errors), 1) + self.assertIn('Erstellung fehlgeschlagen', self.errors[0]) + self.assertTrue(self.window.editor.isEnabled()) + self.assertTrue(self.window.generate_button.isEnabled()) + self.assertFalse(self.window.open_pdf.isEnabled()) + self.assertIsNone(self.window.result) + + def test_worker_start_failure_restores_form(self): + self.load_sample() + with patch('jr_einvoice.gui.sys.executable', '/nonexistent-jr-einvoice-python'): + self.window.preview() + self.wait_worker() + self.assertEqual(len(self.errors), 1) + self.assertIn('Hintergrundprozess fehlgeschlagen', self.errors[0]) + self.assertTrue(self.window.editor.isEnabled()) + self.assertTrue(self.window.preview_button.isEnabled()) + + @unittest.skipUnless(os.environ.get('JR_EINVOICE_INTEGRATION') == '1', 'Echte Mustang-Prüfung nur nach Opt-in') + def test_real_click_to_validated_pdf_preview_and_new_invoice(self): + self.load_sample() + self.window.generate_button.click() + self.assertFalse(self.window.editor.isEnabled()) + self.wait_worker() + self.assertFalse(self.errors) + result = self.window.result + self.assertIsNotNone(result) + self.assertIn('status="valid"', result.build.validate_report.read_text()) + self.assertGreater(self.window.document.pageCount(), 0) + self.assertEqual(result.attachment.read_bytes(), result.build.facturx_pdf.read_bytes()) + self.assertFalse(self.window.generate_button.isEnabled()) + self.assertFalse(self.window.preview_button.isEnabled()) + self.assertTrue(self.window.open_pdf.isEnabled()) + # Doppelaufruf desselben Formulars legt keine zusätzliche Nummer an. + self.window.generate() + self.assertIsNone(self.window.worker) + self.assertEqual(len(list(self.window.root.glob('*/invoice.yaml'))), 1) + self.window.notes.setPlainText('Geänderte Hinweise') + self.assertIn('vorherigen Stand', self.window.preview_state.text()) + self.assertFalse(self.window.open_pdf.isEnabled()) + self.window.new_invoice() + self.assertIsNone(self.window.result) + self.assertEqual(len(self.window.positions), 1) + self.assertEqual(self.window.document.pageCount(), 0) + self.assertFalse(self.window.dirty)