80 lines
2.8 KiB
Python
80 lines
2.8 KiB
Python
"""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()}
|