"""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())