„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>
84 lines
3.2 KiB
Python
84 lines
3.2 KiB
Python
"""sn_verfahrensgebiet/ui/eigentuemer_treffer.py – Trefferliste der Eigentümersuche (#56).
|
||
|
||
Nicht modales Fenster für den Bearbeiter. Es zeigt die zusammengefassten
|
||
Treffer mit dem Wert von ``PER_RECHTSPERSON`` (noch nicht entschlüsselt) und dem
|
||
Kennzeichen „verstorben“ und erlaubt die Mehrfachauswahl. „Daten anzeigen“
|
||
übergibt die Auswahl an das Anzeigefenster für den Eigentümer. Die Tabelle kommt aus
|
||
:func:`~sn_verfahrensgebiet.functions.verfahrensgebiet_dialoge.baue_auswahltabelle`,
|
||
dieselbe wie bei „Verfahrensgebiete aus Landkreis laden“.
|
||
"""
|
||
|
||
from typing import Callable, List, Optional, Sequence, Tuple
|
||
|
||
from sn_basis.functions.qt_wrapper import QDialog, QVBoxLayout, QHBoxLayout, QLabel, QPushButton
|
||
|
||
from sn_verfahrensgebiet.functions.eigentuemer_suche import Eigentuemer
|
||
from sn_verfahrensgebiet.functions.verfahrensgebiet_dialoge import (
|
||
baue_auswahltabelle,
|
||
ausgewaehlte_indizes,
|
||
)
|
||
|
||
SPALTENKOEPFE = ["Name", "Anschrift", "E-Mail", "Rechtsperson", "Hinweis"]
|
||
|
||
|
||
def trefferzeile(eigentuemer: Eigentuemer) -> Tuple[str, str, str, str, str]:
|
||
"""Spaltentexte eines Treffers in der Reihenfolge von :data:`SPALTENKOEPFE`."""
|
||
return (
|
||
eigentuemer.name,
|
||
eigentuemer.anschrift,
|
||
", ".join(eigentuemer.emails),
|
||
eigentuemer.rechtsperson_text,
|
||
eigentuemer.hinweise,
|
||
)
|
||
|
||
|
||
class EigentuemerTrefferFenster(QDialog):
|
||
"""Trefferliste der Eigentümersuche; bleibt offen, während weitergesucht wird."""
|
||
|
||
def __init__(
|
||
self,
|
||
treffer: Sequence[Eigentuemer],
|
||
parent=None,
|
||
beim_anzeigen: Optional[Callable[[List[Eigentuemer]], None]] = None,
|
||
):
|
||
super().__init__(parent)
|
||
self.treffer: List[Eigentuemer] = list(treffer)
|
||
self.beim_anzeigen = beim_anzeigen
|
||
self.setWindowTitle("Eigentümersuche – Treffer")
|
||
self.setModal(False)
|
||
|
||
layout = QVBoxLayout(self)
|
||
anzahl = len(self.treffer)
|
||
layout.addWidget(QLabel("1 Eintrag gefunden." if anzahl == 1 else f"{anzahl} Einträge gefunden."))
|
||
|
||
self.tabelle = baue_auswahltabelle(
|
||
layout,
|
||
SPALTENKOEPFE,
|
||
[trefferzeile(e) for e in self.treffer],
|
||
platzhalter="Name, Ort oder Hinweis …",
|
||
)
|
||
self.tabelle.resizeColumnsToContents()
|
||
if anzahl == 1:
|
||
self.tabelle.selectRow(0)
|
||
|
||
knoepfe = QHBoxLayout()
|
||
self.btn_anzeigen = QPushButton("Daten anzeigen")
|
||
self.btn_anzeigen.setToolTip("Zeigt die ausgewählten Einträge im Fenster für den Eigentümer.")
|
||
self.btn_anzeigen.clicked.connect(self._on_anzeigen)
|
||
knoepfe.addWidget(self.btn_anzeigen)
|
||
knoepfe.addStretch()
|
||
self.btn_schliessen = QPushButton("Schließen")
|
||
self.btn_schliessen.clicked.connect(self.close)
|
||
knoepfe.addWidget(self.btn_schliessen)
|
||
layout.addLayout(knoepfe)
|
||
|
||
self.resize(760, 420)
|
||
|
||
def ausgewaehlte_eigentuemer(self) -> List[Eigentuemer]:
|
||
"""Die in der Tabelle ausgewählten Treffer, in der Reihenfolge der Trefferliste."""
|
||
return [self.treffer[i] for i in ausgewaehlte_indizes(self.tabelle)]
|
||
|
||
def _on_anzeigen(self) -> None:
|
||
if self.beim_anzeigen is not None:
|
||
self.beim_anzeigen(self.ausgewaehlte_eigentuemer())
|