"""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. Die Tabelle kommt aus :func:`~sn_verfahrensgebiet.functions.verfahrensgebiet_dialoge.baue_auswahltabelle`, dieselbe wie bei „Verfahrensgebiete aus Landkreis laden“. """ from typing import List, 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): super().__init__(parent) self.treffer: List[Eigentuemer] = list(treffer) 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() 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)]