Anzeige für den Eigentümer und Korrekturen im Tab „Eigentümer“ (#56)
„Daten anzeigen“ in der Trefferliste zeigt Name, Anschrift und E-Mail der gewählten Einträge in einem eigenen Fenster: auf einem zweiten Bildschirm im Vollbild, auf dem QGIS-Bildschirm als normales Fenster. Die Sitzung wird von Hand begonnen und beendet; „Anzeige leeren“ entfernt die Daten, ohne das Fenster zu schließen. Konten, IDs und Kennzeichen erscheinen dort nicht, alle Werte werden maskiert. „Korrigieren …“ ändert angezeigte Daten. Die Eigentümerdatei bleibt unverändert; jede Änderung wird mit Zeitpunkt, Konto, Personen-ID, altem und neuem Wert an <Eigentümerdatei>_korrekturen.csv angehängt und sofort angezeigt. Ohne beschreibbaren Ordner wird nach dem Speicherort gefragt. In test_eigentuemer_tab.py sind die beim letzten Mal zusammengezogenen with-Zeilen wieder umbrochen; die Trefferliste bekommt jetzt den Anzeige-Rückruf, der Test dazu ist angepasst. Dritter und letzter Schritt von #56. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
"""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(
|
||||
"<small>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.</small>"
|
||||
)
|
||||
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()}
|
||||
Reference in New Issue
Block a user