"""sn_verfahrensgebiet/ui/eigentuemer_korrektur_dialog.py – Korrekturdialog für den Bearbeiter (#56). Zeigt die Felder eines angezeigten Eintrags zum Bearbeiten. Sind mehrere Einträge angezeigt, wählt der Bearbeiter oben, welchen er korrigiert. Der Dialog speichert nichts selbst; das übernimmt der Tab über :mod:`sn_verfahrensgebiet.functions.eigentuemer_korrektur`. """ from typing import Dict, Optional, Sequence, Tuple from sn_basis.functions.qt_wrapper import ( QT_VERSION, exec_dialog, DialogAccepted, QDialog, QDialogButtonBox, QVBoxLayout, QGridLayout, QLabel, QLineEdit, QComboBox, ) from sn_verfahrensgebiet.functions.eigentuemer_suche import Eigentuemer from sn_verfahrensgebiet.functions.eigentuemer_korrektur import FELDER, feldwerte def frage_korrektur( parent, eintraege: Sequence[Eigentuemer], ) -> Optional[Tuple[int, Dict[str, str]]]: """Fragt die korrigierten Werte ab. Returns ------- Optional[Tuple[int, Dict[str, str]]] Index des gewählten Eintrags und die Werte aller Felder, oder ``None`` bei Abbruch (und im Mock-Modus). """ if not eintraege or QT_VERSION == 0: return None dialog = QDialog(parent) dialog.setWindowTitle("Daten korrigieren") layout = QVBoxLayout(dialog) auswahl = QComboBox() for eintrag in eintraege: auswahl.addItem(f"{eintrag.name} – {eintrag.anschrift}") if len(eintraege) > 1: layout.addWidget(QLabel("Eintrag:")) layout.addWidget(auswahl) raster = QGridLayout() felder: Dict[str, QLineEdit] = {} for zeile, (schluessel, beschriftung) in enumerate(FELDER): raster.addWidget(QLabel(f"{beschriftung}:"), zeile, 0) feld = QLineEdit() raster.addWidget(feld, zeile, 1) felder[schluessel] = feld layout.addLayout(raster) def _fuellen(index: int) -> None: if 0 <= index < len(eintraege): for schluessel, wert in feldwerte(eintraege[index]).items(): felder[schluessel].setText(wert) auswahl.currentIndexChanged.connect(_fuellen) _fuellen(0) hinweis = QLabel( "Die Eigentümerdatei bleibt unverändert. Jede Änderung wird in der " "Korrektur-CSV festgehalten und sofort im Anzeigefenster gezeigt. " "Mehrere E-Mail-Adressen mit Komma trennen." ) hinweis.setWordWrap(True) layout.addWidget(hinweis) knoepfe = QDialogButtonBox(QDialogButtonBox.StandardButton.Save | QDialogButtonBox.StandardButton.Cancel) knoepfe.accepted.connect(dialog.accept) knoepfe.rejected.connect(dialog.reject) layout.addWidget(knoepfe) dialog.resize(520, dialog.sizeHint().height()) if exec_dialog(dialog) != DialogAccepted: return None return auswahl.currentIndex(), {schluessel: feld.text() for schluessel, feld in felder.items()}